簡體   English   中英

fopen對具有777權限的文件的權限被拒絕

[英]fopen Permission denied on a file with 777 permissions

由於這篇文章的標題幾乎是不言自明的,我只是跳到代碼:

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 doc說如下:

注意:啟用安全模式后,PHP會檢查腳本運行的目錄是否與正在執行的腳本具有相同的UID(所有者)。

最后,您還需要確保php可以訪問您嘗試寫入的文件夾。

我認為你遇到的問題是文件所有權問題......你可以用它來找出問題所在

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" );

我剛遇到這個問題,不幸的是錯誤信息沒有提供實際原因的線索。 我必須將777提供給包含在提供錯誤消息的文件中的類的文件。 錯誤消息只表示調用該類的php文件,該文件已經有777。

因此,檢查錯誤消息中提到的文件(比如index.php),然后檢查在該文件中實例化的類(class-file.php,class-writer.php等)。 然后檢查這些文件的權限(class-file.php,class-writer.php)。

一旦我賦予了類文件的權限,它就能正常工作。 也許webhost在他們的配置中改變了一些東西,因為一切都工作到幾天前。

我有同樣的問題:文件夾是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());
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM