2.取得並更改目前目錄 使用getcwd()函數可以取得目前的工作目錄,該函數沒有參數。成功則傳回目前的工作目錄,失敗則回傳FALSE 3.開啟和關閉目錄句柄 opendir($dir) closed($dir_handle) 4.讀取目錄內容 readdir(),此參數是一個已經開啟的目錄句柄,與while循環可以實現對目錄的遍歷 5.取得指定路徑中的目錄與檔案 。 array scandir(string $directory [, int $sorting_order [, resource $context ]]) 說明:$directory為指定路徑。參數$sorting_order預設是按字母升序排列,如果設為1表示按字母的降序排列。 $context是可選參數,是一個資源變量,可以用stream_context_create()函數生成,這個變數保存著一些與特定的操作對象相關的資料。 函數運行成功則傳回一個包含指定路徑下的所有目錄和檔案名稱的數組,失敗則傳回FALSE 2.操作文件的一般方法 3.文件的開啟與關閉 1.開啟文件 resource fopen(string $filename , string $mode [, bool $use_include_path [, resource $context ]]) ●$filename參數。 fopen()函數將$filename參數指定的名字資源綁定到一個流上 ●$mode參數。 $mode參數指定了fopen()函數存取檔案的模式,取值請參考表4.5。 $mode 說 明 'r' 只讀方式開啟文件,從文件頭開始讀 'r ' 讀寫方式開啟文件,從文件頭開始讀寫 'w' 寫入方式開啟文件,將文件指標指向文件頭。如果檔案已經存在則刪除已有內容,如果檔案不存在則嘗試建立它 'w ' 讀寫方式開啟文件,將文件指標指向文件頭。如果檔案已經存在則刪除已有內容,如果檔案不存在則嘗試建立它 'a' 寫入方式開啟文件,將文件指標指向文件末尾,如果文件已有內容將從文件末尾開始寫入。如果文件不存在則嘗試建立它 'a ' 讀寫方式開啟文件,將文件指標指向文件末端。如果文件已有內容將從文件結尾開始讀寫。如果文件不存在則嘗試建立它 'x' 建立並以寫入方式開啟文件,將文件指標指向文件頭。如果檔案已存在,則fopen()呼叫失敗並傳回FALSE,並產生一條E_WARNING層級的錯誤訊息。如果文件不存在則嘗試建立它。此選項由PH及以後的版本所支持,僅能用於本地文件 'x ' 建立並以讀寫方式開啟文件,將文件指標指向文件頭。如果檔案已存在,則fopen()呼叫失敗並傳回FALSE,並產生一條E_WARNING層級的錯誤訊息。如果文件不存在則嘗試建立它。此選項由PH及以後的版本所支持,僅能用於本地文件 'b' 二進位模式,用於連接在其他模式後面。如果檔案系統能夠區分二進位檔案和文字檔案(Windows區分,而UNIX不區分),則需要使用到這個選項,建議一直使用這個選項以便獲得最大程度的可移植性 ●$use_include_path參數。如果需要在include_path(PHP的include路徑,在PHP的設定檔設定)中搜尋文件, 可選參數 $use_include_path的值可設為1或TRUE,預設為FALSE。 ●$context參數。可選的$context參數只有檔案遠端開啟時(如透過HTTP開啟)才使用,它是一個資源變量, 其中保存著與fopen()函數具體的操作對像有關的一些資料。如果fopen()開啟的是一個HTTP位址, 那麼這個變數記錄著HTTP請求的請求類型、HTTP版本及其他頭資訊;如果開啟的是FTP位址, 記錄的可能是FTP的被動/主動模式 2.關閉文件 bool fclose(resource $handle) 4.文件的寫入 文件寫入前需開啟文件,不存在先創建它,一般用fopen()函數創建 ●fwrite().檔案開啟後,寫入內容 int fwrite(resource $handle , string $string [, int $length ]) 說明:參數$handle是寫入的檔案句柄, $string是將要寫入檔案中的字串數據, $length是可選參數,如果指定了$length,則當寫入了$string中的前$length個位元組的資料後停止寫入。 ●file_put_contents()函數。 PHP 5也引進了file_put_contents()函數。這個函數的功能與依序呼叫fopen()、fwrite()、fclose()函數的函數一樣。文法格式如下: int file_put_contents(string $filename , string $data [, int $flags [, resource $context ]]) 說明:$filename是要寫入資料的檔案名稱。 $data是要寫入的字串,$data也可以是數組,但不能為多維數組。 在使用FTP或HTTP向遠端檔案寫入資料時,可以使用可選參數$flags和$context,這裡不具體介紹。 寫入成功後函數會傳回寫入的位元組數,否則傳回FALSE。 ●fputcsv()函數。 CSV是比較常用的檔案格式,一般以.csv作為副檔名。 CSV格式把文件的一行看做是一筆記錄,記錄裡的欄位使用逗號分隔。 在PHP中使用 fputcsv()函數可以把指定的陣列格式化為符合CSV檔案格式的內容,並寫入檔案指標所指向的目前行。文法格式如下: int fputcsv(resource $handle [, array $fields [, string $delimiter [, string $enclosure ]]]) 說明:參數$handle是要寫入的檔案句柄。 參數$fields是要格式化的陣列。 可選的$delimiter參數用於設定字段分界符(只允許一個字元),預設為逗號。 可選的$enclosure參數設定欄位環繞符(只允許一個字元),預設為雙引號 5 檔案的讀取 1.讀取任意長度 fread()函數可以用來讀取文件的內容,語法格式如下: string fread(int $handle, int $length) 說明:參數$handle是已經開啟的檔案指針, $length是指定讀取的最大位元組數,$length的最大取值為8192。 如果讀完$length個位元組數之前遇到檔案結尾標誌(EOF),則傳回所讀取的字符,並停止讀取操作。 如果讀取成功則傳回所讀取的字串,如果出錯回傳FALSE。 注意:在讀取文件後顯示文件內容時,文字中可能含有無法直接顯示的字符,如HTML標記。 這時需要使用htmlspecialchars()函數將HTML標記轉換為實體才能顯示檔案中的字元。 2.讀取整份文件 ●file()函數。 file()函數用於將整個檔案讀取到一個陣列中,語法格式如下: array file(string $filename [, int $use_include_path [, resource $context ]]) 說明:本函數的作用是將文件作為一個數組返回,數組中的每個單元都是文件中相應的一行,包括換行符在內, 如果失敗則回傳FALSE。參數$filename是讀取的檔案名,參數$use_inclue_path和$context的意義與先前介紹的相同 ●readfile()函數。 readfile()函數用來輸出一個檔案的內容到瀏覽器中,語法格式如下: int readfile(string $filename [, bool $use_include_path [, resource $context ]]) ●fpassthru()函數。 fpassthru()函數可以將給定的檔案指標從目前的位置讀取到EOF,並且把結果寫到輸出緩衝區。 要使用這個函數,必須先使用fopen()函數開啟文件,然後將文件指標當作參數傳遞給fpassthru()函數, fpassthru()函數把文件指標所指向的文件內容傳送到標準輸出。如果操作成功傳回讀取到的位元組數,否則回傳FALSE。 ●file_get_contents()函數。 file_get_contents()函數可以將整個或部分檔案內容讀取到一個字串中, 函數與依序呼叫fopen()、fread()及fclose()函數的函數一樣。文法格式如下: string file_get_contents(string $filename [, int $offset [, int $maxlen ]]) 說明:$filename是要讀取的檔案名,可選參數$offset可以指定從檔案頭開始的偏移量, 函數可以傳回從$offset所指定的位置開始長度為$maxlen的內容。如果失敗,函數將傳回FALSE 3. 讀取一行數據 ●fgets()函數。 fgets()函數可以從文件中讀出一行文本,語法格式如下: string fgets(int $handle [, int $length ]) 說明:$handle是已經開啟的檔案句柄,可選參數$length指定了傳回的最大位元組數,考慮到行結束符, 最多可以傳回length-1個位元組的字串。如果沒有指定$length,預設為1024個位元組 ●fgetss()函數與fgets()基本上相同,不過fgetss()函數會嘗試從讀取的文字中去掉任何html和php標記。 ●fgetcsv()函數。 fgetcsv()函數可以讀取指定檔案的目前行,使用CSV格式解析出字段,並傳回一個包含這些字段的數組。 文法格式如下: array fgetcsv(int $handle [, int $length [, string $delimiter [, string $enclosure ]]]) 4. 讀取一個字符 fgetc()函數。 fgetc()函數可以從檔案指針讀取一個字符,語法格式為: string fgetc(resource $handle) 此函數傳回$handle指標所指向的檔案中的一個字符,遇到EOF則傳回FALSE 5. 使用指定格式讀取文件 fscanf()函數。 fscanf()函數可以讀取檔案中的數據,並根據指定的格式進行格式化,並傳回一個陣列。文法格式如下: mixed fscanf(resource $handle , string $format [, mixed &$... ]) 格式字串中的任何空白都會與輸入流中的任何空白相符。 這意味著甚至格式字串中的製表符“t”也會與輸入流中的一個空格字元相符。 6.檔案的上傳與下載 1.文件上傳 文件上傳可以透過提交html表單來實現。檔案上傳結束後,預設儲存在臨時目錄中,這時必須從臨時目錄中刪除或移動到其他地方 使用PHP的move_uploaded_file()將其移到其它位置上 move_uploaded_file()函數語法格式如下: bool move_uploaded_file(string $filename , string $destination) 注意:在將文件移動之前需要檢查文件是否是透過HTTP POST上傳的,這可以用來確保惡意的用戶無法欺騙腳本去訪問本不能訪問的文件, 這時需要使用is_uploaded_file()函數。此函數的參數為檔案的暫存檔案名,若檔案是透過HTTP POST上傳的,則函數傳回TRUE。 範例4.5 將由HTML表單上傳的GIF圖片檔案移到html目錄中
2.文件下載 header()函數的功能是向瀏覽器發送正確的HTTP標頭,標頭指定了網頁內容的類型、頁面的屬性等資訊。 header()函數的功能很多,這裡只列出以下幾點: ●頁面跳轉。如果header()函數的參數為“Location: xxx”,頁面就會自動跳到「xxx」所指向的URL位址。例如: header("Location: http://www.baidu.com"); //跳到百度頁面 header("Location: first.php"); //跳到工作目錄的first.php頁面 ●指定網頁內容。例如,同樣的一個XML格式的文件,如果header()函數的參數指定為“Content-type: application/xml”, 瀏覽器會將其依照XML檔案格式來解析。但如果是“Content-type: text/xml”,瀏覽器就會將其視為文字解析。 header()函數結合readfile()函數可以下載將要瀏覽的檔案 7.其他常用檔案函數 1.計算檔案大小 filesize()函數用來計算檔案的大小,以位元組為單位 filesize()函數結合fread()函數可以實作一次讀取整個檔案 2.判斷文件是否存在 file_exits() is_dir()函數用來判斷給定檔名是否為目錄 is_file()函數用來判斷給定檔案名稱是否為檔案。 is_readable()函數用於判斷給定檔案是否可讀。 is_writeable()用來判斷給定的檔案是否可寫 3.刪除文件 unlink() 4.複製文件 bool copy(string $source,string $dest),如果目示檔案已存在,則將被覆蓋 5.移動、重新命名文件 除了move_uploaded_file()函數,還有一個rename()函數也可以移動檔案。 文法格式如下: bool rename ( string $oldname , string $newname [, resource $context ] ) 說明:rename()函數主要用於對一個檔案進行重新命名,$oldname是檔案的舊名,$newname為新的檔案名稱。 當然,如果$oldname與$newname的路徑不相同,就實作了移動該檔案的功能 6.文件指標操作 PHP中有很多操作檔案指標的函數,如rewind()、ftell()、fseek()函數等。先前使用過的feof()函數用來測試檔案指標是否處於檔案尾部, 也屬於檔案指標操作函數。 rewind()函數。用於重置檔案的指標位置,使指標返回到檔案頭。它的參數只有一個,就是已經開啟的指定檔案的檔案句柄。 ftell()函數。可以以位元組為單位,報告檔案中指標的位置,也就是檔案流中的偏移量。它的參數也是已經開啟的檔案句柄。 fseek()函數。可用於移動文件指針,語法格式如下: int fseek ( resource $handle , int $offset [, int $whence ] ) 例4.8 投票統計
|

PHPSession失效的原因包括配置錯誤、Cookie問題和Session過期。 1.配置錯誤:檢查並設置正確的session.save_path。 2.Cookie問題:確保Cookie設置正確。 3.Session過期:調整session.gc_maxlifetime值以延長會話時間。

在PHP中調試會話問題的方法包括:1.檢查會話是否正確啟動;2.驗證會話ID的傳遞;3.檢查會話數據的存儲和讀取;4.查看服務器配置。通過輸出會話ID和數據、查看會話文件內容等方法,可以有效診斷和解決會話相關的問題。

多次調用session_start()會導致警告信息和可能的數據覆蓋。 1)PHP會發出警告,提示session已啟動。 2)可能導致session數據意外覆蓋。 3)使用session_status()檢查session狀態,避免重複調用。

在PHP中配置會話生命週期可以通過設置session.gc_maxlifetime和session.cookie_lifetime來實現。 1)session.gc_maxlifetime控制服務器端會話數據的存活時間,2)session.cookie_lifetime控制客戶端cookie的生命週期,設置為0時cookie在瀏覽器關閉時過期。

使用數據庫存儲會話的主要優勢包括持久性、可擴展性和安全性。 1.持久性:即使服務器重啟,會話數據也能保持不變。 2.可擴展性:適用於分佈式系統,確保會話數據在多服務器間同步。 3.安全性:數據庫提供加密存儲,保護敏感信息。

在PHP中實現自定義會話處理可以通過實現SessionHandlerInterface接口來完成。具體步驟包括:1)創建實現SessionHandlerInterface的類,如CustomSessionHandler;2)重寫接口中的方法(如open,close,read,write,destroy,gc)來定義會話數據的生命週期和存儲方式;3)在PHP腳本中註冊自定義會話處理器並啟動會話。這樣可以將數據存儲在MySQL、Redis等介質中,提升性能、安全性和可擴展性。

SessionID是網絡應用程序中用來跟踪用戶會話狀態的機制。 1.它是一個隨機生成的字符串,用於在用戶與服務器之間的多次交互中保持用戶的身份信息。 2.服務器生成並通過cookie或URL參數發送給客戶端,幫助在用戶的多次請求中識別和關聯這些請求。 3.生成通常使用隨機算法保證唯一性和不可預測性。 4.在實際開發中,可以使用內存數據庫如Redis來存儲session數據,提升性能和安全性。

在無狀態環境如API中管理會話可以通過使用JWT或cookies來實現。 1.JWT適合無狀態和可擴展性,但大數據時體積大。 2.Cookies更傳統且易實現,但需謹慎配置以確保安全性。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3 Linux新版
SublimeText3 Linux最新版

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。