Lecture 11 Log into Linux Questions? Tuesday, February 17

advertisement
Lecture 11

Log into Linux

Questions?
Tuesday, February 17
CS 375 UNIX System Programming - Lecture 11
1
Outline

Introduction to PHP

PHP data types

Basic operations

PHP control structures

I/O
Tuesday, February 17
CS 375 UNIX System Programming - Lecture 11
2
What is PHP?


PHP is a portable (UNIX, Windows, Mac)
scripting language with C++-like syntax with
more high-level features than C++ especially
designed for web programming.
PHP was created by Rasmus Lerdorf in 1995 to
make common web programming tasks easier.
The name originally stood for "Personal Home
Page," but has since become to mean "PHP:
Hypertext Processor. PHP 5 is the current
version.
Tuesday, February 17
CS 375 UNIX System Programming - Lecture 11
3
What is PHP?


PHP also can be used at the command-line and
is well-suited for text manipulation and system
administration tasks. It can be used for rapid
prototyping, system utilities, database access,
network programming, and graphical
programming, as well as web applications.
There are several other scripting languages
that are similar to PHP: Perl, Python, TCL,
REXX, Ruby, etc., but PHP combines familiar
syntax, ease of use, and efficiency of execution
in a way that makes it very popular.
Tuesday, February 17
CS 375 UNIX System Programming - Lecture 11
4
PHP Documentation


The PHP manual is on-line (PMAN) and is
considered a very good source.
Supplemental reading references have several
tutorial sites (PINT, PZND, PW3S)
Tuesday, February 17
CS 375 UNIX System Programming - Lecture 11
5
Hello World!

Create a file helloworld.php:
<?php
print "Hello world!\n";
?>

Syntax is like a combination of shell and C++.

To run this script type:
$ php helloworld.php

(Note: the php5-cli package must be installed)

(Note: PHP files do not need to be executable)
Tuesday, February 17
CS 375 UNIX System Programming - Lecture 11
6
Code Islands

PHP scripts (called code islands) are
embedded within static text. The static text is
output verbatim by the PHP interpreter. E.g.
This is text before the first code island
<?php
print "This line is generated by code\n";
?>
This is text between code islands
<?php
print "This line is generated by code\n";
?>
This is text after both code islands
Tuesday, February 17
CS 375 UNIX System Programming - Lecture 11
7
Comments

PHP comments are indicated by //, #,
or /* */. For example:
// This is a comment
# This is a comment, too
/* This is multi­line comment */
Tuesday, February 17
CS 375 UNIX System Programming - Lecture 11
8
Constants

PHP constants are defined using the define
command. E.g.,
define (SecondsPerDay, 86400);
echo "SecondsPerDay\n";


Unlike variables, constant names do not start
with $.
There are several predefined constants. E.g.,


__FILE__, __LINE__ : the file and line being
executed
M_PI, M_SQRT2 : pi and square root of 2
Tuesday, February 17
CS 375 UNIX System Programming - Lecture 11
9
Variables



As with shell scripts, PHP variables are not
declared and may change type through
assignment. Be careful of spelling errors.
PHP has seven data types: integer, float,
boolean, string, array, object, and resource.
However, PHP will do automatic conversion.
PHP variable names always start with $.
$msg = "Hello world!";
print "$msg\n"; // one string
echo $msg, "\n"; // list of items
Tuesday, February 17
CS 375 UNIX System Programming - Lecture 11
10
Arrays


PHP has two types of arrays, indexed and
associative, created using the array
command. Unlike C++, the elements do not
need to be of the same type.
Indexed arrays are created and accessed as
follows:
$data = array(1,"abc",2.5);
echo $data[2], "\n"; // 2.5

Can add to an array using [ ] (array operator):
$data[] = $msg; // $data[3]
Tuesday, February 17
CS 375 UNIX System Programming - Lecture 11
11
Arrays

Associative arrays are created and accessed
as follows:
$fruits = array("a"=>"apple", "b"=>"banana",
"c"=>"cantaloupe");
echo $fruits["b"], "\n"; // banana

Use the array operator to add elements
$fruit["d"] = "date";

For both kinds of arrays, can start with an
empty one and just add elements.
Tuesday, February 17
CS 375 UNIX System Programming - Lecture 11
12
Special Variables

$_SERVER is an associative array that is
indexed by the shell environment variable
names. E.g.
echo $_SERVER['HOME'], "\n";
echo $_SERVER['SHELL'], "\n";
$argc = $_SERVER['argc']; // like C++
$argv = $_SERVER['argv'];
echo "There are ", $argc, "args\n";
echo "They are:\n";
print_r($argv);
Tuesday, February 17
CS 375 UNIX System Programming - Lecture 11
13
Using print_r( )

Structured data like an array or object can be
displayed using the print_r( ) function. E.g.,
// print_r($data);
// print_r($fruits)
Array
(
[0] => 1
[1] => abc
[2] => 2.5
[3] => Hello world!
)
Array
(
[a] => apple
[b] => banana
[c] => cantaloupe
[d] => date
)
Tuesday, February 17
CS 375 UNIX System Programming - Lecture 11
14
Operators



Arithmetic, equality, relational, and logical
operators are as in C++. In addition, there are
logical operators AND and OR.
=== (identity) can be used to check for
unwanted type conversions.
String concatenation is done using '.' E.g.,
$word1 = "hot";
$word2 = "dog";
$word3 = $word1 . $word2; // "hotdog"
Tuesday, February 17
CS 375 UNIX System Programming - Lecture 11
15
Built-in Functions



Math functions are as in C (abs, sin, cos, etc.).
There is also deg2rad( ) for converting degrees
to radians.
C-string operations (strlen, strcmp, substr, etc.)
are supported.
Operations to split strings into an array of words
and vice versa are supported.
Tuesday, February 17
CS 375 UNIX System Programming - Lecture 11
16
String and Array Tricks
$line = "abc\ndef\nghijkl\nmnop";
$parts = explode("\n", $line); // array of elements between separator
$size = count($parts); // 4
$parts[] = "qrst"; // add to end
$partlist = implode(", ", $parts); // string of elements with separator
$input = trim($input); // remove leading/trailing whitespace
$input = rtrim($input); // remove only trailing whitespace
Tuesday, February 17
CS 375 UNIX System Programming - Lecture 11
17
Here Documents

Like the bash scripting language, PHP has
here documents. Note the redirection
operator is <<< and there is a semicolon at the
end.
print <<<EOT
The data is $data[0],
$data[1],
$data[2], and $data[3]
EOT;
Tuesday, February 17
CS 375 UNIX System Programming - Lecture 11
18
Selection Constructs



The if-else statement is same as C++. Multibranch selection has if-elseif-else.
"" (empty string), "0", 0, 0.0 are false, but "0.0"
is true. All other values are true.
The switch statement is same as C++
(including case fall-through without a break
statement), but also can use strings as case
values.
Tuesday, February 17
CS 375 UNIX System Programming - Lecture 11
19
Repetition Constructs


PHP has while, do-while, and for statements
as in C++.
PHP also has a foreach statement for use with
arrays.
foreach ($data as $item) {
print "$item\n";
}
foreach ($fruits as $key => $fruit)
print "$key = $fruit\n";
}
Tuesday, February 17
CS 375 UNIX System Programming - Lecture 11
20
Using isset( )

Since variables are not declared in PHP,
sometimes we want to know whether a variable
has been set (i.e., given a value). This can be
done using the isset( ) function. This function
returns true if the variable argument has been
set and false if it has not.
Tuesday, February 17
CS 375 UNIX System Programming - Lecture 11
21
Using isset( )
$foo = 1;
if (isset($foo)){
print "foo is set\n";
} else {
print "foo is not set\n";
}
if (isset($bar)) {
print "bar is set\n";
} else {
print "bar is not set\n";
}
Tuesday, February 17
CS 375 UNIX System Programming - Lecture 11
22
File Input
$filestring = file_get_contents ($filename);
if ($filestring)
print $filestring;
else
print "Could not open $filename\n";
$handle = fopen($filename, "rt") // or "w","a"
OR die ("Cannot open $filename\n");
while (!feof($handle)) {
$line = fgets ($handle);
print "$line\n";
}
fclose ($handle);
Tuesday, February 17
CS 375 UNIX System Programming - Lecture 11
23
Keyboard Input

PHP was not designed to receive input
interactively. Use the fopen function with
"php://stdin" as the file name.
print "Enter a file name: ";
$handle = fopen ("php://stdin", "rt");
$input = fgets ($handle);
$input = rtrim ($input); // remove '\n'
print "You entered: $input\n";
Tuesday, February 17
CS 375 UNIX System Programming - Lecture 11
24
File Output
$outfile = fopen($filename, "at"); $numbytes = fwrite ($outfile, $string);
fclose ($outfile);
$numbytes = file_put_contents($filename, $string);
// 3rd arg FILE_APPEND to append
Tuesday, February 17
CS 375 UNIX System Programming - Lecture 11
25
File Operations

rename ( ), copy ( ), unlink ( )

rewind ( ), fseek( )

file_exists ( ) - returns true if filename exists

fileatime ( ), filemtime ( ) - returns time in UNIX time_t format

date ( ) - converts time_t to string
$atime = fileatime($filename);
$atimestr = date ("F jS Y H:i:s", $atime);
print "File last accessed: $atimestr\n";

is_file ( ), is_dir ( )

is_readable ( ), is_writeable ( ), is_executable ( ), chmod ( )
Tuesday, February 17
CS 375 UNIX System Programming - Lecture 11
26
In-class Exercise

Write a PHP program in file getinfo.php that
takes a single username as an argument and
then displays that username, uid and home
directory from /etc/passwd in the form shown
below:
$ php getinfo.php lightdm
lightdm (104) /bin/false
$ php getinfo.php root
root (0) /root
Tuesday, February 17
CS 375 UNIX System Programming - Lecture 11
27
Download