|
基本的 PHP 語法 PHP 的腳本語以 <?php 語始~以 ?> 語束。可以把 您PHP 的腳本語放置在文中的任何位置。檔當(dāng)寫您然~在支持語的服語器上~可以使用 <? 和 ?> 來語始和語束腳本語。不語~語了到最好的兼容性~我語推使用語準(zhǔn)形式 達薦您(<?php)~而不是語形式。寫<?php ?> PHP 文件通常包含 會HTML 語語~就像一 個HTML 文件~以及一些 PHP 腳本代語。在下面~我語提供了一段語語的 PHP 腳本~可以向語語器語出文本 它"Hello World",<html> <body> <?php echo "Hello World"; ?> </body> </html> PHP 中的每代語行都必語以分語束。分是一語分隔符~用于把指令集分語。個號號區(qū)來 有語通語 兩PHP 來語出文本的基語指令,echo 和 print。在上面的例子中~我語使用了 echo 語句語出文來 本 "Hello World"。 PHP 中的注語 在 PHP 中~我語使用 // 來寫語語語行注語~或者使用 /* 和 */ 來寫語語大的注語語。<html> <body> <?php //This is a comment /* This is a comment block */ ?> </body> </html> PHP 中的語量 語量用于存語語~比如字、文本字符串或語。數(shù)數(shù) 一旦語置了某語量~我語就可以在腳本中重語地使用。個它 PHP 中的所有語量都是以 $ 符語始的。號 在 PHP 中語置語量的正方法是,確 $var_name = value; PHP 的入語者往往忘語在語量的前面的 會$ 符。如果那語做的語~語量是無效的。號將 語我語語著語建一存有字符串的語量~和一存有語的語量,個個數(shù) <?php $txt = "Hello World!"; $number = 16; ?> PHP 是一語松散語型的語言;Loosely Typed Language,在 PHP 中~不需要在語置語量之前明語語量。聲 在上面的例子中~看到了~不必向 您PHP 聲數(shù)明語語量的據(jù)語型。根據(jù)語量被語置的方式~PHP 會確數(shù)自語地把語量語語語正的據(jù)語型。在強語型的語程語言中~必語在使用前明語量的語型和名。您聲稱 在 PHP 中~語量在使用語被自語明。會聲 語量的命名語語 ?語量名必語以字母或下語 劃"_" 語語。 ?語量名只能包含字母字字符以及下語。數(shù)劃 ?語量名不能包含空格。如果語量名由多語語語成~那語語語使用下語語行分隔;比如個劃 $my_string,~或者以大字母語語;比如 寫$myString,。PHP 中的字符串 字符串量用于包含字符串的。 在本教程中,我打算介幾個在 PHP 中用于操作字符串的最常用的函數(shù)和運算符。 在建字符串之后,我就可以它行操作了。您可以直接在函數(shù)中使用字符串,或者把它存在量中。 在下面,PHP 腳本把字符串 "Hello World" 名$txt 的字符串量: <?php $txt="Hello World"; echo $txt; ?> 以上代的出: Hello World 在,我著使用不同的函數(shù)和運算符來操作我的字符串。 并運置算符;Concatenation Operator, 在 PHP 中,只有一個字符串運算符。 并置運算符 (.) 用于把兩個字符串接起來。 要把兩個量接在一起,使用個點運算符 (.) :<?php $txt1="Hello World"; $txt2="1234"; echo $txt1 . " " . $txt2; ?> 以上代的出: Hello World 1234 您可以看到,我在上面的例子中使用了兩次并置運算符。是由于我需要插入第三個字符串。 了分隔兩個量,我在$txt1 與 $txt2 之插入了一個空格。使用 strlen() 函數(shù) strlen() 函數(shù)用于算字符串的度。 我算出字符串"Hello world!" 的度: <?php echo strlen("Hello world!");?> 以上代的出: 12 字符串的度信息常常用在循或其他函數(shù)中,因那確定字符串何束是很重要的,例如,在循中,我需要在字符串中的最后一個字符之后束循,。 使用 strpos() 函數(shù) strpos() 函數(shù)用于在字符串內(nèi)索一段字符串或一個字符。如果在字符串中找到匹配,函數(shù)會返回第一個匹配的位置。如果未找到匹配,返回 FALSE。 我一下,是不是能在字符串中找到子字符串"world": <?php echo strpos("Hello world!","world");?> 以上代的出是: 6 正如您看到的,在我的字符串中,字符串 "world" 的位置是 6。返回 6 而不是 7,是由于字符串中的首個位置的 0,而不是 1。 運運算符用于語語語行算. PHP 運算符 本部分列出了在 PHP 中使用的各語算符,運 算算符數(shù)運 運算符語明例子語果 +Additionx=24 x+2 -Subtractionx=23 5-x *Multiplicationx=420 x*5 /Division15/53 5/22.5%Modulus (division remainder)5%21 10%82 10%20++Incrementx=5x=6 x++ --Decrementx=5x=4 x-- 語語算符運 運算符語明例子 =x=yx=y +=x+=yx=x+y -=x-=yx=x-y *=x*=yx=x*y /=x/=yx=x/y .=x.=yx=x.y %=x%=yx=x%y 比語算符運 運算符語明例子 ==is equal to5==8 returns false!=is not equal5!=8 returns true>is greater than5>8 returns false<is less than5<8 returns true>=is greater than or equal to5>=8 returns false <=is less than or equal to5<=8 returns true 語語算符運 運算符語明例子 &&andx=6 y=3 (x < 10 && y > 1) returns true ||orx=6 y=3 (x==5 || y==5) returns false !notx=6 y=3 !(x==y) returns true if、elseif 以及 else 句用于行基于不同條件的不同作。 條件語句 當(dāng)您寫代,您常常需要不同的判斷行不同的作。 您可以在代中使用條件句來完成此任。 if...else 語句 在條件成立行一代,條件不成立行另一代 elseif 語句 與 if...else 配合使用,在若干條件之一成立行一個代 If...Else 語句 如果您希望在某個條件成立行一些代,在條件不成立行另一些代, 使用if....else 句。 語法 if (condition) code to be executed if condition is true; else code to be executed if condition is false; 語例 如果當(dāng)前日期是周五,下面的代將出 "Have a nice weekend!",否會出 "Have a nice day!": <html> <body> <?php $d=date("D"); if ($d=="Fri") echo "Have a nice weekend!"; else echo "Have a nice day!"; ?> </body> </html> 如果需要在條件成立或不成立行多行代,把些代行包括在花括號中: <html> <body> <?php $d=date("D"); if ($d=="Fri") { echo "Hello!<br />"; echo "Have a nice weekend!"; echo "See you on Monday!"; } ?> </body> </html> ElseIf 語句 如果希望在多個條件之一成立行代,使用 elseif 句: 語法 if (condition) code to be executed if condition is true; elseif (condition) code to be executed if condition is true; else code to be executed if condition is false; 語例 如果當(dāng)前日期是周五,下面的例子會出 "Have a nice weekend!",如果是周日,出 "Have a nice Sunday!",否出 "Have a nice day!": <html> <body> <?php $d=date("D"); if ($d=="Fri") echo "Have a nice weekend!"; elseif ($d=="Sun") echo "Have a nice Sunday!"; else echo "Have a nice day!"; ?> </body> </html> Switch 語句 如果您希望有地行若干代之一,使用 Switch 句。使用 Switch 句可以避免冗的if..elseif..else 代。 語法 switch (expression) { case label1: code to be executed if expression = label1; break; case label2: code to be executed if expression = label2; break; default: code to be executed if expression is different from both label1 and label2;} 語例 工作原理: 1.表達式,通常是量,行一次算 2.把表達式的與構(gòu)中 case 的行比3.如果存在匹配,行與 case 的代4.代行后,break 語句阻止代跳入下一個 case 中行 5.如果沒有 case 真,使用default 句<?php switch ($x) { case 1: echo "Number 1"; break; case 2: echo "Number 2"; break; case 3: echo "Number 3"; break; default: echo "No number between 1 and 3"; } ?> </body> </html> 什語是語,數(shù) 在使用 PHP 行的程中,或早或,您會需要建多相似的量。無需很多相似的量,你可以把數(shù)據(jù)作元素存在數(shù)中。數(shù)中的元素都有自己的 ID,因此可以方便地它。 有三數(shù)型:語語語語語語 數(shù)數(shù)語語語 有數(shù)字ID 的數(shù) 語語語數(shù) 數(shù)中的 個每ID 一個 多數(shù)語語語 包含一個或多個數(shù)的數(shù) 數(shù)數(shù)語語語 數(shù)數(shù)存的 個元素都有一個數(shù)字每ID ??梢允褂貌煌姆椒▉斫〝?shù)數(shù): 例子 1 在個例子中,會自分配 ID :$names = array("Peter","Quagmire","Joe"); 例子 2 在個例子中,我人工分配的 ID :$names[0] = "Peter";$names[1] = "Quagmire";$names[2] = "Joe"; 可以在腳本中使用些 ID : <?php $names[0] = "Peter";$names[1] = "Quagmire";$names[2] = "Joe"; echo $names[1] . " and " . $names[2] . " are ". $names[0] . "'s neighbors"; ?> 以上代的出: Quagmire and Joe are Peter's neighbors 語語語數(shù) 數(shù),它的個每ID 都一個。 在存有具體命名的的數(shù)據(jù),使用數(shù)數(shù)不是最好的做法。通數(shù),我可以把作,并向它。 例子 1 在本例中,我使用一個數(shù)把年分配不同的人:$ages = array("Peter"=>32, "Quagmire"=>30, "Joe"=>34); 例子 2 本例與例子 1 相同,不展示了另一建數(shù)的方法:$ages['Peter'] = "32";$ages['Quagmire'] = "30";$ages['Joe'] = "34";可以在腳本中使用 ID : <?php $ages['Peter'] = "32";$ages['Quagmire'] = "30";$ages['Joe'] = "34";echo "Peter is " . $ages['Peter'] . " years old."; ?> 以上腳本的出: Peter is 32 years old.多語語數(shù) 在多數(shù)中,主數(shù)中的個元素也是一個數(shù)。在子數(shù)中的個元素也可以是數(shù),以此推。每每 例子 1 在本例中,我建了一個有自分配的 ID 的多數(shù): $families = array ( "Griffin"=>array ( "Peter", "Lois", "Megan" ), "Quagmire"=>array ( "Glenn" ), "Brown"=>array ( "Cleveland", "Loretta", "Junior" ) ); 如果出個數(shù)的,似:Array ( [Griffin] => Array ( [0] => Peter [1] => Lois [2] => Megan ) [Quagmire] => Array ( [0] => Glenn ) [Brown] => Array ( [0] => Cleveland [1] => Loretta [2] => Junior ) ) 例子 2 我著示上面的數(shù)中的一個一的:echo "Is " . $families['Griffin'][2] . " a part of the Griffin family?"; 以上代的出: Is Megan a part of the Griffin family? PHP 中的循句用于行相同的代指定的次數(shù)。循語 在您寫代,您常需要相同的代運行很多次。您可以在代 中使用循句來完成個任。 在 PHP 中,我可以使用下列循句: while 只要指定的條件成立,循行代do...while 首先行一次代,然后在指定的條件成立重個循 for 循行代指定的次數(shù) foreach 根據(jù)數(shù)中個元素來循代每 while 語句 只要指定的條件成立,while 句將重行代。語法 while (condition) code to be executed;例子 下面的例子示范了一個循,只要量 i 小于或等于 5,代就會一直循行下去。循 每循一次,量就會增 1: <html> <body> <?php $i=1; while($i<=5) { echo "The number is " . $i . "<br />"; $i++; } ?> </body> </html> do...while 語句 do...while 句會至少行一次代語語語語語語 - 然后,只要條件成立,就會重行循。 語法 do { code to be executed;} while (condition); 例子 下面的例子將 i 的行一次累加,然后,只要 i 小于 5 的條件成立,就會累 加下去: <html> <body> <?php $i=0; do { $i++; echo "The number is " . $i . "<br />"; } while ($i<5); ?> </body> </html> for 語句 如果您已確定了代的重行次數(shù),可以使用 for 句。 語法 for (initialization; condition; increment) { code to be executed; } 注:語語for 句有三個參數(shù)。第一個參數(shù)初始化量,第二個參數(shù)保存條件,第三個參數(shù)包含行循所需的增量。如果 initialization 或 increment 參數(shù)中包括了多個 量,需要用逗號行分隔。而條件必算 true 或者 false。例子 下面的例子會把文本 "Hello World!" 示5 次: <html> <body> <?php for ($i=1; $i<=5; $i++) { echo "Hello World!<br />";} ?> </body> </html> foreach 語句 foreach 句用于循遍數(shù)。 每 行一次循,當(dāng)前數(shù)元素的就會被value 量,數(shù)指會逐一地 移, - 以此推。 語法 foreach (array as value){ code to be executed; } 例子 下面的例子示范了一個循,個循可以出定數(shù)的:<html> <body> <?php $arr=array("one", "two", "three"); foreach ($arr as $value){ echo "Value: " . $value . "<br />"; } ?> </body> </html> PHP 的真正威力源自于它的函數(shù)。 在 PHP 中,提供了超 700 個內(nèi)建的函數(shù)。PHP 函數(shù) 在本教程中,我將您解如何建自己的函數(shù)。如需內(nèi)建函數(shù)的參考和例,我的 PHP 參考手冊。語建 PHP 函數(shù) 函數(shù)是一可以在任何被需要的候行的代。語 建PHP 函數(shù): 1.所有的函數(shù)都使用 "function()" 來始 2.命名函數(shù) - 函數(shù)的名稱提示出它的功能。函數(shù)名稱以字母或下劃。 3.添加 "{" - 口的花括號之后的部分是函數(shù)的代。 4.插入函數(shù)代 5.添加一個 "}" - 函數(shù)通花括號來束。例子 一個的函數(shù),在其被用能出我的名稱的:<html> <body> <?php function writeMyName() { echo "David Yang"; } writeMyName(); ?> </body> </html> 使用 PHP 函數(shù) 在,我要在PHP 腳本中使用個函數(shù)了: <html> <body> <?php function writeMyName() { echo "David Yang"; } echo "Hello world!<br />";echo "My name is "; writeMyName(); echo ".<br />That's right, ";writeMyName(); echo " is my name."; ?> </body> </html> 以上代的出: Hello world! My name is David Yang. That's right, David Yang is my name. PHP 函 數(shù)- 添加參數(shù) 我的第一個函數(shù)是一個非常的函數(shù)。它只能出一個靜的字符串。通可以添加參數(shù),我向函數(shù)添加更多的功能。參數(shù)似一個量。您可能注意到了,函數(shù)名稱后面有一個括號,比如 writeMyName()。參數(shù)就是在括號中定的。 例子 1 下面的例子出不同的名字,但姓是相同的: <html> <body> <?php function writeMyName($fname) { echo $fname . " Yang.<br />"; } echo "My name is ";writeMyName("David");echo "My name is ";writeMyName("Mike");echo "My name is ";writeMyName("John");?> </body> </html> 上面的代的出: My name is David Yang.My name is Mike Yang.My name is John Yang.例子 2 下面的函數(shù)有兩個參數(shù): <html> <body> <?php function writeMyName($fname,$punctuation) { echo $fname . " Yang" . $punctuation . "<br />"; } echo "My name is ";writeMyName("David",".");echo "My name is ";writeMyName("Mike","!"); echo "My name is ";writeMyName("John","...");?> </body> </html> 上面的代的出: My name is David Yang.My name is Mike Yang!My name is John Yang...PHP 函 數(shù)- 返回語 函數(shù)也能用于返回。 例子 <html> <body> <?php function add($x,$y) { $total = $x + $y; return $total; } echo "1 + 16 = " . add(1,16); ?> </body> </html> 以上代的出: 1 + 16 = 17 PHP 的 $_GET 和 $_POST 用于索表中的,比如用入。 PHP 表語語理 表例:語語語語 <html> <body> <form action="welcome.php" method="post">Name: <input type="text" name="name" />Age: <input type="text" name="age" /><input type="submit" /> </form> </body> </html> 上面的 HTML 面例包含了兩個入框和一個提交按。當(dāng)用填寫表并提 交按,表的數(shù)據(jù)會被送往"welcome.php" 個文件。"welcome.php" 文件似:語語語語語 <html> <body> Welcome <?php echo $_POST["name"]; ?>.<br />You are <?php echo $_POST["age"]; ?> years old.</body> </html> 上面?zhèn)€腳本的出本似: Welcome John. You are 28 years old. 我將在下一 章解PHP $_GET 和 $_POST。 表語語語 在任何可能的候用入行。客端的速度更快,并且可以減服器的。不,任何流量很高以至于不得不擔(dān)心服器源的站點,也有必要擔(dān)心站點的安全性。如果表的是數(shù)據(jù),就非常有必要采用服器端的。在服器表的一好的方式是,把表它自己,而不是跳到 不同的面。用就可以在同一表面得到信息。用也就更容易了。$_GET 量用于收集來自method="get" 的表中的。 $_GET 語量 $_GET 量是一個數(shù),內(nèi)容是由HTTP GET 方法送的量名稱和。 $_GET 量用于收集來自method="get" 的表中的。 從有GET 方法的表送的信息,任何人都是可的,會示在器的地址,,并且送的信息量也有限制,最多 100 個字符,。 例子 <form action="welcome.php" method="get"> Name: <input type="text" name="name" />Age: <input type="text" name="age" /><input type="submit" /> </form> 當(dāng)用點提 交按,送的URL 會似: ;age=37 "welcome.php" 文件在可以通 $_GET 量來取表數(shù)據(jù)了,注意,表域的名稱會自成 $_GET 數(shù)中的 ID ,: Welcome <?php echo $_GET["name"]; ?>.<br /> You are <?php echo $_GET["age"]; ?> years old! 語什語使用 $_GET, 注:語語在使用 $_GET 量,所有的量名和都會示在URL 中。所以在送密 或其他敏感信息,不使用個方法。不,正因量示在URL 中,因此可以在收藏中收藏面。在某些情況下,是很有用的。 注:語語HTTP GET 方法不適合大型的量 ,是不能超100 個字符的。$_REQUEST 語量 PHP 的 $_REQUEST 量包含了$_GET, $_POST 以及 $_COOKIE 的內(nèi)容。 PHP 的 $_REQUEST 量可用來取得通GET 和 POST 方法送的表數(shù)據(jù)的果。 例子 Welcome <?php echo $_REQUEST["name"]; ?>.<br />You are <?php echo $_REQUEST["age"]; ?> years old!$_POST 量用于收集來自method="post" 的表中的。 $_POST 語量 $_POST 量是一個數(shù),內(nèi)容是由HTTP POST 方法送的量名稱和。 $_POST 量用于收集來自method="post" 的表中的。 從有POST 方法的表送的信息,任何人都是不可的,不會示在器的地址,,并且送信息的量也沒有限制。例子 <form action="welcome.php" method="post"> Enter your name: <input type="text" name="name" />Enter your age: <input type="text" name="age" /> <input type="submit" /> </form> 當(dāng)用點提交按,URL 不會含有任何表數(shù)據(jù),看上去似:;welcome.php" 文件在可以通 $_POST 量來取表數(shù)據(jù)了,注意,表 域的名稱會自成$_POST 數(shù)中的 ID ,: $_POST["name"]; ?>.<br />Welcome <?php echo You are <?php echo $_POST["age"]; ?> years old!語什語使用 $_POST, ?通 HTTP POST 送的量不會示在URL 中。 ?量沒有度限制。 不,由于量不示在 URL 中,所有無法把面加入。$_REQUEST 語量 PHP 的 $_REQUEST 量包含了$_GET, $_POST 以及 $_COOKIE 的內(nèi)容。PHP 的 $_REQUEST 量可用來取得通GET 和 POST 方法送的表數(shù)據(jù)的果。例子 Welcome <?php echo $_REQUEST["name"]; ?>.<br /> You are <?php echo $_REQUEST["age"]; ?> years old! PHP 的 date() 函數(shù)用于格式化或日期。 PHP Date() 函數(shù) PHP Date() 函數(shù)可把戳格式化可性更好的日期和。 語法 date(format,timestamp) 參數(shù)描述 format必需。定戳的格式。 timestamp可。定戳。默是當(dāng)前的日期和。PHP 日期 - 什語是語語;戳Timestamp,, 戳是自1970 年 1 月 1 日,00:00:00 GMT,以來的秒數(shù)。它也被稱 Unix 戳,Unix Timestamp,。 PHP 日期 - 格式化日期 date() 函數(shù)的第一個參數(shù)定了如何格式化日期/。它使用字母來表示日期和的格式。里列出了一些可用的字母: ?d - 月中的天 (01-31) ?m - 當(dāng)前月,以數(shù)字 (01-12) ?Y - 當(dāng)前的年,四位數(shù), 您可以在我的 PHP Date 參考手冊中,找到格式參數(shù)中可以使用的所有字母。 可以在字母之插入其他字符,比如 "/"、"." 或者 "-",就可以增加附加格式了:<?php echo date("Y/m/d"); echo "<br />"; echo date("Y.m.d"); echo "<br />"; echo date("Y-m-d"); ?> 以上代的出似: 2006/07/11 2006.07.11 2006-07-11 PHP 日期 - 添加語語戳 date() 函數(shù)的第二個參數(shù)定了一個戳。此參數(shù)是可的。如果您沒有提供戳,當(dāng)前的將被使用。 在我的例子中,我將使用 mktime() 函數(shù)明天建一個戳。mktime() 函數(shù)可指定的日期返回 Unix 戳。 語法 mktime(hour,minute,second,month,day,year,is_dst)如需 得某一天的戳,我只要置mktime() 函數(shù)的 day 參數(shù)就可以了:<?php $tomorrow = mktime(0,0,0,date("m"),date("d")+1,date("Y")); echo "Tomorrow is ".date("Y/m/d", $tomorrow);?> 以上代的出似: 明天是 2006/07/12 服器端引 用(SSI) 用于建可在多個面重使用的函數(shù)、眉、腳或元素。服語器端引用;Server Side Includes, 通 include() 或 require() 函數(shù),您可以在服器 行PHP 文件之前在文件中插入一個文件的內(nèi)容。除了它理的方式不同之外,兩個函數(shù)在其他方面都是相同的。include() 函數(shù)會生成一個警告,但是腳本會行,,而 require() 函數(shù)會生成一個致命,fatal error,,在生后腳本會停止行,。 兩個函數(shù)用于建可在多個面重使用的函數(shù)、眉、腳或元素。 會者省大量的。意味著您可以建供所有網(wǎng)引用的準(zhǔn)眉或菜文件。當(dāng)眉需要更新,您只更新一個包含文件就可以了,或者當(dāng)您向網(wǎng)站添加一新面,需要修改一下菜文件,而不是更新所有網(wǎng)中的接,。 include() 函數(shù) include() 函數(shù)可得指定文件中的所有文本,并把文本拷到使用 include 函數(shù)的文件中。 例子 1 假 您有一個準(zhǔn)的眉文件,名"header.php"。如需在面中引用個眉文件,使用 include() 函數(shù),就像: <html> <body> <?php include("header.php"); ?> <h1>Welcome to my home page</h1> <p>Some text</p> </body> </html> 例子 2 在,假我有一個在所有面上使用的準(zhǔn)菜文件??聪旅?zhèn)€ "menu.php": <html> <body> <a href=";>Home</a> | <a href=";>About Us</a> | <a href=";>Contact Us</a> 三個文件,"default.php"、"about.php" 以及 "contact.php" 都引用了 "menu.php" 文件。是 "default.php" 中的代: <?php include("menu.php"); ?> <h1>Welcome to my home page</h1> <p>Some text</p> </body> </html> 如果您在 器中看"default.php" 的源代,似: <html> <body> <a href="default.php">Home</a> | <a href="about.php">About Us</a> | <a href="contact.php">Contact Us</a><h1>Welcome to my home page</h1> <p>Some text</p> </body> </html> 同,當(dāng)然,我也將用相同的方法理 "about.php" 和 "contact.php"。通使用引用文件,在您需要重命名接、更改接序或向站點添加另一網(wǎng),只要地更 新"menu.php" 文件中的文本即可。 require() 函數(shù) require() 函數(shù)與 include() 相同,不同的是它的理方式。 include() 函數(shù)會生成一個警告,但是腳本會行,,而 require() 函數(shù)會生成一個致命,fatal error,,在生后腳本會停止行,。 如果在您通 include() 引用文件生了,會得到似下面的消息:PHP 代:語語 <html> <body> <?php include("wrongFile.php"); echo "Hello World!"; ?> </body> </html> 語語消息: Warning: include(wrongFile.php) [function.include]: failed to open stream: No such file or directory in C:homewebsite est.php on line 5 Warning: include() [function.include]:Failed opening 'wrongFile.php' for inclusion(include_path='.;C:php5pear')in C:homewebsite est.php on line 5Hello World! 注意,echo 句依然被行了:是因警告不會中止腳本的行。 在,我使用require() 函數(shù)運行相同的例子。 PHP 代:語語 <html> <body> <?php require("wrongFile.php"); echo "Hello World!"; ?> </body> </html> 語語消息: Warning: require(wrongFile.php) [function.require]: failed to open stream: No such file or directory in C:homewebsite est.php on line 5 Fatal error: require() [function.require]:Failed opening required 'wrongFile.php'(include_path='.;C:php5pear')in C:homewebsite est.php on line 5由于在致命 生后止了腳本的行,因此echo 句不會行。正因在文件不存在或被重命名后腳本不會行,因此我推薦 使用 require() 而不是 include()。 fopen() 函數(shù)用于在 PHP 中打文件。 打語文件 fopen() 函數(shù)用于在 PHP 中打文件。 此函數(shù)的第一個參數(shù)含有要打的文件的名稱,第二個參數(shù)定了使用哪模式來打文件: <html> <body> <?php $file=fopen("welcome.txt","r");?> </body> </html> 文件可能通下列模式來打: 模式描述 r只。在文件的始。 r+/寫。在文件的始。 w只寫。打并清空文件的內(nèi)容,如果文件不存在,建新文件。w+/寫。打并清空文件的內(nèi)容,如果文件不存在,建新文件。a追加。打并向文件文件的末端行寫操作,如果文件不存在,建新文件。a+/追加。通向文件末端寫內(nèi)容,來保持文件內(nèi)容。x 只寫。建新文件。如果文件已存在,返回FALSE。 / 寫。建新文件。如果文件已存在,返回FALSE 和一個。x+ 注:如果 fopen() 無法打指定文件,返回0 (false)。例子 如果 fopen() 不能打指定的文件,下面的例子會生成一段消息: <html> <body> <?php $file=fopen("welcome.txt","r") or exit("Unable to open file!"); ?> </body> </html> 語語文件 fclose() 函數(shù)用于打的文件。 <?php $file = fopen("test.txt","r");//some code to be executedfclose($file); ?> 語語 End-of-file feof() 函數(shù)是否已達到文件的 末端(EOF)。在循遍未知度的數(shù)據(jù),feof() 函數(shù)很有用。 注:語語在 w 、a 以及 x 模式,您無法取打的文件:if (feof($file)) echo "End of file"; 逐行語取文件 fgets() 函數(shù)用于從文件中逐行取文件。 注:語語在用函數(shù)之后,文件指會移到下一行。例子 下面的例子逐行取文件,直到文件末端止: <?php $file = fopen("welcome.txt", "r") or exit("Unable to open file!"); //Output a line of the file until the end is reached while(!feof($file)) { echo fgets($file). "<br />"; } fclose($file); ?> 逐字符語取文件 fgetc() 函數(shù)用于從文件逐字符地取文件。 注:語語在用函數(shù)之后,文件指會移到下一個字符。例子 下面的例子逐字符地取文件,直到文件末端止: <?php $file=fopen("welcome.txt","r") or exit("Unable to open file!"); while (!feof($file)) { echo fgetc($file); } fclose($file); ?> 通語 PHP~可以把文件上語到服語器。 語建一文件上語表語個 允語用語表語上語文件是非常有用的。從 語看下面語供上語文件的 個HTML 表語, <html> <body> <form action="upload_file.php" method="post" enctype="multipart/form-data"><label for="file">Filename:</label><input type="file" name="file" id="file" /> <br /> <input type="submit" name="submit" value="Submit" /> </form> </body> </html> 語留意如下有語此表語的信息, <form> 語語的 enctype 屬哪性語定了在提交表語語要使用語容語型。在表語需要二語制據(jù)語~比如文件語內(nèi)數(shù)內(nèi) 容~語使用 "multipart/form-data"。 <input> 語語的 type="file" 屬性語定了語語把語入作語文件語理。語例語~在語語器中語語語~看到語入旁語來來當(dāng)會框 有一語語按語。個 注語,允語用語上語文件是一巨大的安全語語。語語語允語可信的用語語行文件上語操作。個 語建上語腳本 "upload_file.php" 文件含有供上語文件的代語, <?php if ($_FILES["file"]["error"] > 0) { echo "Error: " . $_FILES["file"]["error"] . "<br />"; } else { echo "Upload: " . $_FILES["file"]["name"] . "<br />"; echo "Type: " . $_FILES["file"]["type"] . "<br />"; echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />"; echo "Stored in: " . $_FILES["file"]["tmp_name"]; } ?> 通語使用 PHP 的全局語 數(shù)$_FILES~可以客語語算機向語程服語器上語文件。你從 第一是表語的 個參數(shù)input name~第二下語可以是 個"name", "type", "size", "tmp_name" 或 "error"。就像語語, ?$_FILES["file"]["name"] - 被上語文件的名稱 ?$_FILES["file"]["type"] - 被上語文件的語型 ?$_FILES["file"]["size"] - 被上語文件的大小~以字語語 ?$_FILES["file"]["tmp_name"] - 存語在服語器的文件的語語副本的名稱 ?$_FILES["file"]["error"] - 由文件上語語致的語語代語 語是一語非常語語文件上語方式?;诎踩矫娴目颊Z~語語增加有語什語用語有語上語文件的限制。您當(dāng) 上語限制 在語腳本中~我語增加了語文件上語的限制。用語只能上語 個.gif 或 .jpeg 文件~文件大小必語小于 20 kb,<?php if ((($_FILES["file"]["type"] == "image/gif")|| ($_FILES["file"]["type"] == "image/jpeg")|| ($_FILES["file"]["type"] == "image/pjpeg"))&& ($_FILES["file"]["size"] < 20000)) { if ($_FILES["file"]["error"] > 0) { echo "Error: " . $_FILES["file"]["error"] . "<br />"; } else { echo "Upload: " . $_FILES["file"]["name"] . "<br />"; echo "Type: " . $_FILES["file"]["type"] . "<br />"; echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />"; echo "Stored in: " . $_FILES["file"]["tmp_name"]; } } else { echo "Invalid file"; } ?> 注語,語于 IE~語語 jpg 文件的語型必語是 pjpeg~語于 FireFox~必語是 jpeg。 保存被上語的文件 上面的例子在服語器的 PHP 語語文件語語建了一被上語文件的語語副本。個 語語語的語制文件在腳本語束語消失。要保存被上語的文件~我語需要把拷語到外的位置,個會它另 <?php if ((($_FILES["file"]["type"] == "image/gif")|| ($_FILES["file"]["type"] == "image/jpeg")|| ($_FILES["file"]["type"] == "image/pjpeg"))&& ($_FILES["file"]["size"] < 20000)) { if ($_FILES["file"]["error"] > 0) { echo "Return Code: " . $_FILES["file"]["error"] . "<br />"; } else { echo "Upload: " . $_FILES["file"]["name"] . "<br />"; echo "Type: " . $_FILES["file"]["type"] . "<br />"; echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />"; echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />"; if (file_exists("upload/" . $_FILES["file"]["name"])) { echo $_FILES["file"]["name"] . " already exists. "; } else { move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]); echo "Stored in: " . "upload/" . $_FILES["file"]["name"]; } } } else { echo "Invalid file"; } ?> 上面的腳本語語了是否已存在此文件~如果不存在~語把文件拷語到指定的文件語。注語,語例子把文件保存到了名語 個"upload" 的新文件語。 cookie 常用于用。 什語是 Cookie, cookie 常用于用。cookie 是服器留當(dāng)相同的在用算每機中的小文件。 算機通器求面,它同會送cookie。通 PHP,您能建并取回 cookie 的。 如何語建 cookie, setcookie() 函數(shù)用于置 cookie。 注:語語setcookie() 函數(shù)必位于 <html> 之前。 語法 setcookie(name, value, expire, path, domain);例子 在下面的例子中,我將建名 "user" 的 cookie,把它 "Alex Porter"。我也定了此 cookie 在一小后期: <?php setcookie("user", "Alex Porter", time()+3600);?> <html> <body> </body> </html> 注:語語在 送cookie ,cookie 的會自行 URL ,在取回行自解,防止 URL ,使用setrawcookie() 取而代之,。 如何取回 Cookie 的語, PHP 的 $_COOKIE 量用于取回cookie 的。 在下面的例子中,我 取回了名"user" 的 cookie 的,并把它示在了面上:<?php // Print a cookie echo $_COOKIE["user"]; // A way to view all cookies print_r($_COOKIE); ?> 在下面的例子中,我使用 isset() 函數(shù)來確是否已置了 cookie:<html> <body> <?php if (isset($_COOKIE["user"])) echo "Welcome " . $_COOKIE["user"] . "!<br />"; else echo "Welcome guest!<br />"; ?> </body> </html> 如何語除 cookie, 當(dāng) 除cookie ,您當(dāng)使期日期更去的點。 除的例子: <?php // set the expiration date to one hour agosetcookie("user", "", time()-3600);?> 如果語語器不支持 cookie 語語語,怎 如果您的用程 及不支持序涉cookie 的器,您就不得不采取其他方法在用程序中從一面向另一面信息。一方式是從表數(shù)據(jù),有表和用入的內(nèi)容,稍早前我已在本教程中介了,。 下面的表在用提 交按向"welcome.php" 提交了用入:<html> <body> <form action="welcome.php" method="post">Name: <input type="text" name="name" />Age: <input type="text" name="age" /><input type="submit" /> </form> </body> </html> 取回 "welcome.php" 中的,就像: <html> <body> Welcome <?php echo $_POST["name"]; ?>.<br />You are <?php echo $_POST["age"]; ?> years old.</body> </html> PHP session 量用于存有用會的信息,或更改用會的置。Session 量保存的信息是一用的,并且可供用程序中的所有面使用。 PHP Session 語量 當(dāng)您運行一個用程序,您會打它,做些更改,然后它。很像一次會。算機清楚你是。它知道你何啟用程序,并在何止。但是在因特網(wǎng)上,存在一個:服器不知道你是以及你做什,是由于 HTTP 地址不能持狀。 通在服器上存用信息以便隨后使用,PHP session 解決了個,比如用名稱、商品等,。不,會信息是的,在用離網(wǎng)站后將被除。如果您需要永久存信息,可以把數(shù)據(jù)存在數(shù)據(jù)中。 Session 的工作機制是:個者建一個 每唯一的id (UID),并基于個 UID 來存量。UID 存在 cookie 中,亦或通 URL 行。 語始 PHP Session 在您把用信息存到 PHP session 中之前,首先必啟會。 注:語語session_start() 函數(shù)必位于 <html> 之前: <?php session_start(); ?> <html> <body> </body> </html> 上面的代會向服器注冊用的會,以便您可以始保存用信息,同會用會分配一個 UID。 存語 Session 語量 存和 取回session 量的正確方法是使用PHP $_SESSION 量:<?php session_start(); // store session data $_SESSION['views']=1; ?> <html> <body> <?php //retrieve session data echo "Pageviews=". $_SESSION['views'];?> </body> </html> 出: Pageviews=1 在下面的例子中,我建了一個的 page-view 數(shù)器。isset() 函數(shù)是否已置 "views" 量。如果已置"views" 量,我累加數(shù)器。如果"views" 不存在,我 建"views" 量,并把它置1: <?php session_start(); if(isset($_SESSION['views'])) $_SESSION['views']=$_SESSION['views']+1; else $_SESSION['views']=1; echo "Views=". $_SESSION['views'];?> 語語 Session 如果您希望 除某些session 數(shù)據(jù),可以使用 unset() 或 session_destroy() 函數(shù)。unset() 函數(shù)用于 放指定的session 量: <?php unset($_SESSION['views']); ?> 您也可以通 session_destroy() 函數(shù) 底session: <?php session_destroy(); ?> 注:語語session_destroy() 將重置 session,您將失去所有已存的 session 數(shù)據(jù)。PHP 允您從腳本直接送子件。 PHP mail() 函數(shù) PHP mail() 函數(shù)用于從腳本中送子件。 語法 mail(to,subject,message,headers,parameters)參數(shù)描述 to 必需。定email 接收者。 subject 必需。定email 的主。注:參數(shù)不能包含任何新行字符。message 必需。定要送的消息。使用LF (
) 來分隔各行。 可。定 附加的,比如From、Cc 以及Bcc。headers 當(dāng)使用CRLF (
) 分隔附加的。 parameters可。件送程序定外的參數(shù)。 注:語語PHP 需要一個已安裝且正在運行的件系,以便使件函數(shù)可用。所用的程序通在 php.ini 文件中的配置置行定。在我的 PHP Mail 參考手冊更多內(nèi)容。PHP 語易 E-Mail 通 PHP 送子件的最的方式是送一封文本email。在下面的例子中,我首先聲明量($to, $subject, $message, $from, $headers),然后我在 mail() 函數(shù)中使用些量來 送了一封e-mail: <?php $to = "[email protected]"; $subject = "Test mail"; $message = "Hello! This is a simple email message."; $from = "[email protected]";$headers = "From: $from"; mail($to,$subject,$message,$headers); echo "Mail Sent."; ?> PHP Mail Form 通 PHP,您能在自己的站點制作一個反表。下面的例子向指定的 e-mail 地址送了一條文本消息: <html> <body> <?php if (isset($_REQUEST['email'])) //if "email" is filled out, send email { //send email $email = $_REQUEST['email'] ; $subject = $_REQUEST['subject'] ; $message = $_REQUEST['message'] ; mail( "[email protected]", "Subject: $subject", $message, "From: $email" ); echo "Thank you for using our mail form"; } else //if "email" is not filled out, display the form { echo "<form method='post' action='mailform.php'> Email: <input name='email' type='text' /><br /> Subject: <input name='subject' type='text' /><br /> Message:<br /> <textarea name='message' rows='15' cols='40'> </textarea><br /> <input type='submit' /> </form>"; } ?> </body> </html> 例子解:語語 1.首先,是否填寫了件入框 2.如果未填寫,比如在面被首次,,出 HTML 表 3.如果已填寫,在表被填寫后,,從表送件 4.當(dāng)點提交按后,重新入面,示件送成功的消息 在上一語中的 PHP e-mail 腳本中~存在著一漏洞。個 PHP E-mail 注入 首先~語看上一語中的 PHP 代語, <html> <body> <?php if (isset($_REQUEST['email'])) //if "email" is filled out, send email { //send email $email = $_REQUEST['email'] ; $subject = $_REQUEST['subject'] ; $message = $_REQUEST['message'] ; mail("[email protected]", "Subject: $subject", $message, "From: $email" ); echo "Thank you for using our mail form"; } else //if "email" is not filled out, display the form { echo "<form method='post' action='mailform.php'> Email: <input name='email' type='text' /><br /> Subject: <input name='subject' type='text' /><br /> Message:<br /> <textarea name='message' rows='15' cols='40'> </textarea><br /> <input type='submit' /> </form>"; } ?> </body> </html> 以上代語存在的語語是~未語授語的用語可通語語入表語在語件語部入據(jù)。插數(shù) 假如用語在表語中的語入加入語些文本~出語什語情,框內(nèi)會況呢 [email protected]%0ACc:[email protected]%0ABcc:[email protected],[email protected], [email protected],[email protected] %0ABTo:[email protected] 與往常一語~mail() 函把上面的文本放入語件語部~那語語在語部有了語外的 數(shù)Cc:, Bcc: 以及 To: 字段。當(dāng)用語點語提交按語語~語封 e-mail 會被語送到上面所有的地址, PHP 防止 E-mail 注入 防止 e-mail 注入的最好方法是語語入語行語語。 下面的代語上一語語似~不語我語已語增加了語語表語中 與email 字段的語入語語程序,<html> <body> <?php function spamcheck($field) { //filter_var() sanitizes the e-mail //address using FILTER_SANITIZE_EMAIL $field=filter_var($field, FILTER_SANITIZE_EMAIL); //filter_var() validates the e-mail //address using FILTER_VALIDATE_EMAIL if(filter_var($field, FILTER_VALIDATE_EMAIL)) { return TRUE; } else { return FALSE; } } if (isset($_REQUEST['email'])) {//if "email" is filled out, proceed //check if the email address is invalid $mailcheck = spamcheck($_REQUEST['email']); if ($mailcheck==FALSE) { echo "Invalid input"; } else {//send email $email = $_REQUEST['email'] ; $subject = $_REQUEST['subject'] ; $message = $_REQUEST['message'] ; mail("[email protected]", "Subject: $subject", $message, "From: $email" ); echo "Thank you for using our mail form"; } } else {//if "email" is not filled out, display the form echo "<form method='post' action='mailform.php'> Email: <input name='email' type='text' /><br /> Subject: <input name='subject' type='text' /><br /> Message:<br /> <textarea name='message' rows='15' cols='40'> </textarea><br /> <input type='submit' /> </form>"; } ?> </body> </html> 在上面的代語中~我語使用了 PHP 語語器語語入語行語語,來 ?FILTER_SANITIZE_EMAIL 從字符串中語除語子語件的非法字符 ?FILTER_VALIDATE_EMAIL 語語語子語件地址您可以在我語的 PHP 語語器語一語中語語更多有語語語器的容。內(nèi) 在 PHP 中,默的理很。一條消息會被送到器,條消息 有文件名、行號以及一條描述的消息。 PHP 語語語理 在建腳本和 web 用程序,理是一個重要的部分。如果您的代缺少,那程序看上去很不,也安全敞了大。本教程介了 PHP 中一些最重要的方法。 我將您解不同的理方法: ? 的"die()" 句 ?自定和觸器 ?告 基本的語語語理,使用 die() 函數(shù) 第一個例子展示了一個打文本文件的腳本: <?php $file=fopen("welcome.txt","r");?> 如果文件不存在,您會得似的: Warning: fopen(welcome.txt) [function.fopen]: failed to open stream: No such file or directory in C:webfolder est.php on line 2了避免用得似上面的消息,我在文件之前文件是否存在:<?php if(!file_exists("welcome.txt")) { die("File not found"); } else { $file=fopen("welcome.txt","r"); } ?> 在,假如文件不存在,您會得到似的消息: File not found 比起之前的代,上面的代更有效,是由于它采用了一個的理機制在之后止了腳本。 不,地止腳本并不是恰當(dāng)?shù)姆绞?。我研究一下用于?的的PHP 函數(shù)。 語建自定語語語語理器 建一個自定的理器非常。我很地建了一個用函數(shù),可 以在 PHP 中生用函數(shù)。 函數(shù)必有能力理至少兩個參數(shù)(error level 和 error message),但是可以接受最多五個參數(shù),可的:file, line-number 以及 error context,: 語法 error_function(error_level,error_message,error_file,error_line,error_context) 參數(shù)描述 必需。用定的定告。必是一個數(shù)。error_level 參下面的表格:告。 error_message必需。用定的定消息。 error_file可。定在其中生的文件名。 error_line可。定生的行號。 error_context可。定一個數(shù),包含了當(dāng)個量以及它的。每生在用的 語語語語語告 些告是理程序旨在理的的不同的型: 語常量描述 2E_WARNING 非致命的run-time 。不停腳本行。 Run-time 通知。8E_NOTICE 腳本可能有生,但也可能在腳 本正常運行生。 256E_USER_ERROR致命的用生成的。似于程序使 用 PHP 函數(shù)trigger_error() 置的E_ERROR。512E_USER_WARNING非致命的用生成的警告。似于程序 使用PHP 函數(shù)trigger_error() 置的E_WARNING。1024E_USER_NOTICE用生成的通知。似于程序使用 PHP 函數(shù)trigger_error() 置的E_NOTICE。4096E_RECOVERABLE_ERROR 可捕的致命。似E_ERROR,但可被用 定的理程序捕。( 參set_error_handler()) 8191E_ALL所有和 警告,除E_STRICT 以外。 ,在 PHP 6.0,E_STRICT 是E_ALL 的一部分,在,我建一個理的函數(shù): function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr<br />"; echo "Ending Script"; die(); } 上面的代是一個的理函數(shù)。當(dāng)它被觸,它會取得和消息。然后它會出和消息,并止腳本。 在,我已建了一個理函數(shù),我需要確定在何觸函數(shù)。Set Error Handler PHP 的默理程序是內(nèi)建的理程序。我打算把上面的函數(shù)改造腳本運行期的默理程序。 可以修改理程序,使其用到某些,腳本就可以不同的方 式來理不同的。不,在本例中,我打算所有來使用我的自定理程序:set_error_handler("customError");由于我希望我的自定函數(shù)來理所有,set_error_handler() 需要一個參數(shù),可以添加第二個參數(shù)來定。 語例 通出不存在的量,來個理程序: <?php //error handler function function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr"; } //set error handler set_error_handler("customError");//trigger error echo($test); ?> 以上代的出似: Error: [8] Undefined variable: test觸語語語 在腳本中用入數(shù)據(jù)的位置,當(dāng)用的入無效觸的很有用的。在 PHP 中,個任由 trigger_error() 完成。 例子 在本例中,如果 "test" 量大于"1",就會生: <?php $test=2; if ($test>1) { trigger_error("Value must be 1 or below");} ?> 以上代的出似: Notice: Value must be 1 or below in C:webfolder est.php on line 6您可以在腳本中任何位置觸,通添加的第二個參數(shù),您能定所觸的??赡艿男?語語語語語 ?E_USER_ERROR - 致命的用 生成的run-time 。無法恢。腳本行被中斷。 ?E_USER_WARNING - 非致命的用 生成的run-time 警告。腳本行不被中斷。 ?E_USER_NOTICE - 默 。用生成的run-time 通知。腳本了可能的, 也有可能在腳本運行正常生。 例子 在本例中,如果 "test" 量大于"1", 生E_USER_WARNING 。如果生了 E_USER_WARNING,我將使用我的自定理程序并束腳本: <?php //error handler function function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr<br />"; echo "Ending Script"; die(); } //set error handler set_error_handler("customError",E_USER_WARNING);//trigger error $test=2; if ($test>1) { trigger_error("Value must be 1 or below",E_USER_WARNING); } ?> 以上代的出似: Error: [512] Value must be 1 or belowEnding Script 在,我已學(xué)了如何建自己的error,以及如何它,在我研究一下。 語語語語 默 地,根據(jù)在php.ini 中的 error_log 配置,PHP 向服器的系或文件送 。通使用error_log() 函數(shù),您可以向指定的文件或程目的地送。通子件向您自己送消息,是一得指定的通知的好法。 通語 E-Mail 語語語語語送消息 在下面的例子中,如果特定的生,我將送有消息的子件,并束腳本:<?php //error handler function function customError($errno, $errstr) { echo "<b>Error:</b> [$errno] $errstr<br />"; echo "Webmaster has been notified"; error_log("Error: [$errno] $errstr",1, "[email protected]","From: [email protected]"); } //set error handler set_error_handler("customError",E_USER_WARNING);//trigger error $test=2; if ($test>1) { trigger_error("Value must be 1 or below",E_USER_WARNING); } ?> 以上代的出似: Error: [512] Value must be 1 or belowWebmaster has been notified 接收自以上代的件似: Error: [512] Value must be 1 or below 個方法不適合所有的。常當(dāng)通使用默的PHP 系在服器上行。異常,Exception,用于在指定的生改腳本的正常流程。 什語是常,異 PHP 5 提供了一新的面向象的理方法。 異常理用于在指定的,異常,情況生改腳本的正常流程。情況稱異常。當(dāng)異常被觸,通常會生: ?當(dāng)前代狀被保存 ?代行被切到定的異常理器函數(shù) ?根據(jù)情況,理器也會從保存的代狀重新始行代,止 腳本行,或從代中另外的位置行腳本 我將展示不同的理方法: ?異常的基本使用 ?建自定的異常理器 ?多個異常 ?重新拋出異常 ?置異常理器 異常的基本使用 當(dāng)異常被拋出,其后的代不會行,PHP 會找匹配的 "catch" 代。如果異常沒有被捕 ,而且又沒用使用set_exception_handler() 作相的理的,那將 生一個重的,致命,,并且出"Uncaught Exception" ,未捕異常,的消息。 我拋出一個異常,同不去捕它: <?php //create function with an exceptionfunction checkNum($number) { if($number>1) { throw new Exception("Value must be 1 or below"); } return true; } //trigger exception checkNum(2); ?> 上面的代會得似的一個: Fatal error: Uncaught exception 'Exception' with message 'Value must be 1 or below' in C:webfolder est.php:6 Stack trace: #0 C:webfolder est.php(12): checkNum(28) #1 {main} thrown in C:webfolder est.php on line 6 Try, throw 和 catch 要避免上面例子出的,我需要建適當(dāng)?shù)拇鷣砝懋惓!?/p> 理理程序當(dāng)包括: 1.Try - 使用異常的函數(shù)位于 "try" 代內(nèi)。如果沒有觸異常,代 將照常行。但是如果異常被觸,會拋出一個異常。 2.Throw - 里一個定如何觸異每常。"throw" 必至少一個 "catch"3.Catch - "catch" 代會捕異常,并建一個包含異常信息的象 我觸一個異常: <?php //建可拋出一個異常的函數(shù) function checkNum($number) { if($number>1) { throw new Exception("Value must be 1 or below"); } return true; } //在 "try" 代中觸異常 try { checkNum(2); //If the exception is thrown, this text will not be shown echo 'If you see this, the number is 1 or below'; } //捕異常 catch(Exception $e) { echo 'Message: ' .$e->getMessage(); } ?> 上面代將得似一個: Message: Value must be 1 or below 例子解:語語 上面的代拋出了一個異常,并捕了它: 1. 建checkNum() 函數(shù)。它數(shù)字是否 大于1。如果是,拋出一個異常。 2.在 "try" 代中用 checkNum() 函數(shù)。 3.checkNum() 函數(shù)中的異常被拋出 4."catch" 代接收到異常,并建一個包含異常信息的象 ($e)。 5.通 從個exception 象用$e->getMessage(),出來自異常的消息不,了“ 個每遵循throw 必一個 catch”的原,可以置一個的異常理器來理漏掉的。 語建一自定語的 個Exception 語 建自定的異常理程序非常。我地建了一個的,當(dāng)PHP 中 生異常,可用其函數(shù)。必是exception 的一個展。 個自定的exception 承了PHP 的 exception 的所有屬性,您可向其添加自定的函數(shù)。我始建 exception : <?php class customException extends Exception { public function errorMessage() { //error message $errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile() .': <b>'.$this->getMessage().'</b> is not a valid E-Mail address'; return $errorMsg; } } $email = "[email protected]"; try { //check if if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) { //throw exception if email is not valid throw new customException($email); } } catch (customException $e) { //display custom message echo $e->errorMessage(); } ?> 個新的是舊的exception 的副本,外加errorMessage() 函數(shù)。正因它是舊的副本,因此它從舊承 了屬性和方法,我可以使用exception 的方法,比如 getLine() 、 getFile() 以及 getMessage()。 例子解:語語 上面的代 拋出了一個異常,并通一個自定的exception 來捕它: 1.customException() 是作舊的exception 的一個展來建的。它就 承了舊的所有屬性和方法。 2. 建errorMessage() 函數(shù)。如果 e-mail 地址不合法,函數(shù)返回一條消息 3.把 $email 量置不合法的e-mail 地址字符串 4. 行"try" 代,由于 e-mail 地址不合法,因此拋出一個異常 5."catch" 代捕異常,并示消息 多常個異 可以一段腳本使用多個異常,來多情況。 可以使用多個 if..else 代,或一個 switch 代,或者嵌套多個異常。些異常能使用不同的 exception ,并返回不同的消息: <?php class customException extends Exception{ public function errorMessage() { //error message $errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile() .': <b>'.$this->getMessage().'</b> is not a valid E-Mail address'; return $errorMsg; } } $email = "[email protected]"; try { //check if if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) { //throw exception if email is not valid throw new customException($email); } //check for "example" in mail address if(strpos($email, "example") !== FALSE) { throw new Exception("$email is an example e-mail"); } } catch (customException $e) { echo $e->errorMessage(); } catch(Exception $e) { echo $e->getMessage(); } ?> 例子解:語語 上面的代了兩條件,如何任何條件不成立,拋出一個異常: 1.customException() 是作舊的exception 的一個展來建的。它就 承了舊的所有屬性和方法。 2. 建errorMessage() 函數(shù)。如果 e-mail 地址不合法,函數(shù)返回一個消息。 3. 行"try" 代,在第一個條件下,不會拋出異常。 4.由于 e-mail 含有字符串 "example",第二個條件會觸異常。 5."catch" 代會捕異常,并示恰當(dāng)?shù)南?/p> 如果沒有捕 customException, 捕了base exception,在那里理異常。重新拋出常異 有,當(dāng)異常被拋出,您也希望以不同于準(zhǔn)的方式它行理??梢栽谝粋€ "catch" 代中再次拋出異常。 腳本用藏系。程序來,系也很重要,但是用它并不感趣。了用更容易使用,您可以再次拋出有用比友好的消息的異常:<?php class customException extends Exception { public function errorMessage() { //error message $errorMsg = $this->getMessage().' is not a valid E-Mail address.'; return $errorMsg; } } $email = "[email protected]";try { try { //check for "example" in mail address if(strpos($email, "example") !== FALSE) { //throw exception if email is not valid throw new Exception($email); } } catch(Exception $e) { //re-throw exception throw new customException($email); } } catch (customException $e) { //display custom message echo $e->errorMessage(); } ?> 例子解:語語 上面的代在件地 址中是否含有字符串"example"。如果有,再次拋出異常: 1.customException() 是作舊的exception 的一個展來建的。它就 承了舊的所有屬性和方法。 2. 建errorMessage() 函數(shù)。如果 e-mail 地址不合法,函數(shù)返回一個消息。 3.把 $email 量置一個有效的件地址,但含有字符串 "example"。 4."try" 代包含另一個 "try" 代,就可以再次拋出異常。 5.由于 e-mail 包含字符串 "example",因此觸異常。 6."catch" 捕 到異常,并重新拋出"customException"。 7.捕 到"customException",并示一條消息。 如果在其目前的 "try" 代中 異常沒有被捕,它將在更高上找catch 代。 語置語語常語理器 ;異Top Level Exception Handler, set_exception_handler() 函數(shù)可置理所有未捕異常的用定函數(shù)。 <?php function myException($exception){ echo "<b>Exception:</b> " , $exception->getMessage(); } set_exception_handler('myException');throw new Exception('Uncaught Exception occurred'); ?> 以上代的出似: Exception: Uncaught Exception occurred在上面的代中,不存在 "catch" 代,而是觸的異常理程序。使用此函數(shù)來捕所有未被捕的異常。 異常的語語 ?需要行 異常理的代放入try 代內(nèi),以便捕潛在的異常。 ?每個 try 或 throw 代必至少有一個的 catch 代。 ?使用多個 catch 代可以捕不同的異常。 ?可以在 try 代內(nèi)的 catch 代中再次拋出,re-thrown,異常。而言之:如果拋出了異常,就必捕它。 PHP 器用于和來自非安全來源的數(shù)據(jù),比如用的入。 什語是 PHP 語語器, PHP 器用于和來自非安全來源的數(shù)據(jù)。 和用入或自定數(shù)據(jù)是任何Web 用程序的重要成部分。 PHP 的器展的目的是使數(shù)據(jù)更松快捷。 語什語使用語語器, 幾乎所有 web 用程序都依外部的入。些數(shù)據(jù)通常來自用或其他用程序,比如 web 服,。通使用器,您能確保有程序得正確的入型。您始外部數(shù)據(jù)行: 入是最重要的用程序安全之一。 什語語語語語語語是外部數(shù)據(jù), ?來自表的入數(shù)據(jù) ?Cookies ?服器量 ?數(shù)據(jù)果 函和語語器數(shù) 如需量,使用下面的器函數(shù)之一: ?filter_var() - 通一個指定的器來一的量 ?filter_var_array() - 通相同的或不同的器來多個量 ?filter_input - 取一個入量,并它行 ?filter_input_array - 取多個入量,并通相同的或不同的器它行在下面的例子中,我用 filter_var() 函數(shù)了一個整數(shù):<?php $int = 123; if(!filter_var($int, FILTER_VALIDATE_INT)) { echo("Integer is not valid"); } else { echo("Integer is valid"); } ?> 上面的代使用了 "FILTER_VALIDATE_INT" 器來量。由于個整數(shù)是合 法的,因此代的出是:"Integer is valid"。 假如我使用一個非整數(shù)的量,出是:"Integer is not valid"。如需完整的函數(shù)和器列表,我的 PHP Filter 參考手冊。Validating 和 Sanitizing 有兩器: Validating 語語器: ?用于用入 ? 格的格式,比如URL 或 E-Mail , ?返回若成功期的型,否返回 FALSE Sanitizing 語語器: ?用于允或禁止字符串中指定的字符 ?無數(shù)據(jù)格式 ?始返回字符串 語語和語志 和志用于向指定的器添加外的。 不同的器有不同的和志。 在下面的例子中,我用 filter_var() 和 "min_range" 以及 "max_range" 了一個整數(shù): <?php $var=300; $int_options = array( "options"=>array ( "min_range"=>0, "max_range"=>256 ) ); if(!filter_var($var, FILTER_VALIDATE_INT, $int_options)) { echo("Integer is not valid"); } else { echo("Integer is valid"); } ?> 就像上面的代一,必 放入一個名"options" 的相數(shù)中。如果使用 志,不需在數(shù)內(nèi)。 由于整數(shù)是 "300",它不在指定的氛 內(nèi),以上代的出將是"Integer is not valid"。 如需完整的函數(shù)及 器列表,W3School 提供的 PHP Filter 參考手冊。您可以看到個每 器的可用和志。 語語語入 我著來自表的入。 我需要作的第一件事情是確是否存在我正在找的入數(shù)據(jù)。然后我用 filter_input() 函數(shù)入的數(shù)據(jù)。 在下面的例子中,入量 "email" 被到 PHP 面:<?php if(!filter_has_var(INPUT_GET, "email")) { echo("Input type does not exist"); } else { if (!filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL)) { echo "E-Mail is not valid"; } else { echo "E-Mail is valid"; } } ?> 例子解:語語 上面的例子有一個通 "GET" 方法 送的入量(email): 1. 是否存在"GET" 型的"email" 入量 2.如果存在入量,它是否是有效的件地址 語化語入 我著清理一下從表來的URL。 首先,我要確是否存在我正在找的入數(shù)據(jù)。 然后,我用 filter_input() 函數(shù)來化入數(shù)據(jù)。 在下面的例子中,入量 "url" 被到 PHP 面: <?php if(!filter_has_var(INPUT_POST, "url")) { echo("Input type does not exist"); } else { $url = filter_input(INPUT_POST, "url", FILTER_SANITIZE_URL); } ?> 例子解:語語 上面的例子有一個通 "POST" 方法 送的入量(url): 1. 是否存在"POST" 型的"url" 入量 2.如果存在此入量,其行化,除非法字符,,并將其存 在 $url 量中 假如入量似:"#$%S^%$#ool.com.cn/",化后的 $url 量 是的: 語語多語入個 表通常由多個入字段成。了避免 filter_var 或 filter_input 重用, 我可以使用 filter_var_array 或 the filter_input_array 函數(shù)。在本例中,我使用 filter_input_array() 函數(shù)來三個 GET 量。接收到的GET 量是一個 名稱、一個年以及一個件地址: <?php $filters = array ( "name" => array ( "filter"=>FILTER_SANITIZE_STRING ), "age" => array ( "filter"=>FILTER_VALIDATE_INT, "options"=>array ( "min_range"=>1, "max_range"=>120 ) ), "email"=> FILTER_VALIDATE_EMAIL, ); $result = filter_input_array(INPUT_GET, $filters); if (!$result["age"]) { echo("Age must be a number between 1 and 120.<br />"); } elseif(!$result["email"]) { echo("E-Mail is not valid.<br />"); } else { echo("User input is valid"); } ?> 例子解:語語 上面的例子有三個通 "GET" 方法 送的入量(name, age and email) 1.置一個數(shù),其中包含了入量的名稱,以及用于指定的入量的器 2. 用filter_input_array 函數(shù),參數(shù)包括 GET 入量及才置的數(shù) 3. $result 量中的"age" 和 "email" 量是否有非法的入。,如果存在非法入,,filter_input_array() 函數(shù)的第二個參數(shù)可以是數(shù)或一 器的ID。如果參數(shù)是一 器的ID,那個指定的器會入數(shù)中所有的。如果參數(shù)是一個數(shù),那此數(shù)必遵循下面的: ?必是一個數(shù),其中包含的入量是數(shù)的,比如 "age" 入量, ?此數(shù)的必是 器的ID ,或者是定了器、志以及的數(shù)使用 Filter Callback 通使用 FILTER_CALLBACK 器,可以用自定的函數(shù),把它作一個器來使用。,我就有了數(shù)據(jù)的完全控制。 您可以建自己的自定函數(shù),也可以使用已有的 PHP 函數(shù)。定您準(zhǔn)用到器的函數(shù),與定的方法相同。 在下面的例子中,我使用了一個自定的函數(shù)把所有 "_" 空格:<?php function convertSpace($string) { return str_replace("_", " ", $string);} $string = "Peter_is_a_great_guy!";echo filter_var($string, FILTER_CALLBACK,array("options"=>"convertSpace"));?> 以上代的果是的: Peter is a great guy! 例子解:語語 上面的例子把所有 "_" 成空格: 1. 建一個把"_" 替空格的函數(shù) 2. 用filter_var() 函數(shù),它的參數(shù)是 FILTER_CALLBACK 器以及包含我的函數(shù)的數(shù)ODBC 指的是,Application Programming Interface,API,,使我有能力接到某個數(shù)據(jù)源,比如一個 MS Access 數(shù)據(jù),。 語建 ODBC 語接 通一個 ODBC 接,您可以接到您的網(wǎng)中的任何算機上的任何數(shù)據(jù),只要 ODBC 接是可用的。 是建到達MS Access 數(shù)據(jù)的 ODBC 接的方法: 1.在控制面板中打管理工具 2.雙其中的數(shù)據(jù)源 (ODBC) 3.系 DSN 語語卡 4.點 系DSN “卡中的添加”按 5. Microsoft Access Driver。點完成。 6.在下一個界面,點“語語”來定位數(shù)據(jù)。 7.個數(shù)據(jù)取一個數(shù)據(jù)源名 (DSN)。 8.點確定。 注意,必在您的網(wǎng)站所在的算機上完成個配置。如果您的算機上正在運行 Internet 信息服器 (IIS),上面的指令會生效,但是假如您的網(wǎng)站位于程服器,您必有服器的物理限,或者您的主機提供商您建立 DSN。 語接到 ODBC odbc_connect() 函數(shù)用于接到 ODBC 數(shù)據(jù)源。函數(shù)有四個參數(shù):數(shù)據(jù)源名、用名、密以及可的指型參數(shù)。 odbc_exec() 函數(shù)用于行 SQL 句。 例子 下面的例子建了到達名 northwind 的 DSN 的接, 沒有用名和 密。然后建并行一條SQL 句: $conn=odbc_connect('northwind','','');$sql="SELECT * FROM customers"; $rs=odbc_exec($conn,$sql); 取回語語 odbc_fetch_row() 函數(shù)用于從果集中返回。如果能返回行,返回 true,否返回 false。 函數(shù)有兩個參數(shù):ODBC 果符和可的行號: odbc_fetch_row($rs) 從語語中取回字段 odbc_result() 函數(shù)用于從中取字段。函數(shù)有兩個參數(shù):ODBC 果符和字段號或名稱。 下面的代行從中返回第一個字段的: $compname=odbc_result($rs,1); The code line below returns the value of a field called "CompanyName": $compname=odbc_result($rs,"CompanyName");語語 ODBC 語接 odbc_close()函數(shù)用于 ODBC 接。 odbc_close($conn); ODBC 語例 下面的例子展示了如何首先建一個數(shù)據(jù)接,然后是果 集,然后在HTML 表格中示數(shù)據(jù)。 <html> <body> <?php $conn=odbc_connect('northwind','','');if (!$conn) {exit("Connection Failed: " . $conn);}$sql="SELECT * FROM customers";$rs=odbc_exec($conn,$sql); if (!$rs) {exit("Error in SQL");} echo "<table><tr>"; echo "<th>Companyname</th>"; echo "<th>Contactname</th></tr>";while (odbc_fetch_row($rs)) { $compname=odbc_result($rs,"CompanyName"); $conname=odbc_result($rs,"ContactName"); echo "<tr><td>$compname</td>"; echo "<td>$conname</td></tr>"; } odbc_close($conn); echo "</table>"; ?> </body> </html>
信息發(fā)布:廣州名易軟件有限公司 http://m.jetlc.com
|