fopen在子目录中返回false

时间:2012-08-02 16:26:58

标签: php android apache centos

您好我正在尝试从我的Android应用程序上传图像文件到我的服务器。似乎我无法将任何文件上传到我的服务器而不是特定的目录(图片)。如果我尝试上传到pics的子目录,那么fopen返回false。 这是我的php文件

<?php
$base=$_REQUEST['image'];
$picname=$_REQUEST['picname'];
$binary=base64_decode($base);

header('Content-Type: bitmap; charset=utf-8');

//$shapicname = SHA1($picname);

$dir1 = 'pics/'.substr($picname,0,2);
$dir2 = substr($picname,2,2);

$targetfilename1 = $dir1;
$targetfilename2 =  $dir2;

if (!file_exists($dir1)) {
    mkdir($dir1); //create the directory
    chmod($targetfilename1, 0777); //make it writable
}

//chdir($dir1);

$file = fopen('/var/www/html/'.$dir1.'/'.$picname, 'wb');


if (!$file) {
   echo "false ".$dir1.$picname;
}
else {
   $fwrite = fwrite($file,$binary);

   fclose($file);

   echo "uploaded".$fwrite.$file;
}
?>

pics文件夹归apache用户所有,拥有0777权限

有什么想法吗?

我发布了php错误日志

[Thu Aug 02 18:32:34 2012] [error] [client xx.xx.Xxx.xx] PHP警告:fopen():安全模式限制有效。 uid / gid为0/0的脚本不允许访问第23行/var/www/html/uploadshaimage.php中uid / gid 48/48所拥有的/ var / www / html / pics / 53 [Thu Aug 02 18:32:34 2012] [error] [client xx.xx.Xxx.xx] PHP警告:fopen(/var/www/html/pics/53/5344.jpg):无法打开流:第23行的/var/www/html/uploadshaimage.php中没有这样的文件或目录

3 个答案:

答案 0 :(得分:1)

  1. 文件夹权限
  2. PHP.ini设置 - 允许网址打开或文件功能未启用。
  3. 错误路径 - 验证文件或路径是否正确或确实存在。

答案 1 :(得分:0)

你知道,我不禁想知道,你确定路径真的是'/var/www/html/'.$dir1.'/'.$picname吗?您使用$dir1的相对路径,但fopen中的绝对路径。如果您从一开始就将$dir1设置为绝对路径会发生什么?


FWIW,您输出的内容也有错误的内容类型。

答案 2 :(得分:0)

好的我找到了2个解决方案

一个。在php.ini上关闭safe_mode(有点危险!)

B中。递归地将pics目录的权限提供给子目录(gid是问题!)

感谢大家的帮助