尽管upload\u tmp\u dir是可写的,但PHP返回false

尽管upload\u tmp\u dir是可写的,但PHP返回false,php,upload,temporary-files,Php,Upload,Temporary Files,我试图使用tmpfile(),但返回false 我不能使用sys\u-get\u-temp\u-dir(),因为我在PHP5.1.6上,类似问题的海报建议我使用upload\u-tmp\u-dir(这个值与sys\u-get\u-temp\u-dir()相同吗?)和是可写的()返回true 显然,根据回复,tmp目录可能与upload_tmp_目录不同。问题不在于找到tmp目录工作的任何方法: $\u ENV['tmp'],$\u ENV['temp']和$\u ENV['tmpdir']为空。

我试图使用
tmpfile()
,但返回false

我不能使用
sys\u-get\u-temp\u-dir()
,因为我在PHP5.1.6上,类似问题的海报建议我使用
upload\u-tmp\u-dir
(这个值与
sys\u-get\u-temp\u-dir()
相同吗?)和
是可写的()
返回true

显然,根据回复,tmp目录可能与upload_tmp_目录不同。问题不在于找到tmp目录工作的任何方法:
$\u ENV['tmp']
$\u ENV['temp']
$\u ENV['tmpdir']
为空。另外,以下代码不会工作,因为
tempnam()
失败,原因可能与
tmpfile()
相同

$temp=tempnam(__FILE__,'');
if (file_exists($temp)) {
    unlink($temp);
    return dirname($temp);
}
有人还有什么建议吗?
可能是服务器配置问题吗?
谢谢

也许您的服务器上启用了
打开\u basedir
选项


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

也许这是一个
开放的\u basedir
问题:

记住,open_basedir会影响 这个功能。您将得到一个错误:

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

资料来源:

另外,
sys\u get\u temp\u dir
upload\u tmp\u dir
不同

要在较旧的PHP版本中模拟此
sys\u get\u temp\u 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));
    }
  }
}
?>

来源:

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

如果没有
sys\u get\u temp\u dir()
,您可以尝试使用以下方法之一获取tmp dir:

getenv('TMP');
getenv('TEMP');
getenv('TMPDIR');
有多个示例说明如何编写,一旦找到它,请查看它是否可写


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

亲爱的用户,他很好地给了我a-1,你能在这里评论一下原因吗?或者提交你自己的解决方案?phpinfo说OpenBaseDir没有价值。这是否意味着它未启用?是。在这种情况下,
open\u basedir
不是您的问题。我在回答中添加了更多信息。。。请查收。祝你好运谢谢你的帮助。不幸的是,这些变量都没有设置。我打印出了$_ENV数组,但没有包含tmp目录的路径。您认为这是服务器配置问题吗?谢谢