由于这篇文章的标题的文件否认的是几乎不言自明,我就跳到代码:的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