PHP回顧之IO

NO IMAGE

轉載請註明文章出處: https://tlanyan.me/php-review…

PHP回顧系列目錄

PHP基礎
web請求
cookie
web響應
session
資料庫操作
加解密
Composer
建立自己的Composer包
傳送郵件

無論哪種程式語言,IO操作都值得好好學習和理解。由於PHP簡單的特性,不少人對此毫無概念也能寫出可用的程式碼。本文總結PHP開發中幾個常見的IO場景並介紹對應的操作,希望能幫助PHP開發人員加深對IO的理解。後續文章中將介紹隱藏在簡單之下的本質:流。

本文介紹的場景包括:讀寫檔案、命令列輸入輸出、與遠端網址互動。廢話少說,直接開始吧!

讀寫檔案

檔案的讀寫是最常規的IO操作。開啟檔案、讀寫內容、關閉檔案,一氣呵成,沒什麼尿點。一個典型的讀取檔案內容例子:

function getFileContent(string $filename) : ?string
{
if (!is_file($filename)) {
return null;
}
$fd = fopen($filename, "rb");
$content = fread($fd, filesize($filename);
fclose($fd);
return $content;
}

讀寫檔案So easy! 要想對檔案操作玩得更高階點,至少需要熟練使用這些API:

file_exists/is_file/filesize/fileperms等獲取檔案資訊的輔助函式;
fopen:開啟檔案,獲取檔案控制代碼,第二個引數(arwcbx)的含義要弄清楚;
flock:獲取檔案鎖,可用其實現程序互斥鎖;
fread/fgets/fscanf等獲取檔案內容的函式;
fwrite/fputs/fputcsv/ftruncate等寫入內容函式;
feof/ftell/fseek/rewind等操作檔案指標位置的函式;
fclose: 關閉檔案,釋放資源。

注意本節中的檔案指是 本地檔案,對於遠端檔案,上述函式是否起作用取決於協議是否提供支援。例如fread/fwrite可以操作http://協議的資源,但stat/filesize等函式不能正常工作。可參考官網的“協議和包裝器” 檢視非本地普通檔案時可用的函式資訊。

命令列輸入和輸出

PHP主要用於web開發,命令列應用也比較常見,比如定時任務的指令碼。命令列模式下,有不少與web開發不同的地方,比如可以使用多程序/執行緒(web中的curl_multiple不算),沒有執行時間限制等。

命令列時php_sapi_name

命令列模式時”php://output”連結到標準輸出,所以echo/print/var_dump

使用fopen/fsocketopen等函式也能實現與遠端伺服器的互動,這部分內容放在後續的流中闡述。

file_get_contents

上文廢話了半天,還沒說到PHP中獲取內容的神器:file_get_contents

參考

http://php.net/manual/en/ref….
http://php.net/manual/en/feat…
http://php.net/manual/en/book…
https://github.com/yiisoft/yi…

感謝閱讀,感謝指正!