fopen对具有777权限的文件的权限被拒绝

时间:2012-04-29 21:16:50

标签: php fopen file-permissions

由于这篇文章的标题几乎是不言自明的,我只是跳到代码:

echo sprintf('%o', fileperms('test.txt'))."<br/>";

fopen("test.txt", "w");

有了这个,我得到了:

100777
fopen(test.txt): failed to open stream: Permission denied

有什么想法吗?

编辑:问题已解决:服务器上存在未正确配置的访问控制列表。

谢谢!

4 个答案:

答案 0 :(得分:4)

我认为您可能对文件具有写入/读取权限,但对文件夹没有。在您网站的公共根目录中尝试此操作,看看您是否可以读取或写入该文件。

对于安全模式(http://php.net/manual/en/function.fopen.php),php doc会说以下内容:

  

注意:启用安全模式后,PHP会检查目录中是否存在   脚本正在运行的脚本与脚本具有相同的UID(所有者)   正在执行。

最后,您还需要确保php可以访问您尝试写入的文件夹。

答案 1 :(得分:0)

我认为你遇到的问题是文件所有权问题......你可以用它来找出问题

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

答案 2 :(得分:0)

我刚遇到这个问题,不幸的是错误信息没有提供实际原因的线索。我必须将777提供给包含在提供错误消息的文件中的类的文件。错误消息只表示调用该类的php文件,该文件已经有777。

因此,检查错误消息中提到的文件(让我们说index.php),然后检查在该文件中实例化的类(class-file.php,class-writer.php,等等)。然后检查这些文件的权限(class-file.php,class-writer.php)。

一旦我为类文件授予权限,它就能正常工作。也许webhost在他们的配置中改变了一些东西,因为一切都工作到几天前。

答案 3 :(得分:0)

我有同样的问题:文件夹是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());
}