tmpfile()PHP返回false虽然upload_tmp_dir是可写的

时间:2011-06-20 13:02:08

标签: php upload temporary-files

我正在尝试使用tmpfile(),但对我来说是假的。

我不能使用sys_get_temp_dir(),因为我在PHP5.1.6上已经建议类似问题的海报,但如果我测试upload_tmp_dir(这与sys_get_temp_dir()的值相同?)is_writable()返回true。

显然根据响应,tmp目录可能与upload_tmp_dir不同。问题是没有找到tmp目录工作的方法: $_ENV['tmp']$_ENV['temp']$_ENV['tmpdir']为空。此外,以下代码无效,因为tempnam()失败,可能与tmpfile()的原因相同。

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

有没有人有任何建议?
可能是服务器配置问题? 感谢

3 个答案:

答案 0 :(得分:3)

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

如果没有sys_get_temp_dir(),您可以尝试使用其中一个来获取tmp目录:

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

有多个如何use them there的例子,一旦你找到它,看看它是否可写。

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

答案 1 :(得分:0)

您的服务器上可能启用了open_basedir选项。

您不应该发出错误或检查您的error.log,警告消息应该在那里。

答案 2 :(得分: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/en/function.sys-get-temp-dir.php#85261