版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第4章PHP進(jìn)階《PHP+MySQL動態(tài)網(wǎng)站開發(fā)》學(xué)習(xí)目標(biāo)/Target熟悉常見的錯誤級別掌握如何進(jìn)行錯誤處理掌握HTTP請求與響應(yīng)的基本概念掌握會話技術(shù)Cookie和Session的基本使用學(xué)習(xí)目標(biāo)/Target熟悉圖像的處理和文件的基本操作掌握表單的接收與處理方法掌握正則表達(dá)式的使用方法章節(jié)概述/Summary在前面的章節(jié)中講解了PHP的基本的語法,相信讀者已經(jīng)可以編寫簡單的程序了,但在實際開發(fā)中,還會用到一些進(jìn)階的知識,包括錯誤處理、HTTP、會話技術(shù)、圖像處理、目錄和文件操作、表單傳值和正則表達(dá)式等,本章將會對這些內(nèi)容進(jìn)行詳細(xì)講解。目錄/Contents01020304錯誤處理HTTP會話技術(shù)圖像處理目錄/Contents050607目錄和文件操作表單傳值正則表達(dá)式錯誤處理4.14.1.1錯誤級別
先定一個小目標(biāo)!熟悉錯誤級別,能夠說出PHP中常見的錯誤級別的含義4.1.1錯誤級別級別常量值描述E_ERROR1致命的運行時錯誤,這類錯誤不可恢復(fù),會導(dǎo)致腳本停止運行E_WARNING2運行時警告,僅給出提示信息,但是腳本不會停止運行E_PARSE4編譯時語法解析錯誤,說明代碼存在語法錯誤,無法執(zhí)行E_NOTICE8運行時通知,表示腳本遇到可能會表現(xiàn)為錯誤的情況E_CORE_ERROR16類似E_ERROR,是由PHP引擎核心產(chǎn)生的E_CORE_WARNING32類似E_WARNING,是由PHP引擎核心產(chǎn)生的E_COMPILE_ERROR64類似E_ERROR,是由Zend腳本引擎產(chǎn)生的錯誤級別:PHP中有多種錯誤類型,每個錯誤都對應(yīng)了錯誤級別,使用常量表示錯誤級別。常見的錯誤級別:(1/2)4.1.1錯誤級別級別常量值描述E_COMPILE_WARNING128類似E_WARNING,是由Zend腳本引擎產(chǎn)生的E_USER_ERROR256類似E_ERROR,由用戶在代碼中使用trigger_error()產(chǎn)生的E_USER_WARNING512類似E_WARNING,由用戶在代碼中使用trigger_error()產(chǎn)生的E_USER_NOTICE1024類似E_NOTICE,由用戶在代碼中使用trigger_error()產(chǎn)生的E_STRICT2048嚴(yán)格語法檢查,確保代碼具有互用性和向前兼容性E_DEPRECATED8192運行時通知,對未來版本中可能無法正常工作的代碼給出警告E_ALL32767表示所有的錯誤和警告信息(在PHP5.4之前不包括E_STRICT)常見的錯誤級別:(2/2)4.1.1錯誤級別//①使用未定義的變量echo$var;
//提示信息“Notice:Undefinedvariable…”//②使用未定義的常量echoPI;
//提示信息“Notice:Useofundefinedconstant…”Notice:是代碼不嚴(yán)謹(jǐn)造成的,不會影響腳本繼續(xù)執(zhí)行。Notice(E_NOTICE)Notice錯誤信息代碼示例4.1.1錯誤級別//①除法運算時,除數(shù)為0echo5/0;
//提示信息“Warning:Divisionbyzero…”//②使用include包含不存在的文件include'1234';
//提示信息“Warning:include():Failedopening…”Warning:比Notice更嚴(yán)重一些,不會影響腳本繼續(xù)執(zhí)行。Warning(E_WARNING)Warning警告信息代碼示例4.1.1錯誤級別Fatalerror:致命錯誤,一旦發(fā)生這種錯誤,PHP腳本會立即停止執(zhí)行。Fatalerror(E_ERROR)display();//Fatalerror:UncaughtError:Calltoundefinedfunction…echo'hello';//前一行發(fā)生錯誤,此行代碼不會執(zhí)行Fatalerror錯誤信息代碼示例4.1.2錯誤處理
先定一個小目標(biāo)!熟悉錯誤處理的方法,能夠控制錯誤的顯示、隱藏,或?qū)㈠e誤信息記錄到日志文件中4.1.2錯誤處理error_reporting(E_ALL);ini_set('display_errors',1)修改配置文件代碼示例使用函數(shù)代碼示例error_reporting=E_ALLdisplay_errors=On在瀏覽器中顯示錯誤信息的兩種方式:通過修改配置文件來顯示錯誤報告,通過PHP提供的函數(shù)來顯示錯誤報告。在瀏覽器中顯示錯誤信息設(shè)置錯誤級別設(shè)置是否顯示錯誤信息設(shè)置錯誤級別設(shè)置php.ini中指定選項的值4.1.2錯誤處理//錯誤信息發(fā)送到php.ini中的error_log配置的日志中error_log('errormessagea');//將錯誤信息發(fā)送到指定的日志文件中error_log('errormessageb',3,'C:/web/php.log');error_reporting=E_ALL;log_error=Onerror_log=C:\web\php_errors.log記錄錯誤日志的兩種方式:通過配置文件和error_log()函數(shù)記錄錯誤日志信息。記錄錯誤日志配置文件代碼示例設(shè)置是否記錄日志指定日志寫入的文件路徑使用函數(shù)代碼示例第2個參數(shù)指定錯誤信息發(fā)送位置,設(shè)置為3表示發(fā)送到指定文件,省略時發(fā)送到php.ini的error_log配置的日志中。第3個參數(shù)取決于第2個參數(shù),此處表示日志文件的路徑。HTTP4.24.2.1什么是HTTP
先定一個小目標(biāo)!熟悉什么是HTTP,能夠說出HTTP的概念和特點4.2.1什么是HTTPHTTP:超文本傳輸協(xié)議(HyperTextTransferProtocol)由W3C組織推出,用于定義瀏覽器與Web服務(wù)器之間數(shù)據(jù)交換的格式。瀏覽器與Web服務(wù)器交互過程:4.2.1什么是HTTPHTTP在Web開發(fā)中占據(jù)重要位置的原因:簡單快速客戶端向服務(wù)器發(fā)送請求時,只需發(fā)送請求方式和路徑,HTTP服務(wù)器的程序規(guī)模小,通信速度快。無連接限制每次連接只處理一個請求,服務(wù)器處理完請求并收到應(yīng)答后,即斷開連接,節(jié)省傳輸時間。靈活HTTP允許傳輸任意類型的數(shù)據(jù),傳輸?shù)臄?shù)據(jù)類型由Content-Type標(biāo)記。無狀態(tài)協(xié)議對事物處理沒有記憶能力,如果后續(xù)處理需要前面的信息,必須重新傳遞,增加傳送數(shù)據(jù)量。4.2.2HTTP請求
先定一個小目標(biāo)!掌握HTTP請求,能夠說出HTTP請求的各個部分的含義4.2.2HTTP請求空行用來分隔請求頭和請求體。請求行位于請求消息的第一行,包括請求方式、請求資源路徑(URI)和HTTP版本。請求體通過POST方式提交表單時,瀏覽器會將用戶填寫的數(shù)據(jù)放在實體內(nèi)容中發(fā)送。數(shù)據(jù)格式是“name=value”,多個數(shù)據(jù)使用“&”連接。請求頭主要用于向服務(wù)器傳遞附加消息,例如,瀏覽器可以接收的數(shù)據(jù)類型、壓縮方法、語言和系統(tǒng)環(huán)境。HTTP請求消息:用戶在瀏覽器中訪問某個URL地址時,瀏覽器會向服務(wù)器發(fā)送請求。HTTP請求消息4.2.2HTTP請求HTTP請求方式請求方式說明HEAD通過發(fā)送HTTP請求從服務(wù)器獲取數(shù)據(jù)GET與HEAD一樣,但是GET是通過自身攜帶的數(shù)據(jù)來獲取服務(wù)器數(shù)據(jù)POST向指定資源提交數(shù)據(jù)進(jìn)行處理請求PUT向指定資源位置來提交數(shù)據(jù)DELETE通過指定數(shù)據(jù)來刪除服務(wù)器的數(shù)據(jù)OPTIONS獲取URL所支持的方式4.2.3查看請求信息
先定一個小目標(biāo)!熟悉如何查看請求信息,能夠利用Chrome瀏覽器開發(fā)者工具查看請求信息4.2.3查看請求信息借助工具查看請求信息:使用Chrome瀏覽器,按F12鍵打開開發(fā)者工具,切換到Network選項卡刷新網(wǎng)頁,就可以看到當(dāng)前網(wǎng)頁從第1個請求開始,依次發(fā)送的所有請求。以查看百度網(wǎng)站請求信息為例:4.2.3查看請求信息請求頭描述Accept客戶端瀏覽器支持的數(shù)據(jù)類型Accept-Charset客戶端瀏覽器采用的編碼Accept-Encoding客戶端瀏覽器支持的數(shù)據(jù)壓縮格式Accept-Language客戶端瀏覽器所支持的語言包,可以指定多個Host客戶端瀏覽器想要訪問的服務(wù)器主機(jī)If-Modified-Since客戶端瀏覽器對資源的最后緩存時間Referer客戶端瀏覽器指向的Web頁的URLUser-Agent客戶端的系統(tǒng)信息,包括使用的操作系統(tǒng)、瀏覽器版本號等Cookie客戶端向服務(wù)器發(fā)送請求時發(fā)送Cache-Control客戶端瀏覽器的緩存控制Connection請求完成后,客戶端希望是保持連接還是關(guān)閉連接常見的請求頭字段:4.2.4HTTP響應(yīng)
先定一個小目標(biāo)!掌握HTTP響應(yīng),能夠說出HTTP響應(yīng)的各個部分的含義4.2.4HTTP響應(yīng)HTTP響應(yīng)消息:服務(wù)器接收到請求數(shù)據(jù)后,將處理后的數(shù)據(jù)返回給客戶端。空行用來分隔響應(yīng)頭和響應(yīng)體。響應(yīng)行位于HTTP響應(yīng)消息的第一行,用于告知客戶端本次響應(yīng)的狀態(tài)。響應(yīng)體服務(wù)器給瀏覽器返回的數(shù)據(jù)。響應(yīng)頭告知瀏覽器本次響應(yīng)的基本信息,包括服務(wù)程序名,內(nèi)容的編碼格式、緩存控制等。HTTP響應(yīng)消息4.2.4HTTP響應(yīng)以百度網(wǎng)站為例,查看響應(yīng)信息:4.2.4HTTP響應(yīng)響應(yīng)狀態(tài)碼:服務(wù)器對客戶端請求的各種不同的處理結(jié)果和狀態(tài),由一個三位十進(jìn)制數(shù)表示。響應(yīng)狀態(tài)碼分類:1xx:成功接收請求,要求客戶端繼續(xù)提交下一次請求才能完成整個處理過程。2xx:成功接收請求并已完成整個處理過程。3xx:未完成請求,客戶端需要進(jìn)一步細(xì)化請求。4xx:客戶端的請求有錯誤。5xx:服務(wù)器端出現(xiàn)錯誤。常見響應(yīng)狀態(tài)碼:狀態(tài)碼含義說明200正??蛻舳说恼埱蟪晒?,響應(yīng)消息返回正常的請求結(jié)果403禁止服務(wù)器理解客戶端的請求,但是拒絕處理。通常由服務(wù)器上文件或目錄的權(quán)限設(shè)置導(dǎo)致404找不到服務(wù)器上不存在客戶端請求的資源500內(nèi)部服務(wù)器錯誤服務(wù)器內(nèi)部發(fā)生錯誤,無法處理客戶端的請求4.2.4HTTP響應(yīng)響應(yīng)頭含義Server服務(wù)器的類型和版本信息Date服務(wù)器的響應(yīng)時間Expires控制緩存的過期時間Location控制瀏覽器顯示哪個頁面Accept-Ranges服務(wù)器是否支持分段請求,以及請求范圍Cache-Control服務(wù)器控制瀏覽器如何進(jìn)行緩存Content-Disposition服務(wù)器控制瀏覽器以下載方式打開文件Content-Encoding實體內(nèi)容的編碼格式Content-Length實體內(nèi)容的長度Content-Language實體內(nèi)容的語言和國家名Content-Type實體內(nèi)容的類型和編碼類型Last-Modified請求文檔的最后一次修改時間Transfer-Encoding文件傳輸編碼Set-Cookie發(fā)送Cookie相關(guān)的信息Connection是否需要持久連接常見的響應(yīng)頭字段:4.2.5PHP設(shè)置響應(yīng)頭
先定一個小目標(biāo)!掌握如何設(shè)置響應(yīng)頭,能夠利用header()函數(shù)設(shè)置響應(yīng)頭4.2.5PHP設(shè)置響應(yīng)頭//設(shè)定編碼格式header('Content-Type:text/html;charset=UTF-8');//頁面重定向header('Location:login.php');//設(shè)定圖片格式header('Content-Type:image/png');設(shè)置響應(yīng)頭:通過header()函數(shù)設(shè)置。設(shè)置響應(yīng)頭代碼示例4.2.5PHP設(shè)置響應(yīng)頭多學(xué)一招:MIMEMIME:表示內(nèi)容的類型,表示方法為“大類別/具體類型”。類型含義text/plain普通文本(.txt)text/xmlXML文檔(.xml)text/htmlHTML文檔(.html)image/gifGIF圖像(.gif)image/pngPNG圖像(.png)image/jpegJPEG圖像(.jpg)4.3會話技術(shù)4.3.1Cookie簡介
先定一個小目標(biāo)!熟悉什么是Cookie,能夠說出Cookie的用途和傳輸過程4.3.1Cookie簡介Cookie在瀏覽器和服務(wù)器之間的傳輸過程:4.3.2Cookie的基本使用
先定一個小目標(biāo)!掌握Cookie的基本使用,能夠使用setcookie()函數(shù)創(chuàng)建或修改Cookie4.3.2Cookie的基本使用boolsetcookie( string$name, //Cookie的名稱(必須) string$value='', //Cookie的值(可選) int$expire=0, //Cookie的有效期(可選) string$path='', //Cookie在服務(wù)器端的路徑(可選) string$domain='', //Cookie的有效域名(可選) bool$secure=false, //指定是否通過安全的HTTPS連接來傳輸(可選) bool$httponly=false //指定Cookie只能通過HTTP協(xié)議訪問(可選))創(chuàng)建Cookie:使用setcookie()函數(shù)創(chuàng)建或修改Cookie。語法格式4.3.2Cookie的基本使用<?phpsetcookie('name','value');創(chuàng)建Cookie:使用setcookie()函數(shù)創(chuàng)建Cookie。查看響應(yīng)頭信息:瀏覽器訪問,查看響應(yīng)頭信息。HTTP中的Cookie信息:在開發(fā)者工具中切換到【Network】→【Cookie】。4.3.2Cookie的基本使用var_dump($_COOKIE);//輸出結(jié)果:array(2){["name"]=>string(5)"value"}讀取Cookie:使用超全局變量$_COOKIE讀取Cookie。讀取Cookie代碼示例注意:當(dāng)PHP第一次通過setcookie()函數(shù)創(chuàng)建Cookie時,$_COOKIE中沒有數(shù)據(jù),只有當(dāng)瀏覽器下次請求并攜帶Cookie時,才能通過$_COOKIE獲取到。4.3.2Cookie的基本使用//Cookie存儲復(fù)雜數(shù)據(jù)setcookie('user[name]','tom');setcookie('user[age]',30);//輸出結(jié)果:array{["user"]=>array{["name"]=>"tom"["age"]=>"30"}}var_dump($_COOKIE);Cookie存儲多個值:在Cookie名后添加“[]”進(jìn)行設(shè)置。Cookie存儲復(fù)雜數(shù)據(jù)代碼示例4.3.3Cookie的高級應(yīng)用
先定一個小目標(biāo)!掌握Cookie的高級應(yīng)用,能夠設(shè)置Cookie的過期時間、訪問路徑、有效域名4.3.3Cookie的高級應(yīng)用//第3個參數(shù)設(shè)置Cookie有效期setcookie('name','value',time()+1800);//30分鐘后過期setcookie('name','value',time()+60*60*24);//一天后過期setcookie('name','',time()-1); //立即過期(相當(dāng)于刪除Cookie)//第4個參數(shù)設(shè)置Cookie的訪問路徑setcookie('name','value',0,'/'); //當(dāng)前整個網(wǎng)站都可訪問//第5個參數(shù)設(shè)置Cookie的有效域名setcookie('name','value',0,'/','.com'); //所有.com的網(wǎng)站都可以訪問Cookie高級使用:通過第3個參數(shù)設(shè)置Cookie的生命周期,通過第4個參數(shù)設(shè)置Cookie的訪問路徑,通過第5個參數(shù)設(shè)置訪問網(wǎng)站。4.3.4Session簡介
先定一個小目標(biāo)!熟悉什么是Session,能夠說出Session的用途和實現(xiàn)原理4.3.4Session簡介Session存儲在服務(wù)器端,實現(xiàn)數(shù)據(jù)跨腳本共享的會話技術(shù),Session技術(shù)的實現(xiàn)依賴于Cookie技術(shù)。Session實現(xiàn)原理:4.3.5Session的基本使用
先定一個小目標(biāo)!掌握Session的基本使用,能夠?qū)崿F(xiàn)Session的開啟、添加數(shù)據(jù)、刪除數(shù)據(jù)等操作4.3.5Session的基本使用session_start(); //開啟Session$_SESSION['name']='tom'; //向Session添加數(shù)據(jù)(字符串)$_SESSION['id']=[1,2,3]; //向Session添加數(shù)據(jù)(數(shù)組)unset($_SESSION['name']); //刪除單個數(shù)據(jù)$_SESSION=[]; //刪除所有數(shù)據(jù)session_destory(); //結(jié)束當(dāng)前會話Session的使用代碼示例4.3.6Session的配置
先定一個小目標(biāo)!掌握Session的配置,能夠根據(jù)需求更改Session的配置4.3.6Session的配置配置項含義指定Cookie的名字,只能由字母和數(shù)字組成,默認(rèn)為PHPSESSIDsession.save_path讀取或設(shè)置當(dāng)前會話文件的保存路徑,默認(rèn)為“C:\Windows\Temp”session.auto_start指定是否在請求開始時自動啟動一個會話,默認(rèn)為0(不啟動)session.cookie_lifetime以秒數(shù)指定發(fā)送到瀏覽器的Cookie生命周期,默認(rèn)為0(直到關(guān)閉瀏覽器)session.cookie_path指定要設(shè)定會話Cookie的路徑,默認(rèn)為“/”session.cookie_domain指定要設(shè)定會話Cookie的域名,默認(rèn)為無session.cookie_secure指定是否僅通過安全連接發(fā)送Cookie,默認(rèn)為offsession.cookie_httponly指定是否僅通過HTTP訪問Cookie,默認(rèn)為offphp.ini中關(guān)于Session的配置項:4.3.6Session的配置通過session_start()函數(shù)配置Session:session_start(['name'=>'MySESSID']);注意:session_start()函數(shù)對配置項的修改只在PHP腳本的運行周期內(nèi)有效,不影響php.ini中的原有設(shè)置。4.4圖像處理4.4.1開啟GD擴(kuò)展
先定一個小目標(biāo)!掌握GD擴(kuò)展的開啟方法,能夠動手完成GD擴(kuò)展的開啟4.4.1開啟GD擴(kuò)展開啟GD擴(kuò)展:在PHP的配置文件php.ini,找到“;extension=gd2”,去掉分號“;”。extension=gd2查看開啟結(jié)果:重啟Apache使配置生效,通過phpinfo()函數(shù)查看GD庫是否開啟成功。4.4.2常用圖像處理函數(shù)
先定一個小目標(biāo)!掌握常用圖像處理函數(shù)的使用,能夠?qū)崿F(xiàn)圖像的處理4.4.2常用圖像處理函數(shù)函數(shù)作用imagecreatetruecolor()創(chuàng)建指定寬高的真彩色空白畫布圖像imagecolorallocate()為畫布分配顏色imagefill()為畫布填充顏色imagestring()將字符串寫入到畫布中imagettftext()將文本寫入到畫布中imageline()在畫布中繪制直線imagecreatefromjpeg()創(chuàng)建JPEG格式的圖像(1/2)4.4.2常用圖像處理函數(shù)函數(shù)作用imagecreatefrompng()創(chuàng)建PNG格式的圖像imagecopymerge()合并兩個圖片imagecopyresampled()復(fù)制一部分圖像到目標(biāo)圖像中imagepng()輸出PNG格式的圖像imagejpeg()輸出JPEG格式的圖像imagedestory()銷毀圖像getimagesize()獲取圖像的大?。?/2)4.4.3【案例】制作驗證碼
先定一個小目標(biāo)!掌握制作驗證碼案例的實現(xiàn),能夠動手完成驗證碼功能的代碼編寫4.4.3【案例】制作驗證碼需求分析在有數(shù)據(jù)輸入的功能開發(fā)中,如果惡意向服務(wù)器提交數(shù)據(jù),那么網(wǎng)站會產(chǎn)生大量的臟數(shù)據(jù),使用驗證碼成為一種防御手段。通過圖像處理函數(shù)實現(xiàn)制作驗證碼的功能。4.4.4【案例】生成水印圖片
先定一個小目標(biāo)!掌握生成水印圖片案例的實現(xiàn),能夠動手完成生成水印圖片功能的代碼編寫4.4.4【案例】生成水印圖片需求分析在項目開發(fā)時,考慮到網(wǎng)站中所上傳的圖片不被他人盜用,對用戶上傳的圖片進(jìn)行添加水印標(biāo)記的處理,根據(jù)原圖的路徑,找到圖片資源,完成添加水印的功能。4.4.5【案例】制作縮略圖
先定一個小目標(biāo)!掌握制作縮略圖案例的實現(xiàn),能夠動手完成生成縮略圖功能的代碼編寫4.4.5【案例】制作縮略圖需求分析在項目開發(fā)中,為了解決用戶上傳圖片大小不一的問題,需要對用戶上傳的圖片進(jìn)行相應(yīng)的處理,可以讓其在指定大小的地方顯示。制作縮略圖,是將原圖放到一個固定大小的圖片資源里,形成一張新的圖片,稱之為縮略圖。通過圖像處理函數(shù)實現(xiàn)制作縮略圖的功能。4.5目錄和文件操作4.5.1目錄操作
先定一個小目標(biāo)!掌握目錄操作,能夠?qū)崿F(xiàn)目錄的創(chuàng)建、刪除、重命名以及讀取操作4.5.1目錄操作boolmkdir(string$pathname[,int$mode=0777[,bool$recursive=false[,resource$context]]])使用mkdir()函數(shù)創(chuàng)建目錄,該函數(shù)執(zhí)行成功返回true,失敗返回false。創(chuàng)建目錄語法格式$pathname表示要創(chuàng)建的目錄地址,地址的格式可以是絕對路徑也可以是相對路徑;$mode指定目錄的訪問權(quán)限(用于Linux環(huán)境),默認(rèn)為0777;$recursive指定是否遞歸創(chuàng)建目錄,默認(rèn)為false。4.5.1目錄操作mkdir('upload');使用mkdir()函數(shù)創(chuàng)建目錄,該函數(shù)執(zhí)行成功返回true,失敗返回false。mkdir()函數(shù)使用示例創(chuàng)建目錄4.5.1目錄操作使用rmdir()函數(shù)刪除目錄,該函數(shù)執(zhí)行成功返回true,失敗返回false。刪除目錄boolrmdir(string$dirname[,resource$context])語法格式使用示例rmdir('upload');注意:刪除的目錄不存在,會刪除失敗,并提示W(wǎng)arning錯誤。刪除非空目錄時,同樣也會刪除失敗并提示W(wǎng)arning錯誤,只有先清空里面的文件,才能夠刪除目錄。4.5.1目錄操作使用rename()函數(shù)實現(xiàn)目錄或文件的重命名,該函數(shù)執(zhí)行成功返回true,失敗返回false。重命名目錄boolrename(string$oldname,string$newname[,resource$context])語法格式$oldname表示要重命名的目錄$newname表示新的目錄名稱4.5.1目錄操作mkdir('upload');rename('upload','uploads');使用rename()函數(shù)實現(xiàn)目錄或文件的重命名,該函數(shù)執(zhí)行成功返回true,失敗返回false。重命名目錄rename()函數(shù)使用示例4.5.1目錄操作讀取目錄兩種方式:一種是使用scandir()函數(shù)獲取目錄下的所有文件名;另外一種方式是使用opendir()函數(shù)獲取資源,然后使用readdir()函數(shù)進(jìn)行訪問。讀取目錄boolscandir(string$directory[,int$order,resource$context])scandir()函數(shù)語法格式$directory表示要查看的目錄$order規(guī)定排列排序,默認(rèn)是0,表示按字母升序排列4.5.1目錄操作$dir_info=scandir('./');foreach($dir_infoas$file){ echo$file.'<br>';}使用scandir()函數(shù)查看當(dāng)前目錄下的所有內(nèi)容:讀取目錄scandir()函數(shù)使用示例4.5.1目錄操作opendir()函數(shù)用于打開一個目錄句柄,readdir()函數(shù)從目錄句柄中讀取條目。讀取目錄resourceopendir(string$path[,resource$context])opendir()函數(shù)語法格式$path表示要打開的目錄路徑,函數(shù)執(zhí)行成功返回目錄句柄的resource,失敗返回falseresourcereaddir([resource$dir_handle])readdir()函數(shù)語法格式$dir_handle表示已經(jīng)打開的目錄句柄資源,函數(shù)執(zhí)行成功返回文件名稱,失敗返回false4.5.1目錄操作$resource=opendir('./');$file='';while($file=readdir($resource)){echo$file.'<br>';}closedir($resource);使用opendir()函數(shù)和readdir()函數(shù)讀取目錄中的內(nèi)容:讀取目錄opendir()函數(shù)和readdir()函數(shù)使用示例4.5.1目錄操作函數(shù)作用boolis_dir(string$filename)判斷給定的文件名是否是一個目錄getcwd()若成功會返回當(dāng)前目錄,失敗則返回falserewinddir(resource
$dir_handle
)將打開的資源指針重置到目錄的開頭boolchdir(string
$directory)改變當(dāng)前的目錄,若成功會返回true,失敗則返回false路徑的有效性:為了保證代碼的嚴(yán)謹(jǐn)性,通常會使用系統(tǒng)函數(shù)來判斷,常用判斷函數(shù):4.5.2文件操作
先定一個小目標(biāo)!掌握文件操作,能夠?qū)崿F(xiàn)文件的打開、刪除、修改、重命名以及讀取操作4.5.2文件操作resourcefopen(string$filename,string$mode[,bool$use_include_path=false[,resource$context]])fopen()函數(shù):打開文件,該函數(shù)執(zhí)行成功后,返回資源類型的文件指針,用于其他操作。打開文件fopen()函數(shù)語法格式$filename表示打開的文件路徑,可以是本地文件,也可以是HTTP或FTP協(xié)議的URL地址;$mode表示文件打開的模式。4.5.2文件操作模式說明r只讀方式打開,將文件指針指向文件頭r+讀寫方式打開,將文件指針指向文件頭w寫入方式打開,將文件指針指向文件頭并將文件大小截為0w+讀寫方式打開,將文件指針指向文件頭并將文件大小截為0a寫入方式打開,將文件指針指向末尾a+讀寫方式打開,將文件指針指向末尾x創(chuàng)建并以寫入方式打開,將文件指針指向文件頭。如果文件已存在,則fopen()調(diào)用失敗,返回false,并生成E_WARNING級別的錯誤信息x+創(chuàng)建并以讀寫方式打開,其他行為和“x”相同fopen()函數(shù)常用的文件打開模式:打開文件4.5.2文件操作使用fopen()函數(shù)打開文件://只讀方式打開,不會創(chuàng)建文件,文件不存在會提示W(wǎng)arning信息$f1=fopen('test1.html','r');$f2=fopen('test2.html','w');//寫入方式打開,文件不存在自動創(chuàng)建fclose($f1);fclose($f2);fopen()函數(shù)使用示例打開文件4.5.2文件操作刪除文件unlink()函數(shù):刪除文件,該函數(shù)執(zhí)行成功后成功返回值為true,失敗返回false。boolunlink(string$filename[,resource$context])unlink()函數(shù)語法格式4.5.2文件操作使用unlink()函數(shù)刪除文件。unlink('./test2.html');unlink()函數(shù)使用示例刪除文件4.5.2文件操作修改文件fwrite()函數(shù):修改文件內(nèi)容。intfwrite(resource$handle,string$string[,int$length])fwrite()函數(shù)語法格式$handle表示文件指針$string表示要寫入的字符串$length表示指定寫入的字節(jié)數(shù),如果省略,表示寫入整個字符串。4.5.2文件操作使用fwrite()函數(shù)修改文件內(nèi)容。$f3=fopen('test3.html','w');fwrite($f3,'<html><body>Helloworld<body></html>');fclose($f3);fwrite()函數(shù)使用示例修改文件4.5.2文件操作重命名文件rename()函數(shù):實現(xiàn)文件重命名。提示:rename()函數(shù)的使用在目錄操作章節(jié)已經(jīng)講解,見P52~P53。4.5.2文件操作讀取文件fread()函數(shù):讀取文件內(nèi)容,返回讀取到的內(nèi)容,讀取失敗返回false。stringfread(resource$handle,int$length)fread()函數(shù)語法格式$handle表示文件指針$length指定讀取的字節(jié)數(shù)4.5.2文件操作使用fread()函數(shù)讀取文件內(nèi)容。$filename='test3.html';$f3=fopen($filename,'r');$data=fread($f3,filesize($filename));echo$data;//輸出內(nèi)容:<html><body>Helloworld<body></html>fclose($f3);fread()函數(shù)使用示例計算文件大小讀取文件4.5.2文件操作file_get_contents()和file_put_contents()函數(shù)file_get_contents()函數(shù):將文件的內(nèi)容全部讀取到一個字符串中。stringfile_get_contents(string$filename[,bool$use_include_path=false[,resource$context[,int$offset=0[,int$maxlen]]]])file_get_contents()函數(shù)語法格式$filename指定要讀取的文件路徑4.5.2文件操作file_put_contents()函數(shù):寫入內(nèi)容,成功返回寫入到文件內(nèi)數(shù)據(jù)的字節(jié)數(shù),失敗返回false。intfile_put_contents(string$filename,mix$data[,int$flags=0[,resource$context]])file_put_contents()函數(shù)語法格式$filename指定要寫入的文件路徑;$data指定要寫入的內(nèi)容;$flags指定寫入選項,使用常量FILE_APPEND表示追加寫入。file_get_contents()和file_put_contents()函數(shù)4.5.2文件操作$filename='test3.html';$content=file_get_contents($filename);echo$content;//輸出內(nèi)容:<html><body>Helloworld<body></html>//文件內(nèi)容不會改變,覆蓋原文件內(nèi)容$str='<html><body>Helloworld<body></html>';file_put_contents($filename,$str);//追加內(nèi)容file_put_contents($filename,$str,FILE_APPEND);函數(shù)使用示例file_get_contents()和file_put_contents()函數(shù)4.5.3【案例】遞歸遍歷目錄
先定一個小目標(biāo)!掌握遞歸遍歷目錄案例,能夠編寫代碼完成目錄的遞歸遍歷4.5.3【案例】遞歸遍歷目錄需求分析遞歸:指一個函數(shù)在其函數(shù)體內(nèi)調(diào)用自身的過程,這種函數(shù)稱為遞歸函數(shù)。遞歸需要有遞歸點和遞歸出口。遞歸點:當(dāng)需要解決的問題與當(dāng)前函數(shù)解決的問題相同時,進(jìn)行遞歸調(diào)用。遞歸出口:當(dāng)沒有再需要解決的問題時,結(jié)束遞歸。
以遍歷目錄下的所有文件為例,獲取根目錄的文件列表后,從列表中找到目錄的地址,根據(jù)該地址再次調(diào)用函數(shù),獲取子目錄下的文件。4.6表單傳值4.6.1表單傳值方式
先定一個小目標(biāo)!熟悉表單傳值方式,能夠利用GET方式和POST方式進(jìn)行表單傳值4.6.1表單傳值方式<formaction="表單提交地址"method="post">
<!--表單內(nèi)容--></form>GET方式POST方式使用GET方式提交表單,表單數(shù)據(jù)會加入到URL中如:http://localhost/index.php?id=1&type=2表單傳值:實現(xiàn)動態(tài)網(wǎng)站非常重要的一步,不僅能夠?qū)崿F(xiàn)用戶的數(shù)據(jù)提交,還能幫助用戶實現(xiàn)動態(tài)數(shù)據(jù)定制。表單傳值示例代碼使用POST方式提交表單,可以根據(jù)用戶指定的編碼方式提交數(shù)據(jù),保證數(shù)據(jù)的安全性4.6.2接收表單數(shù)據(jù)
先定一個小目標(biāo)!熟悉表單數(shù)據(jù)的接收,能夠利用超全局變量接收表單數(shù)據(jù)4.6.2接收表單數(shù)據(jù)變量名說明$_GET接收GET方式提交的數(shù)據(jù)$_POST接收POST方式提交的數(shù)據(jù)$_REQUEST接收GET和POST方式提交的數(shù)據(jù)接收表單數(shù)據(jù):在服務(wù)端使用超全局變量接收表單數(shù)據(jù)。4.6.3表單提交數(shù)組值
先定一個小目標(biāo)!熟悉如何使用表單提交數(shù)組值,能夠?qū)崿F(xiàn)表單中的復(fù)選框數(shù)據(jù)的提交和接收4.6.3表單提交數(shù)組值<formaction="表單提交地址"method="post">
<inputtype="checkbox"name="hobby[]"value="basketball"/>籃球
<inputtype="checkbox"name="hobby[]"value="football"/>足球
<inputtype="checkbox"name="hobby[]"value="vollyball"/>排球
<inputtype="submit"value="提交"></form>表單提交數(shù)組:將表單相同元素的name設(shè)置成數(shù)組的形式即可,表單將會以數(shù)組的形式提交。設(shè)置表單示例代碼4.6.3表單提交數(shù)組值var_dump($_POST);//輸出結(jié)果array(1){
["hobby"]=>array(2){
[0]=>string(10)"basketball"
[1]=>string(8)"football"
}}接收表單提交的數(shù)組數(shù)據(jù):當(dāng)選擇“籃球”和“足球”兩個選項時,接收并輸出復(fù)選框的值。接收表單示例代碼4.6.4單文件上傳
先定一個小目標(biāo)!掌握單文件的上傳,能夠編寫代碼完成單文件的上傳4.6.4單文件上傳<formaction="表單提交地址"method="post"enctype="multipart/form-data">
<inputtype="file"name="file"/>
<inputtype="submit"value="上傳"/></form>單文件上傳:設(shè)置表單的enctype屬性指定表單數(shù)據(jù)的編碼方式,將其設(shè)為multipart/form-data。示例代碼4.6.4單文件上傳接收上傳文件的信息:使用超全局變量$_FILES來獲取。0102030405tmp_mame:文件被上傳后存儲在服務(wù)器端的臨時路徑。上傳的臨時目錄可以在php.ini的upload_tmp_dir中指定error:文件上傳相關(guān)的錯誤代碼name:客戶端文件的原名稱type:文件的MIME類型,需要瀏覽器提供該信息的支持,如“image/gif”size:上傳文件的大小,單位為字節(jié)$_FILES數(shù)組4.6.4單文件上傳代碼常量說明0UPLOAD_ERR_OK沒有錯誤發(fā)生,文件上傳成功1UPLOAD_ERR_INI_SIZE上傳的文件超過了php.ini中upload_max_filesize選項限制的值2UPLOAD_ERR_FORM_SIZE上傳文件的大小超過了HTML表單中MAX_FILE_SIZE選項指定的值3UPLOAD_ERR_PARTIAL只有部分文件被上傳4UPLOAD_ERR_NO_FILE沒有文件被上傳6UPLOAD_ERR_NO_TMP_DIR找不到臨時目錄7UPLOAD_ERR_CANT_WRITE文件寫入失敗文件上傳錯誤代碼:4.6.4單文件上傳將臨時文件保存到指定的目標(biāo)文件地址:使用move_uploaded_file()函數(shù)保存文件。if(isset($_FILES['upload'])){
if($_FILES['upload']['error']!==UPLOAD_ERR_OK){
exit('上傳失敗!');
}
$save='./uploads/'.time().'.dat';
if(!move_uploaded_file($_FILES['upload']['tmp_name'],$save)){
exit('上傳失敗,無法將文件保存到指定位置!');
}
echo"上傳成功!";}示例代碼自動生成文件名4.6.5多文件上傳
先定一個小目標(biāo)!掌握多文件的上傳,能夠編寫代碼完
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度香菇采摘與農(nóng)家樂合作合同3篇
- 2025年度安徽省鄉(xiāng)村振興戰(zhàn)略實施合作協(xié)議3篇
- 寶寶吐奶的預(yù)防和護(hù)理
- 婦幼保潔培訓(xùn)課件
- 二零二五年度EPS線條工程專供采購協(xié)議3篇
- 2025年度建筑用復(fù)合材料代購及檢測合同3篇
- 2024男方過錯離婚協(xié)議書下載下載流程詳解6篇
- 2024生豬養(yǎng)殖與飼料生產(chǎn)聯(lián)合體合作協(xié)議3篇
- 2024邴雅薛含共有財產(chǎn)劃分書3篇
- 二零二五年有機(jī)果樹種植項目承包管理合同3篇
- 領(lǐng)導(dǎo)干部有效授權(quán)的技巧與藝術(shù)課件
- DB37-T 1915-2020 安全生產(chǎn)培訓(xùn)質(zhì)量控制規(guī)范-(高清版)
- 陜西省商洛市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會明細(xì)
- 幼兒園“值日生”工作開展論文
- 實習(xí)生請假條
- 光伏電站繼電保護(hù)運行規(guī)程
- 承兌匯票臺帳模版
- 地下管道頂管施工方案(非常全)
- 有色金屬工業(yè)安裝工程質(zhì)量檢驗評定標(biāo)準(zhǔn)(共1004頁)
- 資料員崗位培訓(xùn)ppt課件(PPT 36頁)
- 組織架構(gòu)圖可編輯
評論
0/150
提交評論