PHP編程中八種常見的檔案操作方式

來源:互聯網
上載者:User

檔案和目錄的操作
PHP處理本機伺服器上的檔案和目錄是非常方便的,但有時候會出現許可權和路徑相關的問題
1.開啟檔案
resource fopen ( string filename, string mode [, bool use_include_path [, resource zcontext]] )
$handle = fopen(filename,mode)//開啟檔案,返回代表此檔案的資源的控制代碼
檔案名稱可以使用相對路徑或者絕對路徑也可以使用網路通訊協定模式,開啟模式具有r\r+\w\w+\a\a+\x\x+\b
在操作二進位檔案時如果沒有指定 'b' 標記,可能會碰到一些奇怪的問題,包括壞掉的圖片檔案以及關於 \r\n 字元的奇怪問題。
為移植性考慮,強烈建議在用 fopen() 開啟檔案時總是使用 'b' 標記。
以下是幾種開啟檔案的方式
$fp = @fopen('log.txt',"rb");
$fp = @fopen('../log.txt',"rb");
$fp = @fopen("http://www.runer.com.cn/default.htm","rb");//還可以使用ftp和ghoper等協議,必須啟用php.ini檔案中的allow_url_fopen選項
////////////////////////////代碼部分////////////////////////////////////////
$filename1 = "userinfo.txt";//目錄下或include_path中存在這個檔案
$filename2 = "test.txt";//目錄下或include_path並不存在這個檔案
$resource1 = fopen($filename1,"rb");
@$resource2 = fopen($filename2,"rb");//因為目錄中不存在這個檔案,並且並未使用或include_path尋找包含檔案所在路徑則此操作會報錯,使用錯誤抑制符@可以迫使瀏覽器不輸出錯誤資訊
if($resource1)
echo "開啟檔案{$filename1}成功";
if(!@fopen($filename2,"r"))
echo "開啟檔案{$filename2}不成功";
//////////////////////////////////////////////////////////////////////////
---------------------輸出結果----------------------------------------
開啟檔案userinfo.txt成功

---------------------------------------------------------------------
2.使用完畢檔案後,要顯式的告訴PHP已經使用完檔案,讓作業系統確保將檔案的所有內容正確地從緩衝區重新整理到硬碟
使用fclose()關閉檔案,
bool fclose ( resource handle )//關閉一個已開啟的檔案指標
3.讀取檔案,fopen函數的mode參數允許讀取,PHP提供了幾個函數從檔案讀取資料
string fgets ( int handle [, int length] )從檔案指標中讀取一行,在二進位檔案上嘗試fgets會產生不可預測的結果
如果不指定長度,預設讀取1K資料,碰到分行符號(包括在傳回值中)、EOF 或者已經讀取了 length - 1 位元組後停止
string fgetss ( resource handle [, int length [, string allowable_tags]] )從檔案指標中讀取一行並過濾掉 HTML 標籤
fgetc()讀取單個字元
fread()讀取任意位元據
////////////////////////////代碼部分////////////////////////////////////////
$handle = fopen ("test.jpg", "rb");
$c;
while (!feof($handle)) {
$contents .= @fread($handle, 8192);//迴圈讀取並將其合并為一個大塊檔案
}
fclose($handle);
//////////////////////////////////////////////////////////////////////////
---------------------輸出結果----------------------------------------

---------------------------------------------------------------------
4.判斷檔案讀取的狀態
每個檔案控制代碼都有一個檔案指標,或者一個指出下一個操作將在檔案中哪裡發生的遊標,根據fopen函數的mode參數
檔案指標最初位於檔案的開頭(0),或者檔案的末尾
feof()可以判斷檔案是否已經到末尾(到末尾後函數返回TRUE)
filesize()函數返迴文件的大小 5.寫入檔案
fwrite()函數執行檔案寫入
////////////////////////////代碼部分////////////////////////////////////////
$filename = 'test.txt';
$somec;
// 首先我們要確定檔案存在並且可寫。
if (is_writable($filename)) {
// 在這個例子裡,我們將使用添加模式開啟$filename,
// 因此,檔案指標將會在檔案的開頭,
// 那就是當我們使用fwrite()的時候,$somecontent將要寫入的地方。
if (!$handle = fopen($filename, 'a')) {
echo "不能開啟檔案 $filename";
exit;
}
// 將$somecontent寫入到我們開啟的檔案中。
if (fwrite($handle, $somecontent) === FALSE) {
echo "不能寫入到檔案 $filename";
exit;
}
echo "成功地將 $somecontent 寫入到檔案$filename";
fclose($handle);
} else {
}
echo "檔案 $filename 不可寫";
//////////////////////////////////////////////////////////////////////////
---------------------輸出結果----------------------------------------
成功地將 添加這些文字到檔案 寫入到檔案test.txt
---------------------------------------------------------------------
對於位元據,必須指定第三個參數,它包含寫入到磁碟的資料位元組數
$result = @fwrite($fp,$binary_data,mb_strlen($binary_data,'8bit'));
6.檔案許可權和其他資訊
is_readable()//判斷檔案是否可讀
is_writeable()//判斷檔案是否可寫
is_writable()//判斷檔案是否可寫
fileperms()//判斷檔案的許可權(UNIX風格的檔案許可權測試函數)
file_exists()//是否存在這個檔案
fileowner()//判斷檔案所屬使用者
filegroup()//判斷檔案所屬組
7.刪除和重新命名檔案
unlink()//刪除檔案
rename()//重新命名檔案
8.訪問目錄
目錄訪問建議使用前向斜線"/",相容windows和unix系統
basename()//返回不包括路徑資訊的檔案名稱
dirname()//返迴文件名的目錄部分
realpath()//接受相對路徑,返迴文件的絕對路徑
pathinfo()//提取給定路徑的目錄名,基本檔案名稱和副檔名
opendir()//開啟目錄,返回資源控制代碼
readdir()//讀取目錄項
rewinddir()//將讀取指標返回開頭
closedir()//關閉讀取控制代碼
chdir()//改變當前指令碼執行期間的當前工作目錄
mkdir()//建立目錄
rmdir()刪除目錄
////////////////////////////代碼部分////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
---------------------輸出結果----------------------------------------

filename: web : filetype: dir

filename: study : filetype: dir

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.