【问题标题】:Changing PHP Temp Directory更改 PHP 临时目录
【发布时间】:2014-12-04 11:52:13
【问题描述】:

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

场景 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'); 创建一个临时文件但是它显然不包含上传的数据,所以它不能解决我的问题

【问题讨论】:

  • 我从未使用过 IIS,但可能使用 / 而不是 \ 作为目录分隔符?还是使用 \\ 因为 PHP 将 \ 视为转义元字符?
  • 你是对的......在我的代码中我有 \\ 这不应该是问题,因为当我有一个文件位于目录中时,我可以硬编码源文件和目标文件并且它工作正常- 但感谢您的输入
  • 在 php.ini 中怎么样? echo phpinfo() 的时候设置好看吗?
  • 使用DIRECTORY_SEPARATOR 常量,您无需担心平台的相关问题。
  • 当我做 print_r(ini_get('upload_tmp_dir'));目录按我的预期显示

标签: php iis permissions


【解决方案1】:

这与其说是解决的问题,不如说是一种解决方法。这个问题似乎与 $_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']));

我有我的临时文件要处理。

【讨论】:

    【解决方案2】:

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

    这对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-08
      • 1970-01-01
      • 1970-01-01
      • 2012-04-21
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      相关资源
      最近更新 更多