我正在尝试使用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);
}
有没有人有任何建议?
可能是服务器配置问题?
感谢
答案 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_dir
与upload_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