【问题标题】:Can't create temporary file in PHP despite the temp directory exists尽管存在临时目录,但无法在 PHP 中创建临时文件
【发布时间】:2014-09-16 20:21:55
【问题描述】:

我正在制作一个允许用户上传图片的网站。 当我调用 $_FILE 变量以将图像移动到另一个目录时,它什么也不做。使用 print_r 检查 $_FILE 会显示以下信息:

(
    [pic1] => Array
        (
            [name] => pic1
            [type] => 
            [tmp_name] => 
            [error] => 6
            [size] => 0
        )

)

错误6好像是this

UPLOAD_ERR_NO_TMP_DIR

Value: 6; Missing a temporary folder. Introduced in PHP 5.0.3.

但是我有一个大问题:我只能访问我放置文件的目录,我无法检查临时目录是否存在或检查 php.ini(服务器来自我的客户端,他可以'不要让我访问其他目录)

幸运的是,客户正在检查这些参数并告诉我它们的情况。 因此,临时目录 (upload_tmp_dir) 设置为 /tmp /tmp 目录实际存在,并且拥有所有权限:

drwxrwxrwt 34 root root 2832 2014-08-30 00:00 tmp

我一直在寻找为什么它显示“缺少临时文件夹”错误的原因,尽管它存在,但我找不到原因或解决方案。我离开here a pastebin with the output of ini_get_all()

如果您能评论任何可能的解决方案,我将不胜感激。谢谢。

【问题讨论】:

    标签: php


    【解决方案1】:

    您可以使用此功能更改哪个目录是“tmp”:http://php.net/manual/en/ini.core.php#ini.upload-tmp-dir

    但显然,您必须在核心 ini 文件中完成此操作:http://www.reddit.com/r/PHP/comments/1c87xk/can_i_use_ini_set_to_set_the_value_of_upload_tmp/

    【讨论】:

    • 我想更改 tmp 文件夹可能是一个解决方案。似乎 upload_tmp_dir 默认具有 PHP_INI_SYSTEM 。你知道它是否可以以某种方式更改为 PHP_INI_ALL 吗?这样做我可以使用 ini_set 动态更改它
    【解决方案2】:

    让您的客户修复他们的服务器配置。

    如果他们的东西坏了,你无能为力,而且我无法想象他们会因为必须修理它而与你争吵。这不是技术问题……您已经解决了技术部分。

    【讨论】:

    • 是的,事实上服务器还有其他问题,客户端正在修复它们,但有这个特殊问题请求我帮助。
    • 添加你应该,并帮助他们修复他们的配置和/或权限
    【解决方案3】:

    检查open_basedir。如果它打开,PHP manual 状态:

    如果 open_basedir 开启,那么系统默认目录必须是 允许上传成功。

    您还可以指定一个自定义目录,并且您应该检查它是否尚未设置但不可写。在同一页面上还指出,如果指定的目录不可写,PHP 将回退到系统默认临时目录 (/tmp)。

    【讨论】:

    • 似乎 open_basedir 设置为关闭。我将尝试更改自定义目录,看看会发生什么。
    【解决方案4】:

    不确定没有人指出这一点。但据我所知。没有人在文件夹 /tmp 拥有 root:root 所有权的 root 权限下运行 php。我只能假设,如果您将使用file_put_contentsfopen('/tmp/some_new_file')...,它应该会导致某些权限被拒绝或类似。因此,您应该使用 php 用户可访问的文件夹永久更新 php.INI,以避免再次发生错误

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-24
      • 1970-01-01
      • 2017-10-06
      • 1970-01-01
      • 1970-01-01
      • 2010-09-21
      • 2016-08-02
      相关资源
      最近更新 更多