PHP高級特性2之文件處理
Jun 13, 2016 pm 12:21 PM
PHP高級特性二之文件處理
PHP中的文件處理也是一個(gè)相當(dāng)重要的模塊,這一篇的主要內(nèi)容就是PHP中文件系統(tǒng)的簡介。
文件系統(tǒng)用途
1. 項(xiàng)目處理都離不開文件處理
2. 可以用文件長時(shí)間保存數(shù)據(jù)
3. 建立緩存,在服務(wù)器中進(jìn)行文件操作
文件系統(tǒng)函數(shù)用法詳述
1.基本的判斷函數(shù)
is_dir?— 判斷給定文件名是否是一個(gè)目錄
is_file?— 判斷給定文件名是否為一個(gè)文件
is_executable?— 判斷給定文件名是否可執(zhí)行
is_link?— 判斷給定文件名是否為一個(gè)符號連接
is_readable?— 判斷給定文件名是否可讀
is_uploaded_file?— 判斷文件是否是通過 HTTP POST 上傳的
is_writable?— 判斷給定的文件名是否可寫
is_writeable?— is_writable 的別名
2.文件相關(guān)信息獲取
file_exists?— 檢查文件或目錄是否存在
fileatime?— 取得文件的上次訪問時(shí)間
filectime?— 取得文件的 inode 修改時(shí)間
filegroup?— 取得文件的組
fileinode?— 取得文件的 inode
filemtime?— 取得文件修改時(shí)間
fileowner?— 取得文件的所有者
fileperms?— 取得文件的權(quán)限
filesize?— 取得文件大小
filetype?— 取得文件類型
下面我們寫一個(gè)例子,傳入文件名,打印它的詳細(xì)信息。
1 2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
????function getFileInfo($filename){
????????if(!file_exists($filename)){
????????????echo '文件'.($filename).'不存在';
????????????return;
????????}
?
????????if(is_file($filename)){
????????????echo $filename.'是一個(gè)文件';
????????}
?
????????if(is_dir($filename)){
????????????echo $filename.'是一個(gè)目錄';
????????}
?
????????if(is_executable($filename)){
????????????echo $filename.'是可執(zhí)行文件';
????????}else{
????????????echo $filename.'不是可執(zhí)行文件';
????????}
?
????????if(is_readable($filename)){
????????????echo $filename.'是可讀的';
????????}else{
????????????echo $filename.'不是可讀的';
????????}
?
????????if(is_writable($filename)){
????????????echo $filename.'是可寫入的';
????????}else{
????????????echo $filename.'不是可寫入的';
????????}
?
????????echo '文件'.$filename.'的大小是'.getFileSize(filesize($filename)).'';
????????echo '文件'.$filename.'的類型是'.filetype($filename).'';
????????echo '文件'.$filename.'的所有者是'.fileowner($filename).'';
????????echo '文件'.$filename.'的最后訪問時(shí)間為'.getTime(fileatime($filename)).'';
????????echo '文件'.$filename.'的inode是'.fileinode($filename).'';
????????echo '文件'.$filename.'的修改時(shí)間是'.getTime(filemtime($filename)).'';
????????echo '文件'.$filename.'的權(quán)限是'.fileperms($filename).'';
????}
????
????function getTime($time){
????????return date('Y-m-d H:i:s',$time);
????}
?
????function getFileSize($size){
????????$dw = 'B';
????????if($size>=pow(2,40)){
????????????$size=round($size/pow(2,40),2);
????????????$dw = 'PB';
????????}else if($size>=pow(2,30)){
????????????$size=round($size/pow(2,30),2);
????????????$dw = 'TB';
????????}else if($size>=pow(2,20)){
????????????$size=round($size/pow(2,20),2);
????????????$dw = 'GB';
????????}else if($size>=pow(2,10)){
????????????$size=round($size/pow(2,10),2);
????????????$dw = 'MB';
????????}
????????return $size.$dw;
????}
????getFileInfo('1.php');
|
運(yùn)行結(jié)果
1.php是一個(gè)文件
1.php不是可執(zhí)行文件
1.php是可讀的
1.php不是可寫入的
文件1.php的大小是2MB
文件1.php的類型是file
文件1.php的所有者是1000
文件1.php的最后訪問時(shí)間為2015-03-04 12:58:33
文件1.php的inode是536185
文件1.php的修改時(shí)間是2015-03-04 12:58:32
文件1.php的權(quán)限是33204
?3.文件路徑相關(guān)函數(shù)
相對路徑:相對于當(dāng)前目錄的上級和下級目錄
. 當(dāng)前目錄
.. 上一級目錄
路徑分隔符號
linux/Unix “/”
windows “\”
不管是什么操作系統(tǒng)PHP的目錄分割符號都支技 / (Linux)
絕對路徑:可以指的操作系統(tǒng)的根,也可以指的是存放網(wǎng)站的文檔根目錄
如果是在服務(wù)器中執(zhí)行(通過PHP文件處理函數(shù)執(zhí)行)路徑 則 “根”指的就是操作系統(tǒng)的根
如果程序是下載的客戶端,再訪問服務(wù)器中的文件時(shí),只有通過Apache訪問,“根”也就指的是文檔根目錄
三個(gè)相關(guān)函數(shù)
basename?— 返回路徑中的文件名部分
dirname?— 返回路徑中的目錄部分
pathinfo?— 返回文件路徑的信息
例如下面的例子
1 2
3
4
5
6
7
8
|
????$url1="./aaa/bbb/index.php";
????$url2="../www/yyy/login.rar";
????$url3="c:/appserv/www/demo.html";
????$url4="http://localhost/yyy/www.gif";
????echo basename($url1);
????echo basename($url2);
????echo basename($url3);
????echo basename($url4);
|
運(yùn)行結(jié)果
index.php
login.rar
demo.html
www.gif
可以看出,basename這個(gè)函數(shù)返回的是文件的名,也就是最后一個(gè)項(xiàng)目。
下面我們看一下dirname的用法
1 2
3
4
5
6
7
8
|
????$url1="./aaa/bbb/index.php";
????$url2="../www/yyy/login.rar";
????$url3="c:/appserv/www/demo.html";
????$url4="http://localhost/yyy/www.gif";
????echo dirname(dirname($url1));
????echo dirname($url2);
????echo dirname($url3);
????echo dirname($url4);
|
運(yùn)行結(jié)果
./aaa
../www/yyy
c:/appserv/www
http://localhost/yyy
可以發(fā)現(xiàn),dirname這個(gè)函數(shù)可以多層嵌套使用,返回的就是它所在的路徑,即除了最后一項(xiàng)之外所有的項(xiàng)。
另外 pathinfo的以上所有信息都可以獲取到,另外還包括了文件名和擴(kuò)展名
比如下面的結(jié)果
Array ( [dirname] => ../www/yyy [basename] => login.rar [extension] => rar [filename] => login )
4. 文件的創(chuàng)建刪除修改
touch?— 創(chuàng)建一個(gè)文件
unlink?— 刪除文件
rename?— 重命名一個(gè)文件或目錄
copy?—?拷貝文件
例如下面的例子
1 2
3
4
5
|
touch("./php.apahce"); //創(chuàng)建文件
unlink("C:/AppServ/www/xsphp/apache.php");??//刪除文件
rename("./test.txt", "d:/test2.txt");????//重命名文件
copy("cache.txt", "./cache5.txt");?? //復(fù)制文件
chmod("a.txt",755);?? //設(shè)置文件權(quán)限
|
權(quán)限相關(guān)內(nèi)容
rwx 表這個(gè)文件的擁有者 r讀 w寫 x執(zhí)行
rwx 表這個(gè)文件的擁有者所在的組 r讀 w寫 x執(zhí)行
rwx 其它用戶對這個(gè)為文件的權(quán)限 r讀 w寫 x執(zhí)行
文件讀寫
1. file_get_contents(string)
傳入文件名,直接得到文件中的文本信息,返回的內(nèi)容即為文件中的文本。
例如
1 2
3
4
|
$str = file_get_contents("1.txt");
echo $str;
?>
|
則直接打開了 1.txt 文件中的內(nèi)容,并返回文件中的文本信息。
如果文件不存在,那么會(huì)提示
Warning: file_get_contents(2.txt): failed to open stream: No such file or directory
同樣,文件還可以是遠(yuǎn)程文件,例如,參數(shù)傳入 http://www.qq.com
即可以呈現(xiàn)騰訊網(wǎng)的首頁內(nèi)容。
缺點(diǎn):不能讀取指定部分的內(nèi)容,一次性全部讀取。
2. file_put_contents(filename,content)
寫入文件,filename是寫入文件的文件名,content是寫入內(nèi)容,返回值是成功寫入的字符長度。
1 2
3
|
echo file_put_contents("2.txt",'abcd'); ?>
|
2.txt 文件如果不存在,那么則會(huì)創(chuàng)建這個(gè)文件并寫入 abcd 這個(gè)字符串,返回 4 ,為字符串的長度。 如果文件存在,則會(huì)將文件清空,然后寫入字符串,返回寫入長度。
缺點(diǎn):不能以追加的方式寫入文件。
3.file(filename)
file是直接打開某一個(gè)文件,返回的結(jié)果是一個(gè)數(shù)組,每一行是數(shù)組的一個(gè)元素。也就是說,獲取行數(shù)只需要輸出數(shù)組的大小即可。例如
1 2
3
4
5
|
$str = file("1.txt");
var_dump($str);
echo count($str);
?>
|
即可得到數(shù)組形式的行內(nèi)容,而且輸出了行數(shù)。
缺點(diǎn):不能讀取指定部分的內(nèi)容。
4.fopen(filename,mode)
filename是文件名,可以是路徑加名,也可以是遠(yuǎn)程服務(wù)器文件。
mode是打開文件的方式
r,以只讀模式打開文件
r+,除了讀,還可以寫入。
w, 以只寫的方式打開,如果文件不存在,則創(chuàng)建這個(gè)文件,并寫放內(nèi)容,如果文件存在,并原來有內(nèi)容,則會(huì)清除原文件中所有內(nèi)容,再寫入(打開已有的重要文件)
w+,除了可以寫用fwrite, 還可以讀fread
a,以只寫的方式打開,如果文件不存在,則創(chuàng)建這個(gè)文件,并寫放內(nèi)容,如果文件存在,并原來有內(nèi)容,則不清除原有文件內(nèi)容,再原有文件內(nèi)容的最后寫入新內(nèi)容,(追加)
a+,除了可以寫用fwrite, 還可以讀fread
b,以二進(jìn)制模式打開文件(圖,電影)
t,以文本模式打開文件
注意:
r+具有讀寫屬性,從文件頭開始寫,保留原文件中沒有被覆蓋的內(nèi)容;
w+具有讀寫屬性,寫的時(shí)候如果文件存在,會(huì)被清空,從頭開始寫。
返回的是一個(gè)文件資源
5.fwrite(file,content)
文件寫入功能,file是文件資源,用fopen函數(shù)獲取來的,content是寫入內(nèi)容。同 fputs 函數(shù)。
例如
1 2
3
4
5
6
7
8
9
|
php
$file = fopen("1.txt","r+");
$result = fwrite($file,"xx");
if($result){
echo "Success";
}else
echo "Failed";
}
?>
|
則從頭開始寫入資源,即把前兩個(gè)字符設(shè)為 xx
6. fread(file,size)
讀取文件指定部分的長度,file是文件資源,由fopen返回的對象,size是讀取字符的長度。
例如
1 2
3
4
5
|
$file = fopen("1.txt","r");
$content = fread($file,filesize("1.txt"));
echo $content;
?>
|
不過,上述的 filesize 方法只能獲取本地文件大小,對于遠(yuǎn)程文件的讀取就要換一種方法了。
例如
1 2
3
4
5
6
7
8
|
$file = fopen("http://www.qq.com","r");
$str = "";
while(!feof($file)){ ?//判斷時(shí)候到了文件結(jié)尾
$str.=fread($file,1024);
}
echo $str;
?>
|
?
7.fgets(file)
file是文件資源,每次讀取一行。例如我們讀取出騰訊首頁一共有多少行。

熱AI工具

Undress AI Tool
免費(fèi)脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

Windows11將清新優(yōu)雅的設(shè)計(jì)帶到了最前沿;現(xiàn)代介面可讓您個(gè)性化和更改最精細(xì)的細(xì)節(jié),例如視窗邊框。在本指南中,我們將討論逐步說明,以協(xié)助您在Windows作業(yè)系統(tǒng)中建立反映您的風(fēng)格的環(huán)境。如何更改視窗邊框設(shè)定?按+開啟“設(shè)定”應(yīng)用程式。 WindowsI前往個(gè)人化,然後按一下顏色設(shè)定。顏色變更視窗邊框設(shè)定視窗11「寬度=」643「高度=」500「>找到在標(biāo)題列和視窗邊框上顯示強(qiáng)調(diào)色選項(xiàng),然後切換它旁邊的開關(guān)。若要在「開始」功能表和工作列上顯示主題色,請開啟「在開始」功能表和工作列上顯示主題

「你的組織要求你更改PIN訊息」將顯示在登入畫面上。當(dāng)在使用基於組織的帳戶設(shè)定的電腦上達(dá)到PIN過期限制時(shí),就會(huì)發(fā)生這種情況,在該電腦上,他們可以控制個(gè)人設(shè)備。但是,如果您使用個(gè)人帳戶設(shè)定了Windows,則理想情況下不應(yīng)顯示錯(cuò)誤訊息。雖然情況並非總是如此。大多數(shù)遇到錯(cuò)誤的使用者使用個(gè)人帳戶報(bào)告。為什麼我的組織要求我在Windows11上更改我的PIN?可能是您的帳戶與組織相關(guān)聯(lián),您的主要方法應(yīng)該是驗(yàn)證這一點(diǎn)。聯(lián)絡(luò)網(wǎng)域管理員會(huì)有所幫助!此外,配置錯(cuò)誤的本機(jī)原則設(shè)定或不正確的登錄項(xiàng)目也可能導(dǎo)致錯(cuò)誤。即

預(yù)設(shè)情況下,Windows11上的標(biāo)題列顏色取決於您選擇的深色/淺色主題。但是,您可以將其變更為所需的任何顏色。在本指南中,我們將討論三種方法的逐步說明,以更改它並個(gè)性化您的桌面體驗(yàn),使其具有視覺吸引力。是否可以更改活動(dòng)和非活動(dòng)視窗的標(biāo)題列顏色?是的,您可以使用「設(shè)定」套用變更活動(dòng)視窗的標(biāo)題列顏色,也可以使用登錄編輯程式變更非活動(dòng)視窗的標(biāo)題列顏色。若要了解這些步驟,請前往下一部分。如何在Windows11中變更標(biāo)題列的顏色? 1.使用「設(shè)定」應(yīng)用程式按+開啟設(shè)定視窗。 WindowsI前往“個(gè)人化”,然

工作列縮圖可能很有趣,但它們也可能分散注意力或煩人??紤]到您將滑鼠懸停在該區(qū)域的頻率,您可能無意中關(guān)閉了重要視窗幾次。另一個(gè)缺點(diǎn)是它使用更多的系統(tǒng)資源,因此,如果您一直在尋找一種提高資源效率的方法,我們將向您展示如何停用它。不過,如果您的硬體規(guī)格可以處理它並且您喜歡預(yù)覽版,則可以啟用它。如何在Windows11中啟用工作列縮圖預(yù)覽? 1.使用「設(shè)定」應(yīng)用程式點(diǎn)擊鍵並點(diǎn)選設(shè)定。 Windows按一下系統(tǒng),然後選擇關(guān)於。點(diǎn)選高級系統(tǒng)設(shè)定。導(dǎo)航至“進(jìn)階”選項(xiàng)卡,然後選擇“效能”下的“設(shè)定”。在「視覺效果」選

您是否在Windows安裝程式頁面上看到「出現(xiàn)問題」以及「OOBELANGUAGE」語句? Windows的安裝有時(shí)會(huì)因此類錯(cuò)誤而停止。 OOBE表示開箱即用的體驗(yàn)。正如錯(cuò)誤提示所表示的那樣,這是與OOBE語言選擇相關(guān)的問題。沒有什麼好擔(dān)心的,你可以透過OOBE螢?zāi)槐旧淼钠猎]冊表編輯來解決這個(gè)問題??焖傩迯?fù)–1.點(diǎn)選OOBE應(yīng)用底部的「重試」按鈕。這將繼續(xù)進(jìn)行該過程,而不會(huì)再打嗝。 2.使用電源按鈕強(qiáng)制關(guān)閉系統(tǒng)。系統(tǒng)重新啟動(dòng)後,OOBE應(yīng)繼續(xù)。 3.斷開系統(tǒng)與網(wǎng)際網(wǎng)路的連接。在脫機(jī)模式下完成OOBE的所

在Windows11上的顯示縮放方面,我們都有不同的偏好。有些人喜歡大圖標(biāo),有些人喜歡小圖標(biāo)。但是,我們都同意擁有正確的縮放比例很重要。字體縮放不良或圖像過度縮放可能是工作時(shí)真正的生產(chǎn)力殺手,因此您需要知道如何自訂以充分利用系統(tǒng)功能。自訂縮放的優(yōu)點(diǎn):對於難以閱讀螢?zāi)簧系奈淖值娜藖碚f,這是一個(gè)有用的功能。它可以幫助您一次在螢?zāi)簧喜榭锤鄡?nèi)容。您可以建立僅適用於某些監(jiān)視器和應(yīng)用程式的自訂擴(kuò)充功能設(shè)定檔??梢詭椭岣叩碗A硬體的效能。它使您可以更好地控制螢?zāi)簧系膬?nèi)容。如何在Windows11

螢?zāi)涣炼仁鞘褂矛F(xiàn)代計(jì)算設(shè)備不可或缺的一部分,尤其是當(dāng)您長時(shí)間注視螢?zāi)粫r(shí)。它可以幫助您減輕眼睛疲勞,提高易讀性,並輕鬆有效地查看內(nèi)容。但是,根據(jù)您的設(shè)置,有時(shí)很難管理亮度,尤其是在具有新UI更改的Windows11上。如果您在調(diào)整亮度時(shí)遇到問題,以下是在Windows11上管理亮度的所有方法。如何在Windows11上變更亮度[10種方式解釋]單一顯示器使用者可以使用下列方法在Windows11上調(diào)整亮度。這包括使用單一顯示器的桌上型電腦系統(tǒng)以及筆記型電腦。讓我們開始吧。方法1:使用操作中心操作中心是訪問

Windows上的啟動(dòng)過程有時(shí)會(huì)突然轉(zhuǎn)向顯示包含此錯(cuò)誤代碼0xc004f069的錯(cuò)誤訊息。雖然啟動(dòng)程序已經(jīng)聯(lián)機(jī),但一些運(yùn)行WindowsServer的舊系統(tǒng)可能會(huì)遇到此問題。透過這些初步檢查,如果這些檢查不能幫助您啟動(dòng)系統(tǒng),請?zhí)街饕鉀Q方案以解決問題。解決方法–關(guān)閉錯(cuò)誤訊息和啟動(dòng)視窗。然後,重新啟動(dòng)電腦。再次從頭開始重試Windows啟動(dòng)程序。修復(fù)1–從終端啟動(dòng)從cmd終端啟動(dòng)WindowsServerEdition系統(tǒng)。階段–1檢查Windows伺服器版本您必須檢查您使用的是哪種類型的W
