记录一次PHP无法写入文件的问题

代码如下:

ob_start();
readfile($url);
$img=ob_get_contents();
ob_end_clean();
$fp2=@fopen($path,'a');
fwrite($fp2,$img);
fclose($fp2);

就是从url下载图片然后存到磁盘。本地测试正常,上传到服务器就不行了。根本没有写入文件。
把以上代码单独放到一个文件中,提示:

"Warning: fwrite() expects parameter 1 to be resource, boolean give
fwrite函数第一个参数应该是fopen()创建的文件指针,但是接受到了布尔值"。

说明fopen返回了false。打开文件流失败。
怀疑是目录权限问题。把目录所有者设置为www,权限设置为777,仍然返回false。
搜索后发现原来是@符号把fopen的错误屏蔽了。实际上系统提示了:

"fopen(): open_basedir restriction in effect.
File(/home/wwwroot/aa/bb/cc/4292-set.txt) is not within the allowed
path(s): (/home/wwwroot/default:/tmp/:/proc/) in
/home/wwwroot/xx/yy/f.php on line 23
由于open_basedir的限制,文件(/home/wwwroot/aa/bb/cc/4292-set.txt)不在允许的目录内,所以不能打开。允许的进行文件操作的目录为(/home/wwwroot/default:/tmp/:/proc/)"。

只要将要写入的目录添加到php.ini的open_basedir即可,当然原有的值也要添加,用冒号隔开,否则会出现无法写入session而导致的“session_start(): Failed to initialize storage module: files (path: )”错误。

添加新评论