php基礎(chǔ)教程 (PHP for the Web: Visual QuickStart Guide (4th Edition) )
此文只是上書的閱讀筆記,不適合他人做參考學(xué)習(xí).
本書進階版:PHP與MySQL動態(tài)網(wǎng)站開發(fā)(第4版)(同一作者)
1 變量名
所有的變量名必須以美元符號($)開頭;
在美元符號后的第一個字符必須為字母(A~Z岔乔,a~z)或者下劃線()艘款,不能使用數(shù)字胧谈;
所有的變量名必須以美元符號($)開頭积锅; ?在美元符號后的第一個字符必須為字母(A~Z魂角,a~z)或者下劃線()撬讽,不能使用數(shù)字族展;
2 索引數(shù)組 關(guān)聯(lián)數(shù)組
數(shù)組使用鍵來創(chuàng)建和檢索它們保存的值审葬,其結(jié)果構(gòu)成為一系列鍵-值對深滚,看上去像是一個兩列的數(shù)據(jù)表。有趣的是涣觉,在PHP中的數(shù)組結(jié)構(gòu)非常靈活痴荐,它的鍵和值都可以使用數(shù)值或者字符串類型。數(shù)組甚至不必在此方面保持一致性(在第7章接觸到具體示例時官册,你就會明白這里所說的意思)生兆。
PHP有兩種數(shù)組類型,區(qū)別在于鍵的格式膝宁。如果一個數(shù)組使用數(shù)值作為鍵(參見表2-5)那么它就是索引數(shù)組鸦难,如果它使用字符串作為鍵(參見表2-6),那么就是關(guān)聯(lián)數(shù)組员淫。在任何一種情況下合蔽,數(shù)組中的值都可以是任何變量類型(字符串、數(shù)值或者其他類型)介返。
3理解引號
PHP允許使用單引號(')和雙引號(")辈末,但是它們將導(dǎo)致截然不同的結(jié)果。理解這一點是非常重要的映皆,因此在接下來的示例中將演示使用這兩種引號的區(qū)別。
規(guī)則描述如下:使用單引號引用的內(nèi)容將照字面意思進行處理轰枝,而被雙引號引用的內(nèi)容需要進行推斷捅彻。也就是說,雙引號引用的變量名將被它的值所替代鞍陨,正如在腳本2-3中看到的那樣步淹。但單引號引用的變量名不會被替代。
4GET 和 POST
GET和POST之間的區(qū)別在于將信息從表單向處理信息的腳本傳遞的方式诚撵。
GET將所有的信息聚集起來并作為URL的一部分進行傳遞缭裆,而POST并不讓用戶看到傳遞的信息。
一般來說寿烟,從服務(wù)器上請求信息時澈驼,使用GET請求。幾乎所有用于搜索的頁面都會使用GET(當(dāng)你使用搜索引擎時筛武,看一下它的URL)缝其,就像那些分頁顯示結(jié)果的頁面一樣(比如分類瀏覽產(chǎn)品)挎塌。相反,POST一般用于觸發(fā)基于服務(wù)器的行為内边,比如提交一張聯(lián)系表(發(fā)送Email)或提交某個博客的評論(評論添加到數(shù)據(jù)庫和該博客的頁面上)榴都。
無論表單使用什么method,你都可以在預(yù)定義的$_REQUEST變量中訪問表單數(shù)據(jù)漠其。然而嘴高,$_GET和$_POST更明確,所以更可取和屎。
5表單
表單最重要的兩個元素 action method
6格式化數(shù)值
有兩個函數(shù)適合達到格式化數(shù)值的目的拴驮。
第一個是round(),它用于對數(shù)值截取特定位數(shù)的小數(shù)眶俩。函數(shù)的第一個參數(shù)是需要格式化的數(shù)值莹汤,它既可以是一個數(shù)字,也可以是一個存有數(shù)值的變量颠印。第二個參數(shù)是可選的纲岭,它代表需要取的小數(shù)位數(shù)。例如:round (4.30); // 4
round (4.289, 2); // 4.29
$num = 236.26985;
round ($num); // 236
另外一個可以用來格式化數(shù)值的函數(shù)是number_format()线罕。number_format()同round()的工作方式類似止潮,它有一個數(shù)值參數(shù)(或者有數(shù)字值的變量)以及一個可選的小數(shù)位數(shù)指定參數(shù)。這個函數(shù)通過千位分組來格式化數(shù)字钞楼,格式化的效果通常如下所示:
number_format (428.4959, 2); // 428.50
number_format (428, 2); // 428.00
number_format (123456789); // 123,456,789
出于一些復(fù)雜的原因喇闸,round()函數(shù)對于“精確”半數(shù)的情況(0.5、0.05询件、0.005等)燃乍,舍去和進上的次數(shù)是一半對一半,四舍六入五成雙.
number_format()函數(shù)接受兩個可選參數(shù),這兩個參數(shù)分別用來指定使用什么字符代表小數(shù)點位數(shù)和千分號宛琅。這是非常有用的刻蟹,例如,在某些文化的習(xí)慣中嘿辟,將1 000.89寫為1.00089舆瘪。如果希望使用這些選項,請參看PHP手冊中相關(guān)的語法描述红伦。
7n12br 處理換行符
字符串中的換行符通常給PHP開發(fā)新手帶來一些問題英古。用戶可以在textarea表單元素中用敲擊Return或者Enter的方式輸入多行文本。每次敲擊Return或者Enter的結(jié)果在字符串中都相當(dāng)于產(chǎn)生一個換行符昙读。這些換行符在textarea中會起作用召调,但是在PHP頁面呈現(xiàn)中將不會產(chǎn)生任何效果.
8 HTML和PHP (PHP是一項被頻繁用來向Web瀏覽器發(fā)送數(shù)據(jù)的服務(wù)器端技術(shù))
數(shù)據(jù)將從一個HTML表單中輸入,然后使用PHP在Web瀏覽器上打印出來。一個潛在的問題是某残,用戶可以在表單中輸入HTML字符国撵,這將會對頁面的格式產(chǎn)生影響,或許還會導(dǎo)致更糟的結(jié)果玻墅,從而引發(fā)安全方面的問題介牙。
可以使用一些PHP函數(shù)來處理PHP字符串變量中的HTML標(biāo)簽。
?htmlspecialchars()將特定的HTML標(biāo)簽轉(zhuǎn)換為實體版本澳厢。
?htmlentities()將所有的HTML標(biāo)簽轉(zhuǎn)換為實體版本环础。
?strip_tags()移除所有的HTML和PHP標(biāo)簽。
9 字符串的編碼和解碼
urlencode()函數(shù)可以通過URL安全地將任意值傳送到PHP腳本剩拢。顧名思義线得,這個函數(shù)接受一個字符串,并對之編碼(en-code)(改變它的格式)徐伐,以便它完全適合作為URL的一部分傳輸贯钩。這個函數(shù)用加號(+)替換掉空格,并且將特殊字符(如省略號)轉(zhuǎn)換為較少出現(xiàn)問題的形式办素。
從表單直接發(fā)送的值角雷,在被發(fā)送之前會自動進行URL—編碼,接收腳本收到后再對其進行解碼性穿。
10字符串的加密和解密
可以使用crypt()函數(shù)來對數(shù)據(jù)進行加密勺三,但是請注意沒有解密選項可用(它是一種單向加密方式)。因此需曾,可以用它來對密碼進行加密并且保存吗坚,但是無法確定解碼值。在Web應(yīng)用程序中使用這個函數(shù)呆万,可以在注冊的時候?qū)τ脩裘艽a進行加密商源,然后當(dāng)用戶登錄時,他們輸入的密碼同樣會被加密谋减,并且會對密碼的兩個加密版本進行對比炊汹。crypt()的語法如下:$data = crypt($data);
如果數(shù)據(jù)被存儲在數(shù)據(jù)庫中,也可以使用數(shù)據(jù)庫應(yīng)用程序(例如MySQL逃顶、PostgreSQL、Oracle或者SQL Server)中的內(nèi)置函數(shù)來執(zhí)行加密和解密充甚。大多數(shù)技術(shù)都提供單向或者雙向的加密工具以政,但還取決于你所使用的技術(shù)。
11創(chuàng)建模板,使用外部文件
可以將頁面劃分成特定的元素伴找,然后使用特定的函數(shù)將它們合并到主PHP頁面中盈蛮,這樣可以節(jié)省開發(fā)時間。需要使用的函數(shù)有include()和require():
include ('file.php'); 警告
require ('file.html');終止
這兩個函數(shù)的工作方式相同技矮,它們的區(qū)別也不是很大:如果include()函數(shù)失敗了抖誉,PHP腳本會生成一個警告(參見圖8-7)殊轴,但繼續(xù)運行。相反袒炉,如果require()失敗了旁理,它會終止腳本的執(zhí)行
12常量
define();
13時間
date()函數(shù)可以接受另一個參數(shù),這個參數(shù)稱作時間戳(timestamp)我磁。
時間戳是一個數(shù)字孽文,表示從1970年1月1日午夜起計算的秒數(shù)——這一時刻也稱作epoch。
time()函數(shù)可以返回當(dāng)前時刻的時間戳夺艰。
mktime()函數(shù)可以返回一個給定的時間和日期的時間戳:
mktime(hour, minute, second, month, day, year);
因此下面的代碼:$ts = mktime(12, 30, 0, 11, 5, 2011);
可以將從epoch到2011年11月5日12:30經(jīng)過的秒數(shù)賦值給$ts變量芋哭。這個數(shù)值可以傳遞給date()函數(shù),如下所示:date('D', $ts);這會返回Sat郁副,它是用3個字母表示的一周中的某一天减牺。
由于PHP是一種服務(wù)器端的技術(shù),因此這些函數(shù)反映的是服務(wù)器上的日期和時間存谎。要獲取客戶端(換句話說拔疚,就是用于瀏覽頁面的Web瀏覽器所在的計算機)的時間,則必須使用JavaScript愕贡。
14使用一個php腳本完成表單處理所有流程
瀏覽器第一次訪問login.php是GET請求.
login.php提交表單給自己是POST請求.
判別請求方式語句:$_SERVER['REQUEST_METHOD'] == 'POST'
15輸出緩沖
要啟用輸出緩沖草雕,請在頁面的最頂端使用ob_start()函數(shù)。
在腳本的結(jié)尾處固以,調(diào)用ob_end_flush()函數(shù)墩虹,將積累下來的緩沖發(fā)送到Web瀏覽器。
或者憨琳,可以使用ob_end_clean()函數(shù)刪除緩沖的數(shù)據(jù)而不進行傳輸诫钓。
這兩個函數(shù)都會為當(dāng)前腳本關(guān)閉輸出緩沖。
16處理HTTP頭
除了發(fā)送HTML篙螟、圖片等信息外菌湃,Web服務(wù)器通常需要用其他一些方式與客戶端通信。這些額外的通信需要使用HTTP頭實現(xiàn)遍略。
17 函數(shù)返回多個值
返回數(shù)組 小米閱讀 583 網(wǎng)頁版
18 文件
在創(chuàng)建可寫文件和目錄時惧所,將它們放在Web根目錄之外會更安全。換句話說绪杏,如果Web頁面放置在C:\inetpub\wwwroot或/Users/username/Sites中下愈,此時,如果你將項目放置在C:\inet-pub或/Users/username中蕾久,這些項目可以被本地運行的PHP訪問到势似,但不能通過Internet訪問。本章中的示例都遵從這種結(jié)構(gòu),你也應(yīng)該嚴(yán)格遵守履因。
寫入文件最簡單的方式是使用file_put_contents()函數(shù)
PHP專用的常量PHP_EOL障簿,表示當(dāng)前操作系統(tǒng)的換行符
如果需要將新內(nèi)容追加到文件中,加入FILE_APPEND常量作為第三個參數(shù):
file_put_contents($file, $data, FILE_APPEND);
如果正在運行的PHP版本是安全模式的栅迄,或設(shè)置了open_basedir指令站故,則在使用PHP訪問文件和目錄時會受到一些限制。請使用phpinfo()函數(shù)來查看服務(wù)器上的這些設(shè)置霞篡。
- 讀取文件
使用file_get_contents()會將文件中的所有內(nèi)容按照一個字符串來讀仁勒帷:$data = file_get_contents($file);
如果文件每一行都有一些數(shù)據(jù),就像例子中的quotes.txt朗兵,最好使用file()函數(shù):$data = file($file);file()函數(shù)是PHP中非常有價值的一個內(nèi)置工具污淋。與file_get_contents()不同,它讀取文件中的所有內(nèi)容并將這些信息放置在一個數(shù)組中余掖。數(shù)組的每個元素都包含了文件中的一行寸爆,這些行是用換行符(\n或\r\n)分隔的。
+文件上傳
為了讓用戶能夠上傳文件盐欺,必須對標(biāo)準(zhǔn)的HTML表單作出3處更改赁豆。首先,初始form標(biāo)簽必須包含代碼enctype="multipart/form-data"冗美,讓瀏覽器知道表單數(shù)據(jù)將具備不同的類型:<form action="script.php" enctype="multipart/form-data" method="post">表單必須使用POST方法魔种。