PHP Cookbook讀書筆記 第23章檔案

2022-02-23 12:55:34 字數 3939 閱讀 5651

概述

檔案是在web應用中經常會碰到的乙個部分,本章主要包括如何在php中開啟、關閉和操縱檔案,以及在開啟檔案後能夠對檔案做哪些處理等內容。

建立或開啟乙個本地檔案

可以用fopen()函式開啟/建立乙個本地檔案

<?php

$fh = fopen('file.txt','rb') or die("can't open file.txt: $php_errormsg");

?>

fopen函式的第二個引數指定了開啟該流的訪問型別:

模式可讀?

可寫?檔案指標

截斷?建立?說明r

是否開始否

否唯讀開啟r+是

是開始否否

讀寫方式開啟w否

是開始是是

寫入方式開啟w+是

是開始是是

讀寫方式開啟a否

是結尾否是

寫入方式開啟,追加a+是

是結尾否是

讀寫方式開啟,追加x否

是開始否是

寫入方式開啟,如果檔案存在返回false,並產生乙個警告資訊x+是

是開始否是

建立並以讀寫方式開啟,同上存在返回false,並產生乙個警告資訊

檔案操作需要考慮其作業系統,在不同的作業系統下的某些檔案操作是不一樣的,例如:在unix系統中新行用\n,windows中是\r\n,而macintosh中則是\r。

除上面這些外,還有b表示以二進位制方式開啟檔案(預設是ascii形式),以二進位制形式開啟檔案可以在不同作業系統中具有很好的移植性,故官方手冊中強烈建議使用二進位制模式開啟檔案。

另外windows下還提供了乙個t用來透明轉換\n為\r\n。官方有一次強烈建議為移植性考慮,重寫那些依賴於t模式的**,改為正確的結束符並改成b模式

開啟遠端檔案

開啟遠端檔案也可以用fopen()函式,操作方法和本地檔案差不多,但有需要注意的一點是操縱遠端檔案需要php.ini中的allow_url_fopen設定為on。下面分別列舉了開啟ftp和http開啟乙個遠端txt檔案:

<?php

$fh = fopen('','r');

$fh = fopen('','r');

?>

讀取整個檔案內容到字串

使用file_get_contents()方法可以一次將一整個檔案的內容載入到乙個變數中去。但如果是要將整個檔案內容輸出可以選擇fpassthru()或者readfile()函式。(對於檔案的顯示等也適用)

按行讀取檔案

可以使用fgets()函式按行讀取檔案

$lines = 0;

if ($fh = fopen('orders.txt','r'))

} fclose($fh);

}print $lines;

按指定位元組數讀取檔案

可以使用fread()函式按指定位元組數讀取檔案

$handle = fopen ("", "rb");

$contents = "";

while (!feof($handle))

fclose($handle);

例子中每次按1m位元組大小讀取檔案遠端檔案

fread()從檔案指標 handle 讀取最多 length 個位元組。該函式在讀取完最多 length 個位元組數,或到達 eof 的時候,或(對於網路流)當乙個包可用時,或(在開啟使用者空間流之後)已讀取了 8192 個位元組時就會停止讀取檔案

隨機化處理檔案中的所有行

$lines = file('quotes-of-the-day.txt');

$lines = shuffle($lines);

讀取配置檔案

可以用parse_ini_file()函式來讀取類似php.ini格式的檔案,例如

<?php

$config = parse_ini_file('/etc/example.ini');

?>

example.ini配置檔案內容如下:

; physical features

eyes=brown

hair=brown

glasses=yes

; other features

name=susannah

likes=monkeys,ice cream,reading

返回的陣列如下

<?php

array

( [eyes] => brown

[hair] => brown

[glasses] => 1

[name] => susannah

[likes] => monkeys,ice cream,reading

)?>

如果給parse_ini_file()增加個引數,將得到不同的結果陣列

<?php

$config = parse_ini_file('/etc/example.ini',1);

?>

得到的$conf如下:

array

( [physical] => array

([eyes] => brown

[hair] => brown

[glasses] => 1

)[other] => array

([name] => susannah

[likes] => monkeys,ice cream,reading

))

不通過臨時檔案來修改檔案

通過file_get_contents()來讀取檔案內容,修改後,通過file_put_contents()函式回寫到檔案中去

$contents = file_get_contents('pickles.txt');

$contents = strtoupper($contents);

file_put_contents('pickles.txt', $contents);

同時寫入到多個檔案控制代碼
function pc_multi_fwrite($fhs,$s,$length=null) 

} else }}}

$fhs['file'] = fopen('log.txt','w') or die($php_errormsg);

$fhs['screen'] = fopen('php://stdout','w') or die($php_errormsg);

pc_multi_fwrite($fhs,'the space shuttle has landed.');

呼叫shell命令

如果想通過php呼叫shell命令並獲取輸出可以通過popen()函式實現,**如下:

$ph = popen('/sbin/route','r') or die($php_errormsg);

while (! feof($ph))

pclose($ph) or die($php_errormsg);

鎖定檔案

通過flock()對檔案執行勸告式鎖定,可選擇排他鎖或共享鎖,排他鎖意味著每次只能由乙個程序控制。共享鎖意味著檔案每次可能由多個程序控制。根據其特性可知,在寫入檔案之前應使用排他鎖,在讀取檔案前應使用共享鎖。

讀寫壓縮檔案

//讀取本地的gzip檔案

$fh = fopen('compress.zlib:','r') or die("can't open: $php_errormsg");

while ($line = fgets($fh))

fclose($fh) or die("can't close: $php_errormsg");

//讀取遠端的bzip2壓縮檔案

$fp = fopen('something-compressed.bz2','r');

while (! feof($fp))

fclose($fp);

《PHP Cookbook》學習筆記(三)

七 類和物件 1 如果用echo或print語句輸出乙個物件,php就會呼叫這個物件的 tostring 方法,如下 輸出如下 linglongwunv linglongwunv gmail.com 2 php5拷貝的是物件的引用而不是值。當把乙個現存的物件指定給乙個新變數時,新變數中儲存的只是這個...

《PHP Cookbook》學習筆記(四)

1 在與bindcolumn 組合使用的時候,pdo fetch bound取出模式可以讓你設定變數,這些變數的值會在每次呼叫fetch 時自動更新,如下所示 每當呼叫fetch 時,symbol和 planet都會被賦予新值。注意,在bindcolumn 中既可以使用列名也可以使用列數。列數從1開...

mysql運維 讀書筆記 Mysql 讀書筆記

mysql儲存時間有兩種型別 datetime和timestamp。分別說一下兩者的區別。datetime,以8位元組儲存時間,理論上可以從0000年儲存到9999年。並且沒有時區的概念,它儲存的就是乙個時間點的概念。timestamp和datetime最主要的不同就是,它是以4個位元組儲存,由19...