【问题标题】:fopen returns false on subdirecoryfopen 在子目录上返回 false
【发布时间】:2012-08-02 16:26:58
【问题描述】:

您好,我正在尝试将图像文件从我的 android 应用程序上传到我的服务器。似乎我无法将任何文件上传到我的服务器而不是特定目录(图片)。如果我尝试上传到图片的子目录,那么 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 错误日志

[2012 年 8 月 2 日星期四 18:32:34] [错误] [客户端 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 [2012 年 8 月 2 日星期四 18:32:34] [错误] [客户端 xx.xx.Xxx.xx] PHP 警告:fopen(/var/www/html/pics/53/5344.jpg):无法打开流:第 23 行的 /var/www/html/uploadshaimage.php 中没有这样的文件或目录

【问题讨论】:

  • 您还必须检查 $dir1 实际上是一个目录 - 它可能是一个具有相同名称的普通文件。并且还必须检查is_writeable()
  • 有错误吗?检查错误日志。
  • 如果 $dir1 不存在,它实际上会创建它并赋予它适当的权限,至于 is_writeable() 你的意思是文件吗?
  • 如果 fopen 返回 false,您应该会收到警告(在日志中或屏幕上,具体取决于 display_errors 的设置)。警告内容是什么?

标签: php android apache centos


【解决方案1】:
  1. 文件夹权限
  2. PHP.ini 设置 - 允许打开 url 或未启用文件功能。
  3. 错误的路径 - 验证文件或路径是否正确或确实存在。

【讨论】:

  • file_exists,function_exists,is_writable
  • 1.folder 权限设置为777 2.allow_url_open 开启,php.ini 上找不到file_functions 3.Path 已检查!
【解决方案2】:

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


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

【讨论】:

    【解决方案3】:

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

    A.在 php.ini 上关闭 safe_mode(有点冒险!)

    B.将 pics 目录的权限递归地赋予子目录(gid 是问题!)

    感谢大家的帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-27
      • 2018-01-17
      • 1970-01-01
      • 1970-01-01
      • 2011-05-03
      • 1970-01-01
      • 2019-05-16
      • 1970-01-01
      相关资源
      最近更新 更多