【发布时间】:2011-06-21 12:13:25
【问题描述】:
我在使用在 tmp 目录中创建文件的函数(例如 tmpfile() 和 tempnam())时遇到问题。他们似乎都无法写入 tmp 并返回 false。 upload_tmp_dir 在 php ini 中设置,文件上传工作正常。
在调试此错误时,我发现sys_get_temp_dir() 获取了 tmp 目录的位置,不幸的是,我的 PHP 版本 (5.1.6) 不支持它。我还看到使用下面的方法替换了sys_get_temp_dir()的功能:
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(__FILE__,'');
if (file_exists($tempfile)) {
unlink($tempfile);
return realpath(dirname($tempfile));
}
return null;
}
}
但是 $_ENV 数组中没有对 tmp 目录的引用,并且 tempnam() 失败,正如我之前提到的。
open_basedir 也未设置,我听说会导致类似问题
我怎样才能知道 tmp 目录在哪里,或者它是否被设置?
这是 apache 服务器配置问题还是 PHP 问题?
感谢您的帮助
【问题讨论】:
-
检查您的 php.ini。你应该在那里找到目录。
-
它会叫什么?谢谢
-
有不同的变量。我在upload_tmp_dir和session.save_path下找到了目录。但是 PHP 默认是 /tmp
-
TMP、TEMP(可能还有 TMPDIR)仅在 Windows 上有效,通常指向
C:\Windows\TEMP。在 Linux 上,默认临时位置是/tmp。要解决此问题(与tempnam()函数一起使用),您可以在网站空间的某处创建一个临时文件夹,指定适当的访问权限并将其作为第一个参数传递给上述函数。没有一个很好的解决方案,但总比没有好。 -
@Ollie 如果你坚持,那为什么不:)