PHP 提供了三種原生函數用於本地文件操作:file()
、file_get_contents()
和 fopen()
。雖然圍繞這些函數構建了完整的庫,但它們仍然是快速操作 PHP 文件的首選方法。
我們將首先了解這些函數的功能,然後查看它們的工作示例。
file()
和 file_get_contents()
file()
和 file_get_contents()
的工作方式非常相似。它們都讀取整個文件。但是,file()
將文件讀取到數組中,而 file_get_contents()
將文件讀取到字符串中。這兩個函數都是二進制安全的,這意味著它們可以用於任何類型的文件內容。
使用 file()
時要格外小心,因為它返回的數組將以換行符分隔,但每個元素仍然會附加終止換行符。
fopen()
fopen()
函數的工作方式完全不同。它將打開一個文件描述符,該描述符充當讀取或寫入文件的流。
PHP 手冊是這樣解釋的:
最簡單的形式,流是一個表現出可流行為的資源對象。也就是說,可以以線性方式從中讀取或寫入,並且可能能夠使用
fseek()
跳轉到流中的任意位置。
簡單來說,調用 fopen()
不會做任何事情,只會打開一個流。
打開流並擁有文件句柄後,可以使用 fread()
和 fwrite()
等其他函數來操作文件。完成後,可以使用 fclose()
關閉流。
查看以下示例:
<?php $filepath = "/usr/local/sitepoint.txt"; $handle = fopen($filename, "r"); $contents = fread($handle, filesize($filename)); fclose($handle);
上述函數將為您提供對文件的更精細控制,但它們的級別遠低於 file()
或 file_get_contents()
函數,正如 PHP 文檔中所述,後者更可取:
file_get_contents()
是將文件內容讀取到字符串的首選方法。如果您的操作系統支持,它將使用內存交換技術來提高性能。
file_get_contents()
使用起來相當簡單:
<?php $file_contents = file_get_contents('./file.txt');
這會將 file.txt
的內容讀取到 $file_contents
中。
如果我們只需要文件的一部分,我們可以這樣做:
<?php $file_contents = file_get_contents('./file.txt', FALSE, NULL, 20, 14);
這將讀取 file.txt
從第 20 個字符開始的 14 個字符。有關 file_get_contents()
所有參數的更多信息,請參閱官方文檔。
file_get_contents()
和 fopen()
在 PHP 中有什麼區別? file_get_contents()
和 fopen()
都用於在 PHP 中讀取文件,但它們的工作方式略有不同。 file_get_contents()
將文件讀取到字符串中,將整個文件作為單個字符串返回。此函數簡單易用,但不適用於大型文件,因為它可能會消耗大量內存。另一方面,fopen()
打開文件或 URL 並返回一個資源,該資源可與其他與文件相關的函數(例如 fgets()
或 fwrite()
)一起使用。此函數對於大型文件更靈活且更高效,因為它逐行讀取文件。
PHP 提供了幾種方法來處理讀取文件時的錯誤。一種常見的方法是在函數之前使用“@”運算符來抑制錯誤消息。另一種方法是使用 file_exists()
函數在嘗試讀取文件之前檢查文件是否存在。您還可以使用 is_readable()
函數來檢查文件是否可讀。如果發生錯誤,這些函數將返回 false,允許您優雅地處理錯誤。
是的,PHP 允許您使用 file_get_contents()
或 fopen()
函數(使用 URL 而不是本地文件路徑)從遠程服務器讀取文件。但是,出於安全原因,此功能在某些服務器上可能被禁用。您可以通過查看 php.ini
文件中的 allow_url_fopen
設置來檢查它是否已啟用。
PHP 沒有提供內置函數來讀取文件的特定行,但您可以通過使用 file()
函數將文件讀取到數組中來實現此目的,然後按其索引訪問所需的線。請記住,索引從 0 開始,因此第一行位於索引 0,第二行位於索引 1,依此類推。
要在 PHP 中以二進制模式讀取文件,您可以使用帶有“b”標誌的 fopen()
函數。這對於讀取二進製文件(例如圖像或可執行文件)特別有用。打開文件後,您可以使用 fread()
函數讀取它,該函數將數據作為二進製字符串返回。
PHP 提供了 fgetcsv()
函數來讀取 CSV 文件。此函數解析其讀取的行的 CSV 格式字段,並返回一個包含讀取的字段的數組。您可以將此函數用於循環以讀取整個 CSV 文件。
PHP 沒有提供內置函數來反向讀取文件,但您可以通過使用 file()
函數將文件讀取到數組中來實現此目的,然後使用 array_reverse()
函數反轉數組。
默認情況下,PHP 在讀取文件時不會鎖定文件。但是,如果您需要確保文件未被鎖定,則可以在讀取文件之前使用帶有 LOCK_SH
標誌的 flock()
函數。此函數將嘗試獲取共享鎖,允許其他進程同時讀取文件。
要在 PHP 中高效地讀取大型文件,您可以使用 fopen()
函數打開文件,然後使用循環中的 fgets()
函數逐行讀取文件。此方法比將整個文件讀取到字符串或數組中更節省內存,因為它只將當前行保存在內存中。
要在 PHP 中讀取文件並將內容輸出到瀏覽器,您可以使用 readfile()
函數。此函數讀取文件並將其寫入輸出緩衝區,然後將其發送到瀏覽器。這是一種方便地向用戶提供文件(例如圖像或可下載文件)的方法。
以上是快速提示:如何讀取PHP的本地文件的詳細內容。更多資訊請關注PHP中文網其他相關文章!