我用php建立一个文件夹。设置0777权限。用file_put_content写入文件报错:
failed to open stream: Permission denied'1、首先想到的就是权限问题,我用函数判断创建的文件夹是否有可写权限。我创建test.txt测试,可以成功。
还有奇怪的是,程序往里面写入十几个文件都成功,但写到某个文件就报错了。如果没有可写权限,应该是一个文件都没有创建成功才是呀。2、路径是正确的,这点检查很多遍了。此外我想不到其他可能性了。麻烦高手指点一下,谢谢。

解决方案 »

  1.   


    出错情况我已经简练的概括了要点了。详细报错如下:Uncaught error with message 'E_WARNING: file_put_contents(E:\AppServ\www\phpwind\upload\/windid/attachment/avatar/000/00/05/515_middle.jpg) [<a href='function.file-put-contents'>function.file-put-contents</a>]: failed to open stream: Permission denied'出错行:$put_re = file_put_contents($avatar_dir_save, $img_re);//写入头像
    $img_re这个变量是一个图像。我换成随便的一个字符串比如“3453”也不行。
    $avatar_dir_save这个变量主要是提示报错中的那个路径,路径检查正确无误。在写入文件之前,我都会判断文件是否存在才会执行这些代码。而且我看了当报错说写入不了那个文件时,我看了文件夹,的确没有那个文件。想不出还有什么可能性了。
      

  2.   

    此外,http进程是system用户组。查看文件夹的权限,这个用户组是有权限的。
      

  3.   

    is_writable -- 判断给定的文件名是否可写
      

  4.   


    我用的是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;
    }如果文件夹不可写,应该是一个文件都写不进去才是,为何写入十几个才出错?这个很麻烦