由於這篇文章的標題的文件否認的是幾乎不言自明,我就跳到代碼:的fopen權限與777個權限
echo sprintf('%o', fileperms('test.txt'))."<br/>";
fopen("test.txt", "w");
而與此我得到:
100777
fopen(test.txt): failed to open stream: Permission denied
任何想法?
編輯:問題解決:服務器上存在未正確配置的訪問控制列表。
謝謝!
由於這篇文章的標題的文件否認的是幾乎不言自明,我就跳到代碼:的fopen權限與777個權限
echo sprintf('%o', fileperms('test.txt'))."<br/>";
fopen("test.txt", "w");
而與此我得到:
100777
fopen(test.txt): failed to open stream: Permission denied
任何想法?
編輯:問題解決:服務器上存在未正確配置的訪問控制列表。
謝謝!
我認爲它可能對文件有寫/讀權限,但對文件夾沒有寫權限。在您的網站的公共根目錄中查看,看看您是否可以讀取或寫入文件。
對於安全模式(http://php.net/manual/en/function.fopen.php),PHP文檔說以下內容:
注:當安全模式被激活,PHP將檢查 該腳本的操作的目錄是否有相同的UID(所有者)作爲正在執行的腳本 。
最後你還需要確保php有權訪問你正在嘗試寫入的文件夾。
我會看看安全模式是否啓用。至於該文件夾,權限也設置爲777. – personne3000
我想你所遇到的問題是文件的所有權問題......你可以用它來找出問題
error_reporting(E_ALL);
ini_set('display_errors','On');
$file = "a.jpg";
echo sprintf ('%o', fileperms ($file)), PHP_EOL;
echo posix_getpwuid (fileowner ($file)), PHP_EOL; // Get Owner
echo posix_getpwuid (posix_getuid()), PHP_EOL; // Get User
if (is_file ($file)) {
echo "is_file", PHP_EOL;
;
}
if (is_readable ($file)) {
echo "is_readable", PHP_EOL;
;
}
if (is_writable ($file)) {
echo "is_readable", PHP_EOL;
}
fopen ($file, "w");
感謝您的答案,一切運行良好,直到「is_writable」(該文件顯然不是)。所有者和用戶不是一樣的,但它不應該是一個問題,因爲每個用戶都有對這個文件的寫權限......對嗎? – personne3000
這可能是一個問題......除非你有root用戶..你很多人不能寫入文件.. .try通過'chown'改變所有權http://php.net/manual/en/function .chown.php和chnage文件許可,使用'chmod' http://php.net/manual/en/function.chmod.php – Baba
我會要求服務器管理員來做這個事情。但是,我仍然不明白爲什麼PHP不能寫入一個文件,如果所有用戶都被允許寫入文件:-s – personne3000
我只是碰到了這個問題,不幸的是,錯誤信息沒有提供任何線索實際的原因。我必須將777賦給包含在給出錯誤信息的文件中的類的文件。該錯誤信息僅表示調用該類的php文件,該文件已經具有777.
因此,請檢查錯誤消息(比如說index.php)中提到的文件,然後檢查哪些類在其中實例化該文件(class-file.php,class-writer.php等)。然後檢查這些文件的權限(class-file.php,class-writer.php)。
一旦我授予了類文件的權限,它就可以正常工作。也許網絡主機改變了他們的配置,因爲一切工作到幾天前。
我有同樣的問題:文件夾是777,但fopen不起作用。 fopen表示允許否認。確保您的腳本具有「良好」的權限。也許它會幫助你:
echo $dst, file_exists($dst) ? ' exists' : ' does not exist', "\n";
echo $dst, is_readable($dst) ? ' is readable' : ' is NOT readable', "\n";
echo $dst, is_writable($dst) ? ' is writable' : ' is NOT writable', "\n";
$fh = fopen($dst, 'w');
if (!$fh) {
echo ' last error: ';
var_dump(error_get_last());
}
也許SElinux阻止你?在文件上試試'ls -Z'。 – kichik