PHP找不到tmp目录

我遇到了在tmp目录(如tmpfile()tempnam()中创build文件的函数问题。 他们似乎都没有写信给tmp并返回错误。 upload_tmp_dir在php ini中设置,file upload工作正常。

在debugging这个错误的时候,我发现sys_get_temp_dir()获取了tmp目录的位置,不幸的是我的PHP版本(5.1.6)不支持它。 我也看到使用下面的方法replace了sys_get_temp_dir()的function:

 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服务器configuration问题或PHP的

谢谢你的帮助

TMP,TEMP(也许TMPDIR)仅在Windows上有效,通常指向C:\Windows\TEMP 。 在Linux上,默认的临时位置是/tmp 。 要解决此问题(与tempnam()函数一起使用),可以在您的网站空间的某处创建一个临时文件夹,指定适当的访问权限并将其作为第一个参数传递给上述函数。

不是一个好的解决方案,但总比没有好。

你可以在你的php.ini中设置上传临时目录 – 类似这样的工作:

 upload_tmp_dir=/your-www/tmp/ 

此外,如果您不能编辑php.ini或不想全局执行,您可以在脚本的开始处使用它:

 ini_set('upload_tmp_dir','/your-home-www/tmp/'); 

可能不是最干净的,但这在我的旧5.1.6安装:

 function get_temp_path() { static $path = null; if ($path !== null) return $path; $file = tmpfile(); $meta = stream_get_meta_data($file); fclose($file); $path = dirname($meta['uri']); return $path; } 

我有同样的问题,解决方案是更改Apache配置暴露TEMP变量到PHP,看到这个职位 。

提示像我这样的新手:我想,PHP无法从我的临时文件夹移动的东西,但我只是困惑,因为相对位置的文件夹。 这可能适用于其他人,所以我会解释一下,即使它与这个具体问题非常相关(因为这个具体问题对于像我这样的新手来说可能是一个搜索结果)。

我的问题是,我正在从/ var / www / html / TO到/ var / www / html / user /中的profile.php文件中的一个函数.php文件的上传表单中调用一个upload.php文件,无功/ www / html等/。 上传的文件最终打算登陆/ var / www / html / uploads。 这最终意味着我的大部分对upload.php和uploads / functions.php的引用分别被写为“../uploadphoto.php”或“../uploads/[etc.jpg]”,以便步骤回到HTML /从HTML /用户/(其中回声代码降落在HTML /用户/ profile.php)。 这使我直观地在uploadphoto.php里面使用下面的命令而不用考虑:

 move_uploaded_file($_FILES["file"]["tmp_name"][0], "../uploads/$filename") 

看到问题? uploadphoto.php和uploads /在同一个目录下,所以我不需要../这里。 几个小时,我确定我再次搞乱我的文件夹权限,因为我是图像上传的新手。 我忘了检查更简单的错误。 希望这可以帮助别人。