更改PHP临时目录

时间:2014-10-09 13:54:47

标签: php iis permissions

我有一个媒体转换网站,用户可以上传视频,音频或图片文件,并将其转换为3种流行格式。转换脚本工作正常但我在上传文件的tmp目录时遇到了一些问题。我已经尝试了两种情况,我很好,但都不起作用,在我看来是权限相关但我似乎可以解决问题。 我现在正在当地工作,而我正在解决问题。

情景1:

  • 文件上传到默认的本地tmp目录(C:\ WINDOWS \ tmp) - 工作正常
  • 尝试使用已上传的tmp文件运行转换脚本但不起作用 - 从命令行运行完全可以正常工作

情景2:

  • 文件上传到目录我给IIS_IUSRS完全控制(用于测试),文件不会上传 - 是的,目录拼写正确(我在php.ini中更改了upload_tmp_dir值)

将XMLHttpRequest发送到PHP文件的javascript以及PHP文件本身所在的站点都是IIS站点,因此我假设该脚本作为IIS_IUSRS运行。

编辑:对于场景1,根本不再创建临时文件,无法弄清楚为什么我假设玩权限搞砸了,因为代码没有改变。我已经修改了IIS_USRS和USERS试图让它再次运行但没有运气:(虽然错误日志仍在写入同一个文件夹......很奇怪

注意:我发送的$ _FILES变量的“tmp_name”值仍为“C:\ WINDOWS \ Temp \'filename'”,但文件不存在

编辑:另一个新的开发,它似乎不是权限问题,因为我可以通过$ temp_file = tempnam(sys_get_temp_dir(),'Test')创建一个临时文件;但它显然不包含上传的数据,因此它无法解决我的问题

2 个答案:

答案 0 :(得分:0)

这不是一个问题,而是更多的解决方法。问题似乎与此有关 $_FILES['file']['tmp_name'];

当我回显内容时,它看起来像我期望的那样但是没有文件出现。因此,我不必利用自然发生的那个过程,而是采取手动方法。我所做的是以下内容:

创建临时文件

$temp_file = tempnam(ini_get('upload_tmp_dir'), 'php');

然后添加$ _POST请求期间创建的临时文件中的内容。 (有些如何在$ _FILES变量中,即使文件不在我查看目录时也是如此)

file_put_contents($temp_file, file_get_contents($_FILES['file']['tmp_name']));

我有我的临时文件进行处理。

答案 1 :(得分:0)

由于APPLICATION POOLS上有一个设置,PHP忽略了upload_tmp_dir。 它不是php-cgi.exe,也不是php.ini或权限问题。 转到遇到问题的网站的应用程序池: 1.右键单击 2.选择高级设置 3.滚动到LOAD USER PROFILE并将其设置为FALSE。

这对我有用。