Lecture 7 
 More PHP; File I/O
				Reading: 5.2, 5.4
				
					Except where otherwise noted, the contents of this presentation are Copyright 2010 Marty Stepp and Jessica Miller.
				
				
			 
			
				5.2: PHP Basic Syntax
				
				
					- 
						5.1: Server-Side Basics
					
- 
						5.2: PHP Basic Syntax
					
- 
						5.3: Embedded PHP
					
- 
						5.4: Advanced PHP Syntax
					
- 
						6.1: Parameterized Pages
					
 
			
			
			
			
				
					PHP syntax template
				
HTML content
	<?php
		PHP code
	?>
HTML content
	<?php
		PHP code
	?>
HTML content ...
				
					- any contents of a .phpfile between<?phpand?>are executed as PHP code
- all other contents are output as pure HTML
- can switch back and forth between HTML and PHP "modes"
 
			
				
$a = 3;
$b = 4;
$c = sqrt(pow($a, 2) + pow($b, 2));
				
				
					math constants
					
						| M_PI | M_E | M_LN2 | 
				
				
				
					- the syntax for method calls, parameters, returns is the same as Java
 
			
				int and float types
$a = 7 / 2;               
$b = (int) $a;            
$c = round($a);           
$d = "123";               
$e = (int) $d;            
				
					- intfor integers and- floatfor reals
- division between two intvalues can produce afloat
 
			
				
					String type
					(5.2.6)
				
$favorite_food = "Ethiopian";
print $favorite_food[2];            
$favorite_food = $favorite_food . " cuisine";
print $favorite_food;               
				
					- zero-based indexing using bracket notation
- 
						there is no chartype; each letter is itself aString
- string concatenation operator is .(period), not+
							- 5 + "2 turtle doves" === 7
- 5 . "2 turtle doves" === "52 turtle doves"
 
- can be specified with ""or''
 
			
				String functions
$name = "Stefanie Hatcher";
$length = strlen($name);              
$cmp = strcmp($name, "Brian Le");     
$index = strpos($name, "e");          
$first = substr($name, 9, 5);         
$name = strtoupper($name);            
				
			 
			
				
					bool (Boolean) type
					(5.2.8)
				
$feels_like_summer = FALSE;
$php_is_rad = TRUE;
$student_count = 217;
$nonzero = (bool) $student_count;     
				
					- the following values are considered to be FALSE(all others areTRUE):
							- 
								0and0.0
- 
								"","0", andNULL(includes unset variables)
- arrays with 0 elements
 
- can cast to boolean using (bool)
- FALSEprints as an empty string (no output);- TRUEprints as a- 1
					
						- TRUEand- FALSEkeywords are case insensitive
 
			 
			
			
				NULL
				
$name = "Victoria";
$name = NULL;
if (isset($name)) {
	print "This line isn't going to be reached.\n";
}
				
					- a variable is NULLif
							- it has not been set to any value (undefined variables)
- it has been assigned the constant NULL
- it has been deleted using the unsetfunction
 
- can test if a variable is NULLusing theissetfunction
- NULLprints as an empty string (no output)
 
			
				
$name = array();                         
$name = array(value0, value1, ..., valueN);
$name[index]                              
$name[index] = value;                      
$name[] = value;                          
$a = array();     
$a[0] = 23;       
$a2 = array("some", "strings", "in", "an", "array");
$a2[] = "Ooh!";   
				
					- to append, use bracket notation without specifying an index
- element type is not specified; can mix types
 
			
				Array functions
				
					
						| function name(s) | description | 
					
					
						| count | number of elements in the array | 
					
					
						| print_r | print array's contents | 
					
					
						| array_pop,array_push,
 array_shift,array_unshift | using array as a stack/queue | 
					
						| in_array,array_search,array_reverse,
 sort,rsort,shuffle | searching and reordering | 
					
						| array_fill,array_merge,array_intersect,
 array_diff,array_slice,range | creating, filling, filtering | 
					
					
						| array_sum,array_product,array_unique,
 array_filter,array_reduce | processing elements | 
				
			 
			
				Array function example
				$tas = array("MD", "BH", "KK", "HM", "JP");
for ($i = 0; $i < count($tas); $i++) {
	$tas[$i] = strtolower($tas[$i]);
}                                 
$morgan = array_shift($tas);      
array_pop($tas);                  
array_push($tas, "ms");           
array_reverse($tas);              
sort($tas);                       
$best = array_slice($tas, 1, 2);  
				
					- 
						the array in PHP replaces many other collections in Java
						
							- 
								list, stack, queue, set, map, ...
							
 
 
			
				
					The foreach loop
					(5.4.4)
				
				foreach ($array as $variableName) {
	...
}
$stooges = array("Larry", "Moe", "Curly", "Shemp");
for ($i = 0; $i < count($stooges); $i++) {
	print "Moe slaps {$stooges[$i]}\n";
}
foreach ($stooges as $stooge) {
	print "Moe slaps $stooge\n";  
}
				
					- a convenient way to loop over each element of an array without indexes
 
			
			
			
			
				5.4: PHP File Input
				
				
					- 
						5.1: Server-Side Basics
					
- 
						5.2: PHP Basic Syntax
					
- 
						5.3: Embedded PHP
					
- 
						5.4: Advanced PHP Syntax
					
 
			
				
					PHP file I/O functions
					(5.4.5)
				
				
				
					
						| function name(s) | category | 
					
					
						| file,file_get_contents,
 file_put_contents | reading/writing entire files | 
					
					
					
						| basename,file_exists,filesize,
 fileperms,filemtime,is_dir,
 is_readable,is_writable,disk_free_space | asking for information | 
					
						| copy,rename,unlink,chmod,
 chgrp,chown,mkdir,rmdir | manipulating files and directories | 
					
					
						| glob,scandir | reading directories | 
				
			 
			
				Reading/writing files
				
					
						| contents of foo.txt | file("foo.txt") | file_get_contents("foo.txt") | 
					
						| 
Hello
how r u?
I'm fine
 | 
array(
	"Hello\n",     
	"how r u?\n",  
	"\n",          
	"I'm fine\n"   
)
 | 
"Hello\n
how r u?\n      
\n              
I'm fine\n"
 | 
				
				
					- filereturns lines of a file as an array (- \nat end of each)
- file_get_contentsreturns entire contents of a file as a single string
 
			
				The file function
$lines = file("todolist.txt");
foreach ($lines as $line) {        
	print "<li>$line</li>\n";
}
				
			 
			
			
			
			
				Unpacking an array: list
list($var1, ..., $varN) = array;
				contents of input file personal.txt
				
Marty Stepp
(206) 685-2181
570-86-7326
list($name, $phone, $ssn) = file("personal.txt");
...
				
					- 
						the odd listfunction "unpacks" an array into a set of variables you declare
- 
						when you know a file's exact length/format, use fileandlistto unpack it
 
			
			
			
			
				Reading directories
				
					
						| function | description | 
					
					
						| scandir | returns an array of all file names in a given directory (returns just the file names, such as
 "myfile.txt") | 
					
					
						| glob | returns an array of all file names that match a given pattern (returns a file path and name, such as
 "foo/bar/myfile.txt") | 
				
				
				
					- 
						globcan accept a general path with the*wildcard character
 
			
				glob example
				
$poems = glob("poetry/poem*.dat");
foreach ($poems as $poemfile) {
	$text = file_get_contents($poemfile);
	file_put_contents($poemfile, strrev($text));
	print "<p>I just reversed " . basename($poemfile) . "</p>\n";
}
				
				
					- 
						globcan match a "wildcard" path with the*character
							- 
								glob("foo/bar/*.doc")returns all.docfiles in thefoo/barsubdirectory
- 
								glob("food*")returns all files whose names begin with "food"
 
- 
						the basenamefunction strips any leading directory from a file path
							- 
								basename("foo/bar/baz.txt")returns"baz.txt"
 
 
			
				scandir example
				
					
<ul>
	<?php
	$folder = "taxes/old";
	foreach (scandir($folder) as $filename) {
		print "<li>$filename</li>\n"
	}
	?>
</ul>
					
						
							- 
								.
							
- 
								..
							
- 
								2007_w2.pdf
							
- 
								2006_1099.doc
							
 
				 
				
				
					- scandirsucks; current directory (- ".") and parent (- "..") are included in the array
- 
						don't need basenamewithscandir; returns file names only without directory