【问题标题】:PHP tmpfile() returns falsePHP tmpfile() 返回 false
【发布时间】:2011-09-10 04:50:24
【问题描述】:

我有一个图像上传脚本,它以前可以工作。它现在坏了,我已经将问题追溯到一行:

$temp = tmpfile();
// $temp === false

tmpfile() 函数返回 false。我似乎无法弄清楚为什么。我很难在这方面涉足谷歌。

它仅在我的本地测试环境 OSX 10.6.7 上运行 MAMP 1.9.5 时中断的脚本。幸运的是,现场网站运行良好。

【问题讨论】:

  • 来自手册:tmpfile() Returns a file handle, similar to the one returned by fopen(), for the new file or FALSE on failure. 所以有些事情失败了,也许是权限?
  • 您应该检查您是否拥有创建文件的正确权限。
  • 为什么人们会在 cmets 中留下答案?

标签: php file-upload upload temporary-files


【解决方案1】:

tmpfile() 如果无法创建临时文件,则返回false。确保您的 tmp 文件夹是可写的,并尝试检查 sys_get_temp_dir() 函数返回的内容。

【讨论】:

  • sys_get_temp_dir() 返回:/var/folders/pl/plwnvK1yE7ekOV2cHWtpAk+++TI/-Tmp-
  • 我 chmod 777 那个目录,脚本再次运行。什么可以改变临时目录?我本来希望它被设置为 /var/tmp。
  • 您好 Niklas,我有一个与您的回复相关的问题。由于我在 tmpfile() php doc 中阅读的内容,它基本上说将创建临时文件并将其设置为 w+,这是可写的,那么为什么我们需要将其 chmod 为 777?
  • @BeingSimpler 我从来没有说过你需要 chmod 它 777。但是 tmp 文件夹权限应该是这样的,脚本在那里有写权限。与fopen(sys_get_temp_dir().$file, 'w+') 的作用方式相同。
  • tmpfile() 也为我返回 false 。我不能使用 sys_get_temp_dir,因为我在 PHP5.1.6 上。如果我用 is_writable() 测试我的 upload_tmp_dir,它会返回 true。有没有人有任何想法?谢谢
【解决方案2】:

首先,启用所有 PHP 警告,看看它是否在告诉你什么。

其次,检查您的临时文件夹并确保 PHP 对其具有写入权限。某些“安全模式”限制(基本目录等)可能会阻止访问。

【讨论】:

    【解决方案3】:

    可能是权限问题。 使用sys_get_temp_dir() 查看临时文件将在哪里创建并确保 php 有权在此处写入。

    【讨论】:

      【解决方案4】:

      在我的例子中,它试图在其中创建文件的文件夹具有一直到 tmpFFFF.tmp 的临时文件。将这些临时文件从文件夹中移出后,它又从 tmp1.tmp 开始。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-04-30
        • 2018-10-30
        • 2012-08-27
        • 2013-01-25
        • 2012-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多