代码之家  ›  专栏  ›  技术社区  ›  rxmnnxfpvg

PHP无法在高于它的目录中上载文件

  •  2
  • rxmnnxfpvg  · 技术社区  · 14 年前

    我的php脚本上载了一个文件,但在目录中的级别不能超过它本身。

    例如:它将保存在 upload/ (与脚本处于同一级别的相对路径),但不在 /usr/local/hello/ 即使文件权限是 确切地 相同的。最大上载大小、最大日志大小、执行时间和安全模式关闭都没有问题。有人有什么想法吗?我甚至不能得到一个错误消息——只是 $worked 如果失败,则返回false。

    <?php
    // Removed the rest of the error-checking code!
    $contentDir = "/usr/local/hello/"; // <-- doesn't work, chmod 0777, owner: root, group root
    //$contentDir = "upload/"; <-- works, chmod 0777 owner: root, group: root
    error_reporting(E_ALL);
    $filename = $_FILES["filey"]["name"];
    $worked = move_uploaded_file(
                  $_FILES["filey"]["tmp_name"], 
                  $contentDir.$filename);
    var_dump($worked);
    ?>
    

    编辑:phpinfo()给出的我的open_basedir设置是:

    Directive     Local Value   Master Value
    open_basedir  no value  no value
    

    谢谢!

    3 回复  |  直到 14 年前
        1
  •  4
  •   Mewp    14 年前

    open_basedir 配置变量可能会限制目录。

    open_basedir 在PHP手册中。

        2
  •  1
  •   Community CDub    8 年前

    请给我们看一下 $_FILES['filey']['error'] ,上载文件时出错不会像往常一样报告,而是在该结构中。

    http://php.net/manual/en/features.file-upload.errors.php

    虽然很可能是什么 Mewp

        3
  •  0
  •   Marc B    14 年前

    您正在使用原始客户端文件名作为服务器端文件名。服务器上是否已存在该文件名?目录可能是0777,但是如果该文件名已经存在,那么它也必须可以由Web服务器的uid写入。

    例如,如果你上传的是“resume.doc”,是吗? /usr/local/hello/resume.doc 已经存在了吗?如果不是模式0777,则 move_uploaded_file() 会失败。

    这个 docs 声明如果源文件 一个有效的上传文件,但由于任何原因移动失败,将发出警告,因此请检查您的PHP错误日志。