tmpfile() PHP返回false,尽管upload_tmp_dir是可写的。

3

我试图使用tmpfile(),但是它对我返回了false。

由于我使用的是PHP5.1.6版本,无法像其他帖子中建议的那样使用sys_get_temp_dir(),但如果我使用is_writable()测试我的upload_tmp_dir(这个值和sys_get_temp_dir()相同吗?),它会返回true。

显然,根据回复,临时目录可能与upload_tmp_dir不同。问题是找出临时目录的所有方法都不起作用:$_ENV['tmp']$_ENV['temp']$_ENV['tmpdir']为空。此外,以下代码也无法工作,因为tempnam()失败,可能是和tmpfile()一样的原因。

$temp=tempnam(__FILE__,'');
if (file_exists($temp)) {
    unlink($temp);
    return dirname($temp);
}

有人有更多的建议吗?
这可能是服务器配置问题吗? 谢谢

3个回答

4

tmpfile()不会上传文件,它会在系统的临时文件夹中创建临时文件。

如果没有使用sys_get_temp_dir(),您可以尝试使用以下方法获取临时目录:

getenv('TMP');
getenv('TEMP');
getenv('TMPDIR');

有多个关于如何在这里使用它们的例子,一旦找到它,看看它是否可写。

tmpfile()返回false的唯一原因是无法创建文件。类似问题在这里


0

可能是一个open_basedir问题:

请记住,open_basedir会影响这个函数。您将会得到以下错误:

警告:tmpfile() [function.tmpfile]: open_basedir限制生效。文件(/var/tmp)不在允许的路径中:....blablabla =)

来源:http://www.php.net/manual/en/function.tmpfile.php#74623

此外,sys_get_temp_dirupload_tmp_dir不同。

要在旧版本的PHP中模拟sys_get_temp_dir,请尝试以下方法:

<?php
if ( !function_exists('sys_get_temp_dir')) {
  function sys_get_temp_dir() {
    if (!empty($_ENV['TMP'])) { return realpath($_ENV['TMP']); }
    if (!empty($_ENV['TMPDIR'])) { return realpath( $_ENV['TMPDIR']); }
    if (!empty($_ENV['TEMP'])) { return realpath( $_ENV['TEMP']); }
    $tempfile=tempnam(uniqid(rand(),TRUE),'');
    if (file_exists($tempfile)) {
    unlink($tempfile);
    return realpath(dirname($tempfile));
    }
  }
}
?>

来源:http://www.php.net/manual/zh/function.sys-get-temp-dir.php#85261


phpinfo显示open_basedir没有值。这是否意味着它未启用? - DonutReply
是的。在这种情况下,“open_basedir”不是您的问题。我在我的答案中添加了更多信息...请检查。祝你好运! - J. Bruni
非常感谢你的帮助。不幸的是,这些变量都没有被设置。我打印了$_ENV数组,并且没有找到任何包含临时目录路径的内容。你认为这可能是服务器配置问题吗?谢谢。 - DonutReply

0

也许您的服务器启用了open_basedir选项。

您不应该忽略错误或检查您的错误日志,警告信息应该在那里。


亲爱的用户,您能否请您在这里评论一下为什么给我打了一个负一的评分呢?或者提交您自己的解决方案?谢谢。 - KARASZI István

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接