本文目錄一覽:
filesystem.copyfile 有文件卻拷貝失敗
filesystem.copyfile 有文件卻拷貝失敗的解決方法如下:
先在自己的D盤上建一aa.txt,
再用IE,地址欄輸入\\shd01\d\aa.txt
注意對方給你的許可權,如對方是Win2000系統,則要求你是對方的一個用戶
ORG/Net庫的FileSystem.class.php文件中copyFile和moveFile函數,函數傳入參數都是$old_path,$new_path,$name,函數內部卻使用了
$old_name = iconv($this-config[‘charset’],’GBK’,$old_name);
$new_name = iconv($this-config[‘charset’],’GBK’,$new_name);
PHP中的文件系統函數(一)
從這篇文章開始,我們將學習一系列的 PHP 文件系統相關函數。其實這些函數中,有很多都是我們經常用到的,大家並不需要刻意地去記住它們,只要知道有這麼個東西,在使用的時候記得來查文檔就可以了。
文件路徑相關的函數往往在一些框架中會比較常見,而且多會配合 __FILE__ 、 __DIR__ 之類的魔術常量使用。
basename() 函數是獲得路徑中的文件名,它有兩個參數,第一個是文件的路徑,第二個是過濾掉的內容,比如第一條測試語句我們過濾掉文件的後綴名。
dirname() 返回的是路徑中的路徑部分,也就是不包含文件名的那部分內容,和 basename() 正好是相反的功能。
pathinfo() 函數用於以數組的形式返迴路徑中的信息,從結果來看,我們可以看到文件的 dirname 部分,basename 部分,以及文件的擴展名 extension 和不包含擴展名的 filename 內容。
realpath() 返回的是規範化的絕對路徑名,它擴展所有的符號連接並且處理輸入的路徑中的 ./ 、 ../ 以及多餘的 / ,返回的內容是標準規範的絕對路徑。
接下來,我們學習一些修改文件相關屬性的函數,主要就是在 Linux 系統環境中的文件許可權信息的操作。
當然,首先我們得創建一個文件。和 Linux 中的命令是非常類似的。
touch() 函數除了給出要創建的文件名之外,還有兩個可選參數可以指定文件的創建時間及訪問時間,不給參數的話默認就是當前時間。這個文件名可以是相對或絕對路徑中有許可權的目錄,並在該目錄下創建一個空的文件。
通過 fileowner() 函數,我們可以獲得某個文件所屬的用戶,默認情況下我們的用戶是當前運行 PHP 腳本的用戶,也就是系統目前的登錄用戶。在這裡,我們使用 chown() 函數,將用戶改為 www 用戶。clearstatcache() 是用於清理文件系統的緩存信息,如果不清理一下的話,fileowner() 返回的依然還是之前的用戶信息。
同理,使用 filegroup() 函數獲得文件的屬組信息,chgrp() 用於修改文件的屬組。fileperms() 用於返迴文件的許可權信息,它返回的是數字模式的文件訪問許可權,這裡我們使用 sprintf() 格式化結果後獲得我們常用的 Linux 系統許可權格式。chmod() 函數用於修改文件的許可權,它的許可權參數是三個 8 進位數據組成的數字,也就是代表 Linux 系統中的 1 、2 、4 和它們的組合,所以我們需要在前面再加上一個 0 用於確保操作能夠正常執行。關於系統文件許可權的知識大家需要認真學習 Linux 系統中相關的內容。
注意,上述函數如果在命令行中運行失敗,大部分原因是沒有許可權,可以使用 sudo 進行測試。在 fastcgi 中運行時,就更加需要注意許可權問題,僅在我們伺服器可以操作的目錄中進行安全的文件許可權修改。
stat() 函數可以獲取到指定文件的所有屬性信息,在這裡我們可以看到文件的 uid 、 gid 、 ctime 、 mtime 等信息。
在 Linux 系統中,有軟連接和硬連接的相關知識。其實軟連接就像是 Windows 中的快捷方式,而硬連接相關於複製了一份數據。在 PHP 中,也為我們提供了創建軟硬連接以及相關的一些操作。
使用 link() 函數創建的就是一個指定文件的硬連接文件,而使用 symlink() 創建的則是一個軟連接文件。相對來說,我們使用軟連接的場景會更多一些。lstat() 就和 stat() 函數的功能一樣,查看文件的各種屬性信息,不過 lstat() 函數針對的是軟硬連接文件。
同樣地,我們也可以修改軟硬連接的用戶和用戶組信息,不過它們的信息不能通過 fileowner() 或 filegroup() 查看。因為它們是連接文件,本身還是和原始文件綁定在一起的,使用 fileowner() 這類的函數查看到的依然是原始文件的信息。我們可以在系統環境中使用 ls -l 查看連接文件的用戶和用戶組信息是否修改成功。
今天的內容比較簡單,而且修改許可權的操作也並不常用。不過對於系統安全來,它們還是非常有用的,比如對於上傳來說,我們要預防上傳可執行文件的話,就可以通過修改文件的許可權來讓文件無法直接運行,從而起到安全保護的作用。另外,目錄路徑相關的操作也是一些框架的基礎,幾乎所有框架的入口或者說是 Composer 的入口,都會見到 dirname() 以及 basename() 之類函數的身影。
測試代碼:
中的文件系統函數(一).php
參考文檔:
PHP-Filesystem函數簡介文件系統操作-php實例教程
fwrite()寫入文件。3glob()返回一個包含匹配指定模式的文件名/目錄的數組。4is_dir()判斷指定的文件名是否是一個目錄。3is_executable()判斷文件是否可執行。3is_file()判斷指定文件是否為常規的文件。3is_link()判斷指定的文件是否是連接。3is_readable()判斷文件是否可讀。3is_uploaded_file()判斷文件是否是通過
HTTP
POST
上傳的。3is_writable()判斷文件是否可寫。4is_writeable()is_writable()
的別名。3link()創建一個硬連接。3linkinfo()返回有關一個硬連接的信息。3lstat()返回關於文件或符號連接的信息。3mkdir()創建目錄。3move_uploaded_file()將上傳的文件移動到新位置。4parse_ini_file()解析一個配置文件。4pathinfo()返回關於文件路徑的信息。4pclose()關閉有
popen()
打開的進程。3popen()打開一個進程。3readfile()讀取一個文件,並輸出到輸出緩衝。3readlink()返回符號連接的目標。3realpath()返回絕對路徑名。4rename()重名名文件或目錄。3rewind()倒迴文件指針的位置。3rmdir()刪除空的目錄。3set_file_buffer()設置已打開文件的緩衝大小。3stat()返回關於文件的信息。3symlink()創建符號連接。3tempnam()創建唯一的臨時文件。3tmpfile()建立臨時文件。3touch()設置文件的訪問和修改時間。3umask()改變文件的文件許可權。3unlink()刪除文件。3
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/232073.html