7

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

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

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

有了这个,我得到:

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

有任何想法吗 ?

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

谢谢 !

4

4 回答 4

6

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

对于安全模式(http://php.net/manual/en/function.fopen.php),php doc 的说明如下:

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

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

于 2012-04-29T21:26:13.887 回答
1

我有同样的问题:文件夹是 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());
}
于 2017-01-16T13:34:46.217 回答
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" );
于 2012-04-30T00:36:46.707 回答
0

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

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

一旦我授予类文件的权限,它就可以正常工作。也许虚拟主机更改了他们的配置中的某些内容,因为直到几天前一切正常。

于 2014-09-11T12:30:52.703 回答