PHP編程中八種常見(jiàn)的文件操作方式
PHP處理本地服務(wù)器上的文件和目錄是非常方便的,但有時(shí)候會(huì)出現(xiàn)權(quán)限和路徑相關(guān)的問(wèn)題
1.打開(kāi)文件
resource fopen ( string filename, string mode [, bool use_include_path [, resource zcontext]] )
$handle = fopen(filename,mode)//打開(kāi)文件,返回代表此文件的資源的句柄
文件名稱(chēng)可以使用相對(duì)路徑或者絕對(duì)路徑也可以使用網(wǎng)絡(luò)協(xié)議模式,打開(kāi)模式具有r\r+\w\w+\a\a+\x\x+\b
在操作二進(jìn)制文件時(shí)如果沒(méi)有指定 'b' 標(biāo)記,可能會(huì)碰到一些奇怪的問(wèn)題,包括壞掉的圖片文件以及關(guān)于 \r\n 字符的奇怪問(wèn)題。
為移植性考慮,強(qiáng)烈建議在用 fopen() 打開(kāi)文件時(shí)總是使用 'b' 標(biāo)記。
以下是幾種打開(kāi)文件的方式
$fp = @fopen('log.txt',"rb");
$fp = @fopen('../log.txt',"rb");
$fp = @fopen("http://www.runer.com.cn/default.htm","rb");//還可以使用ftp和ghoper等協(xié)議,必須啟用php.ini文件中的allow_url_fopen選項(xiàng)
////////////////////////////代碼部分////////////////////////////////////////
$filename1 = "userinfo.txt";//目錄下或include_path中存在這個(gè)文件
$filename2 = "test.txt";//目錄下或include_path并不存在這個(gè)文件
$resource1 = fopen($filename1,"rb");
@$resource2 = fopen($filename2,"rb");//因?yàn)槟夸浿胁淮嬖谶@個(gè)文件,并且并未使用或include_path尋找包含文件所在路徑則此操作會(huì)報(bào)錯(cuò),使用錯(cuò)誤抑制符@可以迫使瀏覽器不輸出錯(cuò)誤信息
if($resource1)
echo "打開(kāi)文件{$filename1}成功";
if(!@fopen($filename2,"r"))
echo "打開(kāi)文件{$filename2}不成功";
//////////////////////////////////////////////////////////////////////////
---------------------輸出結(jié)果----------------------------------------
打開(kāi)文件userinfo.txt成功
---------------------------------------------------------------------
2.使用完畢文件后,要顯式的告訴PHP已經(jīng)使用完文件,讓操作系統(tǒng)確保將文件的所有內(nèi)容正確地從緩沖區(qū)刷新到硬盤(pán)
使用fclose()關(guān)閉文件,
bool fclose ( resource handle )//關(guān)閉一個(gè)已打開(kāi)的文件指針
3.讀取文件,fopen函數(shù)的mode參數(shù)允許讀取,PHP提供了幾個(gè)函數(shù)從文件讀取數(shù)據(jù)
string fgets ( int handle [, int length] )從文件指針中讀取一行,在二進(jìn)制文件上嘗試fgets會(huì)產(chǎn)生不可預(yù)測(cè)的結(jié)果
如果不指定長(zhǎng)度,默認(rèn)讀取1K數(shù)據(jù),碰到換行符(包括在返回值中)、EOF 或者已經(jīng)讀取了 length - 1 字節(jié)后停止
string fgetss ( resource handle [, int length [, string allowable_tags]] )從文件指針中讀取一行并過(guò)濾掉 HTML 標(biāo)記
fgetc()讀取單個(gè)字符
fread()讀取任意二進(jìn)制數(shù)據(jù)
////////////////////////////代碼部分////////////////////////////////////////
$handle = fopen ("test.jpg", "rb");
$c;
while (!feof($handle)) {
$contents .= @fread($handle, 8192);//循環(huán)讀取并將其合并為一個(gè)大塊文件
}
fclose($handle);
//////////////////////////////////////////////////////////////////////////
---------------------輸出結(jié)果----------------------------------------
---------------------------------------------------------------------
4.判斷文件讀取的狀態(tài)
每個(gè)文件句柄都有一個(gè)文件指針,或者一個(gè)指出下一個(gè)操作將在文件中哪里發(fā)生的游標(biāo),根據(jù)fopen函數(shù)的mode參數(shù)
文件指針最初位于文件的開(kāi)頭(0),或者文件的末尾
feof()可以判斷文件是否已經(jīng)到末尾(到末尾后函數(shù)返回TRUE)
filesize()函數(shù)返回文件的大小 5.寫(xiě)入文件
fwrite()函數(shù)執(zhí)行文件寫(xiě)入
////////////////////////////代碼部分////////////////////////////////////////
$filename = 'test.txt';
$somec;
// 首先我們要確定文件存在并且可寫(xiě)。
if (is_writable($filename)) {
// 在這個(gè)例子里,我們將使用添加模式打開(kāi)$filename,
// 因此,文件指針將會(huì)在文件的開(kāi)頭,
// 那就是當(dāng)我們使用fwrite()的時(shí)候,$somecontent將要寫(xiě)入的地方。
if (!$handle = fopen($filename, 'a')) {
echo "不能打開(kāi)文件 $filename";
exit;
}
// 將$somecontent寫(xiě)入到我們打開(kāi)的文件中。
if (fwrite($handle, $somecontent) === FALSE) {
echo "不能寫(xiě)入到文件 $filename";
exit;
}
echo "成功地將 $somecontent 寫(xiě)入到文件$filename";
fclose($handle);
} else {
}
echo "文件 $filename 不可寫(xiě)";
//////////////////////////////////////////////////////////////////////////
---------------------輸出結(jié)果----------------------------------------
成功地將 添加這些文字到文件 寫(xiě)入到文件test.txt
---------------------------------------------------------------------
對(duì)于二進(jìn)制數(shù)據(jù),必須指定第三個(gè)參數(shù),它包含寫(xiě)入到磁盤(pán)的數(shù)據(jù)字節(jié)數(shù)
$result = @fwrite($fp,$binary_data,mb_strlen($binary_data,'8bit'));
6.文件權(quán)限和其他信息
is_readable()//判斷文件是否可讀
is_writeable()//判斷文件是否可寫(xiě)
is_writable()//判斷文件是否可寫(xiě)
fileperms()//判斷文件的權(quán)限(UNIX風(fēng)格的文件權(quán)限測(cè)試函數(shù))
file_exists()//是否存在這個(gè)文件
fileowner()//判斷文件所屬用戶(hù)
filegroup()//判斷文件所屬組
7.刪除和重命名文件
unlink()//刪除文件
rename()//重命名文件
8.訪問(wèn)目錄
目錄訪問(wèn)建議使用前向斜線"/",兼容windows和unix系統(tǒng)
basename()//返回不包括路徑信息的文件名
dirname()//返回文件名的目錄部分
realpath()//接受相對(duì)路徑,返回文件的絕對(duì)路徑
pathinfo()//提取給定路徑的目錄名,基本文件名和擴(kuò)展名
opendir()//打開(kāi)目錄,返回資源句柄
readdir()//讀取目錄項(xiàng)
rewinddir()//將讀取指針?lè)祷亻_(kāi)頭
closedir()//關(guān)閉讀取句柄
chdir()//改變當(dāng)前腳本執(zhí)行期間的當(dāng)前工作目錄
mkdir()//創(chuàng)建目錄
rmdir()刪除目錄
////////////////////////////代碼部分////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
---------------------輸出結(jié)果----------------------------------------
filename: web : filetype: dir
filename: study : filetype: dir
- PHP常用的文件操作函數(shù)經(jīng)典收藏
- php常用文件操作函數(shù)匯總
- 真正的ZIP文件操作類(lèi)(php)
- PHP目錄與文件操作技巧總結(jié)(創(chuàng)建,刪除,遍歷,讀寫(xiě),修改等)
- 一個(gè)經(jīng)典的PHP文件上傳類(lèi)分享
- php+ajax實(shí)現(xiàn)圖片文件上傳功能實(shí)例
- PHP實(shí)現(xiàn)視頻文件上傳完整實(shí)例
- php 下載保存文件保存到本地的兩種實(shí)現(xiàn)方法
- php遍歷、讀取文件夾中圖片并分頁(yè)顯示圖片的方法
- PHP實(shí)現(xiàn)適用于文件內(nèi)容操作的分頁(yè)類(lèi)
- PHP文件操作實(shí)例總結(jié)【文件上傳、下載、分頁(yè)】
相關(guān)文章
PHP實(shí)現(xiàn)二維數(shù)組中的查找算法小結(jié)
這篇文章主要介紹了PHP實(shí)現(xiàn)二維數(shù)組中的查找算法,涉及PHP數(shù)組遍歷、判斷、計(jì)算等相關(guān)操作技巧,需要的朋友可以參考下2018-06-06php + ajax 實(shí)現(xiàn)的寫(xiě)入數(shù)據(jù)庫(kù)操作簡(jiǎn)單示例
這篇文章主要介紹了php + ajax 實(shí)現(xiàn)的寫(xiě)入數(shù)據(jù)庫(kù)操作,結(jié)合實(shí)例形式分析了php + ajax 寫(xiě)入數(shù)據(jù)庫(kù)基本原理、操作技巧與相關(guān)使用注意事項(xiàng),需要的朋友可以參考下2020-05-05詳解PHP中數(shù)組函數(shù)的知識(shí)點(diǎn)
PHP 的數(shù)組是一種很強(qiáng)大的數(shù)據(jù)類(lèi)型,與此同時(shí) PHP 內(nèi)置了一系列與數(shù)組相關(guān)的函數(shù)可以很輕易的實(shí)現(xiàn)日常開(kāi)發(fā)的功能。所以本文便總結(jié)了一些在常見(jiàn)場(chǎng)景中利用 PHP 內(nèi)置函數(shù)的實(shí)現(xiàn)方法,希望對(duì)你有所幫助2022-11-11php使用fsockopen函數(shù)發(fā)送post,get請(qǐng)求獲取網(wǎng)頁(yè)內(nèi)容的方法
這篇文章主要介紹了php使用fsockopen函數(shù)發(fā)送post,get請(qǐng)求獲取網(wǎng)頁(yè)內(nèi)容的方法,是PHP關(guān)于socket編程的一個(gè)典型應(yīng)用,需要的朋友可以參考下2014-11-11php調(diào)用淘寶開(kāi)放API實(shí)現(xiàn)根據(jù)賣(mài)家昵稱(chēng)獲取賣(mài)家店鋪ID的方法
這篇文章主要介紹了php調(diào)用淘寶開(kāi)放API實(shí)現(xiàn)根據(jù)賣(mài)家昵稱(chēng)獲取賣(mài)家店鋪ID的方法,實(shí)例分析了php調(diào)用淘寶API查詢(xún)店鋪信息的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07php+mysql開(kāi)發(fā)的最簡(jiǎn)單在線題庫(kù)(在線做題系統(tǒng))完整案例
這篇文章主要介紹了php+mysql開(kāi)發(fā)的最簡(jiǎn)單在線題庫(kù)(在線做題系統(tǒng))案例,結(jié)合完整實(shí)例形式分析了PHP結(jié)合MySQL數(shù)據(jù)庫(kù)查詢(xún)、判斷實(shí)現(xiàn)的在線題庫(kù)功能相關(guān)操作技巧,需要的朋友可以參考下2019-03-03php 二維數(shù)組時(shí)間排序?qū)崿F(xiàn)代碼
這篇文章主要介紹了php 二維數(shù)組時(shí)間排序?qū)崿F(xiàn)代碼,需要的朋友可以參考下2016-11-11PHP+Mysql樹(shù)型結(jié)構(gòu)(無(wú)限分類(lèi))數(shù)據(jù)庫(kù)設(shè)計(jì)的2種方式實(shí)例
這篇文章主要介紹了PHP+Mysql樹(shù)型結(jié)構(gòu)(無(wú)限分類(lèi))數(shù)據(jù)庫(kù)設(shè)計(jì)的2種方式實(shí)例,以及優(yōu)劣分析、探討,需要的朋友可以參考下2014-07-07