Command line interpreter: php not interactive must enclose executable statements in <?php ... ?> if you run on the UTK system, use web.eecs.utk.edu and it will report syntax errors Variables Do not have to be declared Start with $ Strings: $vars inside double quotes are interpolated while they are literal inside single quotes e.g. $a = 20 "$a" = "20" '$a' = '$a' Put curly braces around vars to indicate where they begin and end e.g.; "{$a}lbs" = "20lbs" Concatenation operator is . casts ints and doubles to strings String comparison is same as numeric comparison: ==, !=, <, >, etc. Useful functions strip_tags($string): strips all html and php tags from the string a) this function is useful for "disinfecting" a string since a hacker might try to insert malicious code using php tags substr($str, position, length) position starts at 0 if position is negative then substr counts from the end of the string if length is omitted then you get the rest of the string starting from position strlen($str): returns the length of the string strpos($str, $substr): returns the position of the first occurrence of $substr or NULL trim($string, "charlist"): returns a string with all characters in charlist stripped from the beginning and end of string. If "charlist" is omitted, then trim strips whitespace (blankspaces, tabs, newlines, return characters (\r), and null characters (\0)). a. ltrim: strips only leftmost characters b. rtrim: strips only rightmost characters $array = explode(char, $string): returns an array that splits the string based on the delimiter character. It will not collapse white space. For example: $array = explode(" ", "a b") returns the array ("a", "", "b") $array = preg_split("/perl_pattern/", $string): returns an array that splits the string based on the given perl pattern $array = preg_split("/\s+/", a b") returns ("a", "b") explode is faster if you have a simple delimiter Data Types boolean: TRUE/FALSE or true/false gettype($var): returns the type of the variable legitimate types: integer boolean double string array e.g., $a = 6.2; if (gettype($a) == double) ... settype($var, "type"): coerces value of $var to that type e.g., $a = "10" settype($a, "integer"); // $a = 10 Conditionals 2 versions for and/or and/&&: && has higher precedence than and or/||: || has higher precedence than or elseif used instead of "else if" but "else if" works too switch: works with numbers and strings use multiple case statements if multiple cases for the same code use break to avoid executing the next case code default keyword: executes the default code Functions introduced with function keyword use global keyword to declare a variable global within a function e.g., function change_value() { global $value; $value = $value * 2; include keyword include "tax.php"; // includes this file include_once "tax.php"; // guarantees that the code for tax.php // is only loaded once include_once should be placed in front of a file every time it is loaded. include_once checks to see if the file has already been loaded and, if so, does nothing. However, suppose you try something like: include_once "tax.php"; include "tax.php"; In this case tax.php gets reloaded because the second include does not check whether or not tax.php has already been loaded useful numeric functions floor ceil max min rand(min,max): numbers between min/max inclusive printf place ' before padding char for a decimal number e.g., printf("'05d", $a); // pads with 0's instead of spaces sprintf fct returns a string: $a = sprintf(...)
file I/O: similar to C for file I/O and similar to Perl for directory
	operations (many of these commands will not work on our
	servers because they are too dangerous, so do not be surprised
	if you try to use one of them and it fails).
    a fairly complete list of file commands can be found
	at http://www.w3schools.com/PHP/php_ref_filesystem.asp.
    $file_handle = fopen(filename, "mode"): opens a file and returns either
	a file handle on success or false on failure.
	"r": read
	"w": write, overwrite existing file
	"a": append
	"x": write, signal error if file already exists
    fclose($file_handle): closes a file
    bool feof($file_handle): returns true if eof, otherwise false
    reading input
        string fgets($file_handle): returns the next line of input with the
	    newline character attached. use the trim() function to strip the
	    newline character, as well as leading and trailing whitespace.
            a) fgets(STDIN): reads from stdin
	    b) there is no gets function: PHP was originally intended for
		server-side scripting from a browser, not a command line. Hence
		it was not set up to easily access a keyboard (i.e., STDIN).
 	fscanf($file_handle, format_string, variables) 
	    a) unlike C, fscanf reads an entire line of input and 
		discards the unused part
	    b) if there are too few fields provided, then the extra variables
		retain their old values
	    c) fscanf(STDIN, ...): reads from stdin. Like gets, there is no
		scanf in php
    writing output
	fprintf($filehandle, format_string, variables): writes a formatted
		string to a file
	fputs($filehandle, $string): writes a string to a file
    bool rename(string $oldname, string $newname): moves a file from
	$oldname to $newname and returns true/false depending on whether
	the move succeeds
    bool unlink(string $name): deletes a file and returns true/false depending
	on whether it succeeds
    bool mkdir(string $path, string $permissions): creates a directory in
	the specified path. 
	a. returns true/false depending on whether it succeeds
        b. permissions are in UNIX form and should be in 
             octal format e.g., "0644"
    bool chdir(string $path): changes to the indicated directory, returning
	true/false dependong on whether it succeeds
    getcwd(): returns current directory path 
arrays numeric arrays ways to create 1) $names = array("Peter","Quagmire","Joe"); 2) $names[0] = "Peter"; $names[1] = "Quagmire"; 3) $names[] = "Peter"; $names[] = "Quagmire"; array[] = value: appends value to the array associative arrays ways to create 1) $ages = array("Peter"=>32, "Quagmire"=>30, "Joe"=>34); 2) $ages['Peter'] = "32"; $ages['Quagmire'] = 30; multi-dimensional arrays ways to create 1) $families = array("Griffin"=>array("Peter","Lois","Megan"), "Quagmire"=>array("Glenn","Joe"), "Seuss"=>array("Mary","Nicole","Sue","Frank")); access: $families['Griffin'][0]; useful functions print_r($array): prints the elements of the array in a nice format count($array): number of elements in the array array_key_exists(): Checks if the specified key exists in the array in_array($value, $array): Checks if the designated value is in the array, regardless of whether it is a numeric array or an associative array array_push: Inserts one or more elements to the end of an array e.g., array_push($a, 10, 20, 30); array_shift(): Removes the first element from an array and returns the value of the removed element (not the key) array_unshift: Inserts one or more elements at the front of the array e.g., $a[0] = 10; array_unshift($a, 1, 2, 3); print_r($a); output: Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 10 ) asort($array,[sorttype]), arsort($array,[sorttype]): sorts the array based on element value in ascending/descending value. sorttype is optional and may be either the constant SORT_NUMERIC or SORT_STRING ksort($array,[sorttype]), krsort($array,[sorttype]): sorts the array based on key value in ascending/descending value. sorttype is optional and may be either the constant SORT_NUMERIC or SORT_STRING Loops while, for, and do..while are same as C foreach($array as $value): assigns each element of a numeric array or each key of an associative array to $value foreach($array as $key=>$value): binds each value in an associative array to its key. The key and value are assigned to $key and $value Regular Expressions preg_match("/perl pattern/", $string, $array): returns true if the given pattern matches any subexpression in the string --first entry in $array is the full match --remaining entries contain matches for the parenthesized expressions Example: preg_match("/\b(\d{1,2})\/\d{1,2}\/(\d{4})\b/", "brad 2/3/1964 42", $matches); $matches = (2/3/1964, 2, 1964) preg_match_all("/perl pattern/", $string, $array): Searches string for all matches to the given pattern and puts them in $array. --returns the number of matches found --first entry in $array is an array of all matches --remaining entries in $array are arrays containing matches for the first, second, third, etc. parenthesized expressions. Example: preg_match_all("/\b(\d{1,2})\/\d{1,2}\/(\d{4})\b/", "1/3/1964 2/3/1964 9/8/1965 10/28/1930", $matches); $matches Array ( [0] => Array ( [0] => 1/3/1964 [1] => 2/3/1964 [2] => 9/8/1965 [3] => 10/28/1930 ) [1] => Array ( [0] => 1 [1] => 2 [2] => 9 [3] => 10 ) [2] => Array ( [0] => 1964 [1] => 1964 [2] => 1965 [3] => 1930 ) ) preg_replace($pattern, $replacement, $string, $limit): replaces with $replacement all subexpressions in $string that match $pattern --if limit is specified then the number of replaced subexpressions is limited to the value of limit --$string can be an array of strings in which case all strings in $string are searched and replaced --$pattern and $replacement can also be arrays in which case the pattern at $pattern[i] is replaced with $replacement[i] Example: $pattern = "/\b(\d{1,2})\/(\d{1,2})\/\d{2}(\d{2})\b/"; $replace = "$1/$2/$3"; $s = preg_replace($pattern, $replace, "brad 2/3/1964 42"); print($s)."\n"; Result: brad 2/3/64 42 --$0 contains the entire matched pattern --note the lack of delimiters for the replacement pattern Retrieving Form Data $_POST and $_GET contain keyword/value pairs for post and get methods $_REQUEST contains contents of $_GET, $_POST, and $_COOKIE Functions for Validating Form Data empty($var): returns true if variable is 0 or an empty string--useful for checking that text boxes haven't been left blank isset($var): returns true if variable has a value, including 0 or an empty string--useful for checking to ensure that the user entered a value for a form element e.g., isset($_POST['age']) is_numeric($var): returns true if variable is numeric or can be converted to a number. If the value is a string then the entire string must be a number for is_numeric to return true. For example, is_numeric('10cubs') returns false. CGI stuff id attribute: The ID attribute is used to explicitly associate the specific Input tag with a specific LABEL tag. ID attributes are unique within a page. --see ~bvz/www-home/cgi-bin/upload.html for an example label element: Used to provide a label for an input element in the browser Note the following things about the upload.html file: 1) The enctype attribute of the <form> tag specifies which content-type to use when submitting the form. "multipart/form-data" is used when a form requires binary data, like the contents of a file, to be uploaded 2) The type="file" attribute of the <input> tag specifies that the input should be uploaded as a file. When viewed in a browser, there will be a browse-button next to the input field Uploading a File: The $_FILES array is an associative array. --Each entry corresponds to the name of an input tag in the submitted form. --Each entry contains an associative array that has five keys: name: the name of the uploaded file type: the type of the uploaded file size: the size in bytes of the uploaded file tmp_name: the name of the temporary copy of the file stored on the server error: the error code resulting from the file upload bool move_uploaded_file ( string $filename , string $destination ) --checks to ensure that filename is a valid uploaded file (i.e., uploaded via PHP's POST upload mechanism). This check is important to make sure that no spoofing can occur. --moves filename to destination if the file is valid