中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP中的文件系統函數有哪些

發布時間:2021-07-14 11:36:01 來源:億速云 閱讀:142 作者:Leah 欄目:編程語言

PHP中的文件系統函數有哪些,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

文件路徑相關函數

文件路徑相關的函數往往在一些框架中會比較常見,而且多會配合 \_\_FILE\_\_ 、 \_\_DIR\_\_ 之類的魔術常量使用。

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() 函數是獲得路徑中的文件名,它有兩個參數,第一個是文件的路徑,第二個是過濾掉的內容,比如第一條測試語句我們過濾掉文件的后綴名。

echo "1) " . dirname("/etc/passwd") , PHP_EOL;
echo "2) " . dirname("/etc/") , PHP_EOL;
echo "3) " . dirname("."), PHP_EOL;
// 1) /etc
// 2) /
// 3) .

dirname() 返回的是路徑中的路徑部分,也就是不包含文件名的那部分內容,和 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() 函數用于以數組的形式返回路徑中的信息,從結果來看,我們可以看到文件的 dirname 部分,basename 部分,以及文件的擴展名 extension 和不包含擴展名的 filename 內容。

realpath() 返回的是規范化的絕對路徑名,它擴展所有的符號連接并且處理輸入的路徑中的 ./ 、 ../ 以及多余的 / ,返回的內容是標準規范的絕對路徑。

修改文件所屬相關信息

接下來,我們學習一些修改文件相關屬性的函數,主要就是在 Linux 系統環境中的文件權限信息的操作。

當然,首先我們得創建一個文件。和 Linux 中的命令是非常類似的。

touch('test3.txt');

touch() 函數除了給出要創建的文件名之外,還有兩個可選參數可以指定文件的創建時間及訪問時間,不給參數的話默認就是當前時間。這個文件名可以是相對或絕對路徑中有權限的目錄,并在該目錄下創建一個空的文件。

echo fileowner('test.txt'), PHP_EOL; // 501
chown('test.txt', 'www');
clearstatcache();
echo fileowner('test.txt'), PHP_EOL; // 70

通過 fileowner() 函數,我們可以獲得某個文件所屬的用戶,默認情況下我們的用戶是當前運行 PHP 腳本的用戶,也就是系統目前的登錄用戶。在這里,我們使用 chown() 函數,將用戶改為 www 用戶。clearstatcache() 是用于清理文件系統的緩存信息,如果不清理一下的話,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() 函數獲得文件的屬組信息,chgrp() 用于修改文件的屬組。fileperms() 用于返回文件的權限信息,它返回的是數字模式的文件訪問權限,這里我們使用 sprintf() 格式化結果后獲得我們常用的 Linux 系統權限格式。chmod() 函數用于修改文件的權限,它的權限參數是三個 8 進制數據組成的數字,也就是代表 Linux 系統中的 1 、2 、4 和它們的組合,所以我們需要在前面再加上一個 0 用于確保操作能夠正常執行。關于系統文件權限的知識大家需要認真學習 Linux 系統中相關的內容。

注意,上述函數如果在命令行中運行失敗,大部分原因是沒有權限,可以使用 sudo 進行測試。在 fastcgi 中運行時,就更加需要注意權限問題,僅在我們服務器可以操作的目錄中進行安全的文件權限修改。

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() 函數可以獲取到指定文件的所有屬性信息,在這里我們可以看到文件的 uid 、 gid 、 ctime 、 mtime 等信息。

軟硬文件連接相關操作

在 Linux 系統中,有軟連接和硬連接的相關知識。其實軟連接就像是 Windows 中的快捷方式,而硬連接相關于復制了一份數據。在 PHP 中,也為我們提供了創建軟硬連接以及相關的一些操作。

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() 函數創建的就是一個指定文件的硬連接文件,而使用 symlink() 創建的則是一個軟連接文件。相對來說,我們使用軟連接的場景會更多一些。lstat() 就和 stat() 函數的功能一樣,查看文件的各種屬性信息,不過 lstat() 函數針對的是軟硬連接文件。

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() 查看。因為它們是連接文件,本身還是和原始文件綁定在一起的,使用 fileowner() 這類的函數查看到的依然是原始文件的信息。我們可以在系統環境中使用 ls -l 查看連接文件的用戶和用戶組信息是否修改成功。

看完上述內容,你們掌握PHP中的文件系統函數有哪些的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

水富县| 齐河县| 三台县| 阿荣旗| 周口市| 柳河县| 利辛县| 平南县| 谷城县| 台南市| 乐业县| 三明市| 泽库县| 康平县| 泉州市| 宣恩县| 犍为县| 三原县| 武威市| 石嘴山市| 通化市| 上虞市| 辉县市| 崇州市| 惠东县| 安陆市| 依安县| 东丽区| 红原县| 尤溪县| 文水县| 建水县| 鹰潭市| 吐鲁番市| 肇庆市| 偃师市| 河津市| 洪江市| 沁源县| 漳平市| 泌阳县|