【发布时间】: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