我跑PHP作为纤维增强玻璃!我将upload_tmp_dir
选项设置为值/home/domain.com/tmp
。执行phpinfo()
复查后确认以上设置正确。
尽管如此,在实际上传时,上传文件会暂时进入/tmp
具有权限的目录apache:apache
,并且当上传完全完成时仅有的然后上传的文件将被移动到目标目录,该目录在 中设置upload_tmp_dir
。文件移动后,恰当的权限domainowner:domainowner
。
FCGI
如上所述发生的事情是绝对错误的,mod_php
与 CGI
正在做的事情不同!mod_php
然后 CGI
开始上传文件直接地然后upload_tmp_dir
就改名上传完成后的文件。
我对此有以下几点重大担忧:
想象一下,如果有 20 个人同时上传了一个大约 2GB 的文件,会发生什么?上传的文件必须从 移动到主目录/tmp
,这会在文件系统上产生大量无用的负载!因此,我认为移动比仅仅重命名同一目录中的文件更有资源?!此外,/tmp
被安装为ext3
并且主目录为ext4
更糟糕的是,该/tmp
分区有 16GB 的空间,这与我上面想象的完全不同,简直是一场灾难?
问题:
如何强制以与或相同的方式FCGI
使用指令?我还没有找到记录的方法来更改它使用的临时目录。upload_tmp_dir
CGI
mod_php
请帮忙!?
答案1
这并不是完全错误,fastCGI 和 mod_php/cgi 之间存在很大差异 - 尤其是权限分离。使用 fastCGI,Web 服务器对 PHP 的配置方式一无所知。
我认为移动比仅仅重命名同一目录中的文件更有用?!
在同一目录中重命名文件和在同一文件系统内移动文件之间几乎没有区别。但是,这与您在此处讨论的问题无关。为了将文件从 Apache 传输到 PHP,它必须通过套接字 - 因此,如果 Apache 使用与 PHP 不同的路径来存储文件,则无关紧要。
虽然你可以修改代码(也可能通过 Apache 环境实现)来使路径相同,但这样做会非常这是一个坏主意 —— 因为当 Apache 尝试读取文件时,PHP 会尝试写入文件。
答案2
只是一个想法,但是您是否尝试将 TMPDIR=/home/domain.com/tmp 传递给 httpd 环境,以便 mod_fcgid 使用该目录而不是 /tmp 来存储文件?