PHP中的文件系統(tǒng)函數(shù)有哪些,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。
十載的田林網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都營銷網(wǎng)站建設(shè)的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整田林建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)從事“田林網(wǎng)站設(shè)計(jì)”,“田林網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
文件路徑相關(guān)的函數(shù)往往在一些框架中會(huì)比較常見,而且多會(huì)配合 \_\_FILE\_\_ 、 \_\_DIR\_\_ 之類的魔術(shù)常量使用。
echo "1) ".basename("/etc/sudoers.d", ".d"), PHP_EOL; echo "2) ".basename("/etc/passwd"), PHP_EOL; echo "3) ".basename("/etc/"), PHP_EOL; echo "4) ".basename("."), PHP_EOL; echo "5) ".basename("/"), PHP_EOL; echo "6) ".basename("/usr/local/Cellar/php/7.3.9_1/README.md"), PHP_EOL; // 1) sudoers // 2) passwd // 3) etc // 4) . // 5) // 6) README.md
basename() 函數(shù)是獲得路徑中的文件名,它有兩個(gè)參數(shù),第一個(gè)是文件的路徑,第二個(gè)是過濾掉的內(nèi)容,比如第一條測試語句我們過濾掉文件的后綴名。
echo "1) " . dirname("/etc/passwd") , PHP_EOL; echo "2) " . dirname("/etc/") , PHP_EOL; echo "3) " . dirname("."), PHP_EOL; // 1) /etc // 2) / // 3) .
dirname() 返回的是路徑中的路徑部分,也就是不包含文件名的那部分內(nèi)容,和 basename() 正好是相反的功能。
print_r(pathinfo('/usr/local/Cellar/php/7.3.9_1/README.md')); // Array // ( // [dirname] => /usr/local/Cellar/php/7.3.9_1 // [basename] => README.md // [extension] => md // [filename] => README // ) echo realpath('./../../..//../etc/passwd'), PHP_EOL; // /private/etc/passwd
pathinfo() 函數(shù)用于以數(shù)組的形式返回路徑中的信息,從結(jié)果來看,我們可以看到文件的 dirname 部分,basename 部分,以及文件的擴(kuò)展名 extension 和不包含擴(kuò)展名的 filename 內(nèi)容。
realpath() 返回的是規(guī)范化的絕對(duì)路徑名,它擴(kuò)展所有的符號(hào)連接并且處理輸入的路徑中的 ./ 、 ../ 以及多余的 / ,返回的內(nèi)容是標(biāo)準(zhǔn)規(guī)范的絕對(duì)路徑。
接下來,我們學(xué)習(xí)一些修改文件相關(guān)屬性的函數(shù),主要就是在 Linux 系統(tǒng)環(huán)境中的文件權(quán)限信息的操作。
當(dāng)然,首先我們得創(chuàng)建一個(gè)文件。和 Linux 中的命令是非常類似的。
touch('test3.txt');
touch() 函數(shù)除了給出要?jiǎng)?chuàng)建的文件名之外,還有兩個(gè)可選參數(shù)可以指定文件的創(chuàng)建時(shí)間及訪問時(shí)間,不給參數(shù)的話默認(rèn)就是當(dāng)前時(shí)間。這個(gè)文件名可以是相對(duì)或絕對(duì)路徑中有權(quán)限的目錄,并在該目錄下創(chuàng)建一個(gè)空的文件。
echo fileowner('test.txt'), PHP_EOL; // 501 chown('test.txt', 'www'); clearstatcache(); echo fileowner('test.txt'), PHP_EOL; // 70
通過 fileowner() 函數(shù),我們可以獲得某個(gè)文件所屬的用戶,默認(rèn)情況下我們的用戶是當(dāng)前運(yùn)行 PHP 腳本的用戶,也就是系統(tǒng)目前的登錄用戶。在這里,我們使用 chown() 函數(shù),將用戶改為 www 用戶。clearstatcache() 是用于清理文件系統(tǒng)的緩存信息,如果不清理一下的話,fileowner() 返回的依然還是之前的用戶信息。
echo filegroup('test.txt'), PHP_EOL; // 20 chgrp('test.txt', 'www'); clearstatcache(); echo filegroup('test.txt'), PHP_EOL; // 70 echo substr(sprintf('%o', fileperms('test.txt')), -4), PHP_EOL; // 0766 chmod('test.txt', 0777); clearstatcache(); echo substr(sprintf('%o', fileperms('test.txt')), -4), PHP_EOL; // 0777
同理,使用 filegroup() 函數(shù)獲得文件的屬組信息,chgrp() 用于修改文件的屬組。fileperms() 用于返回文件的權(quán)限信息,它返回的是數(shù)字模式的文件訪問權(quán)限,這里我們使用 sprintf() 格式化結(jié)果后獲得我們常用的 Linux 系統(tǒng)權(quán)限格式。chmod() 函數(shù)用于修改文件的權(quán)限,它的權(quán)限參數(shù)是三個(gè) 8 進(jìn)制數(shù)據(jù)組成的數(shù)字,也就是代表 Linux 系統(tǒng)中的 1 、2 、4 和它們的組合,所以我們需要在前面再加上一個(gè) 0 用于確保操作能夠正常執(zhí)行。關(guān)于系統(tǒng)文件權(quán)限的知識(shí)大家需要認(rèn)真學(xué)習(xí) Linux 系統(tǒng)中相關(guān)的內(nèi)容。
注意,上述函數(shù)如果在命令行中運(yùn)行失敗,大部分原因是沒有權(quán)限,可以使用 sudo 進(jìn)行測試。在 fastcgi 中運(yùn)行時(shí),就更加需要注意權(quán)限問題,僅在我們服務(wù)器可以操作的目錄中進(jìn)行安全的文件權(quán)限修改。
print_r(stat('test.txt')); // Array // ( // [0] => 16777220 // [1] => 8707958352 // [2] => 33279 // [3] => 2 // [4] => 70 // [5] => 70 // [6] => 0 // [7] => 0 // [8] => 1603070453 // [9] => 1603070453 // [10] => 1603072836 // [11] => 4096 // [12] => 0 // [dev] => 16777220 // [ino] => 8707958352 // [mode] => 33279 // [nlink] => 2 // [uid] => 70 // [gid] => 70 // [rdev] => 0 // [size] => 0 // [atime] => 1603070453 // [mtime] => 1603070453 // [ctime] => 1603072836 // [blksize] => 4096 // [blocks] => 0 // )
stat() 函數(shù)可以獲取到指定文件的所有屬性信息,在這里我們可以看到文件的 uid 、 gid 、 ctime 、 mtime 等信息。
在 Linux 系統(tǒng)中,有軟連接和硬連接的相關(guān)知識(shí)。其實(shí)軟連接就像是 Windows 中的快捷方式,而硬連接相關(guān)于復(fù)制了一份數(shù)據(jù)。在 PHP 中,也為我們提供了創(chuàng)建軟硬連接以及相關(guān)的一些操作。
link('test.txt', 'ltest.txt'); echo linkinfo('ltest.txt'), PHP_EOL; // 16777220 symlink('test.txt', 'ltest2.txt'); echo linkinfo('ltest2.txt'), PHP_EOL; // 16777220 print_r(lstat('ltest2.txt')); // Array // ( // [0] => 16777220 // [1] => 8707962848 // [2] => 41453 // [3] => 1 // [4] => 0 // [5] => 20 // [6] => 0 // [7] => 8 // [8] => 1603072717 // [9] => 1603072717 // [10] => 1603072717 // [11] => 4096 // [12] => 0 // [dev] => 16777220 // [ino] => 8707962848 // [mode] => 41453 // [nlink] => 1 // [uid] => 0 // [gid] => 20 // [rdev] => 0 // [size] => 8 // [atime] => 1603072717 // [mtime] => 1603072717 // [ctime] => 1603072717 // [blksize] => 4096 // [blocks] => 0 // )
使用 link() 函數(shù)創(chuàng)建的就是一個(gè)指定文件的硬連接文件,而使用 symlink() 創(chuàng)建的則是一個(gè)軟連接文件。相對(duì)來說,我們使用軟連接的場景會(huì)更多一些。lstat() 就和 stat() 函數(shù)的功能一樣,查看文件的各種屬性信息,不過 lstat() 函數(shù)針對(duì)的是軟硬連接文件。
lchown('ltest2.txt', 'zhangyue'); lchgrp('ltest2.txt', 'staff'); // lrwxr-xr-x 1 zhangyue staff 8 Oct 19 09:58 ltest2.txt -> test.txt
同樣地,我們也可以修改軟硬連接的用戶和用戶組信息,不過它們的信息不能通過 fileowner() 或 filegroup() 查看。因?yàn)樗鼈兪沁B接文件,本身還是和原始文件綁定在一起的,使用 fileowner() 這類的函數(shù)查看到的依然是原始文件的信息。我們可以在系統(tǒng)環(huán)境中使用 ls -l 查看連接文件的用戶和用戶組信息是否修改成功。
看完上述內(nèi)容,你們掌握PHP中的文件系統(tǒng)函數(shù)有哪些的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
新聞標(biāo)題:PHP中的文件系統(tǒng)函數(shù)有哪些
路徑分享:http://vcdvsql.cn/article4/gjdeoe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、網(wǎng)站收錄、網(wǎng)頁設(shè)計(jì)公司、、域名注冊、外貿(mào)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)