我用php建立一个文件夹。设置0777权限。用file_put_content写入文件报错:
failed to open stream: Permission denied'
1、首先想到的就是权限问题,我用函数判断创建的文件夹是否有可写权限。我创建test.txt测试,可以成功。
还有奇怪的是,程序往里面写入十几个文件都成功,但写到某个文件就报错了。如果没有可写权限,应该是一个文件都没有创建成功才是呀。
2、路径是正确的,这点检查很多遍了。
此外我想不到其他可能性了。麻烦高手指点一下,谢谢。
可能是目标文件存在,并被其他软件打开了
出现错误而时候,应给出完整的错误信息和出错行的代码(如果涉及到变量,则变量值应一并给出)
可能是目标文件存在,并被其他软件打开了
出现错误而时候,应给出完整的错误信息和出错行的代码(如果涉及到变量,则变量值应一并给出)
出错情况我已经简练的概括了要点了。详细报错如下:
Uncaught error with message 'E_WARNING: file_put_contents(E:\AppServ\www\phpwind\upload\/windid/attachment/avatar/000/00/05/515_middle.jpg) [function.file-put-contents]: failed to open stream: Permission denied'
出错行:$put_re = file_put_contents($avatar_dir_save, $img_re);//写入头像
$img_re这个变量是一个图像。我换成随便的一个字符串比如“3453”也不行。
$avatar_dir_save这个变量主要是提示报错中的那个路径,路径检查正确无误。
在写入文件之前,我都会判断文件是否存在才会执行这些代码。而且我看了当报错说写入不了那个文件时,我看了文件夹,的确没有那个文件。
想不出还有什么可能性了。
此外,http进程是system用户组。查看文件夹的权限,这个用户组是有权限的。
is_writable -- 判断给定的文件名是否可写
is_writable -- 判断给定的文件名是否可写
我用的是discuz的函数
public static function dirWriteable($dir) {
$writeable = 0;
if(!is_dir($dir)) {
exit('sdg');
@mkdir($dir, 0777);
}
if(is_dir($dir)) {
if($fp = @fopen("$dir/test.txt", 'w')) {
@fclose($fp);
@unlink("$dir/test.txt");
$writeable = 1;
} else {
$writeable = 0;
}
}
return $writeable;
}
如果文件夹不可写,应该是一个文件都写不进去才是,为何写入十几个才出错?这个很麻烦
贴出你代码瞧瞧,是不是你写循环出现问题。
命名问题?如果是写到了某个文件,是单独只有一个还是有规律的几个,还是散乱的,这些都去试试
命名问题?如果是写到了某个文件,是单独只有一个还是有规律的几个,还是散乱的,这些都去试试
假设命名是胡乱命名的,但是出错的时候,显示的文件路径也是对的。所以文件名已经不重要了。路径对就行了。
命名问题?如果是写到了某个文件,是单独只有一个还是有规律的几个,还是散乱的,这些都去试试
散乱的。有时候一运行就出现错误,有时候第5个,第11个都有可能。
命名问题?如果是写到了某个文件,是单独只有一个还是有规律的几个,还是散乱的,这些都去试试
散乱的。有时候一运行就出现错误,有时候第5个,第11个都有可能。
整个文件路径长度,试试段路径,若不行,换机试试- -若还不行,建议放弃原有的DZ论坛的文件,自己写一个