【问题标题】:I keep getting UPLOAD_ERR_NO_TMP_DIR while uploading file using PHP使用 PHP 上传文件时,我不断收到 UPLOAD_ERR_NO_TMP_DIR
【发布时间】:2017-06-30 14:14:32
【问题描述】:

我正在尝试使用 PHP 7.0.15 在 Fedora 25(32 位)上的 Apache 服务器上上传文件。

我收到 UPLOAD_ERR_NO_TMP_DIR 错误,尽管我已经为上传目录设置了适当的(甚至超过了我应该拥有的,但我目前在本地工作)权限并且我已经更改目录的所有者为 apache。

我正在尝试上传一个 6kB 大的 .docx 文件,我在 php.ini 中的 upload_tmp_dir 设置为 /home/temporary

ls -l 返回以下代码:

drwxrwxrwx.  2 apache root           4096 Feb 11 20:14 temporary

sys_get_tmp_dir() 返回正确路径:/home/temporary

但我仍然收到错误 6

debug outputArray
(
[userfile] => Array
    (
        [name] => rus.docx
        [type] => 
        [tmp_name] => 
        [error] => 6
        [size] => 0
    )
)

什么会导致这个问题?

【问题讨论】:

  • php 接受你的 upload_tmp_dir 吗?在运行时检查 phpinfo() 中的正确值?
  • @Roman 是的,那里的路径是正确的,所以问题可能出在权限的某个地方
  • 尝试更改 php.ini 中的 tmp 目录
  • 很可能 SELinux(或您的发行版拥有的工具)不允许从对世界开放的服务(例如 http)访问主目录(从概念上讲是私有的)。
  • 运行ls -halZ /home/temporary会得到什么?

标签: php linux apache server fedora-25


【解决方案1】:

将临时目录放在/var/www/var/www/html下。

除此操作外,您还需要通过 semanage 授予 Apacherewrite 权限。

【讨论】:

  • 这是一个非常古老的帖子,但由于这是公认的答案,我认为最好澄清一下:我认为将临时文件夹放在里面不是一个好主意htdocs,因为它不应该被浏览器访问。重要的是 Apache 需要能够写入目录。您可能想要使用 /var/tmp 或类似的东西。
【解决方案2】:

您需要检查php.ini 中的一些内容。确保你打对了php.ini

  • upload_tmp_dir:这是PHP上传时存放临时文件的目录。
  • open_basedir:将 PHP 读/写权限操作限制为指定路径及其子目录。 确保 upload_tmp_dir 在此路径内!
  • post_max_size:将其放大以适应您上传的大小。
  • upload_max_filesize: 允许的文件大小限制。

如果您想调整 tmp 目录设置,请尝试编辑您选择的 /etc/profile 或 /etc/environment(仅适用于当前会话或始终适用),以上检查适用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多