FCGI 和 upload_tmp_dir PHP 指令無法正常工作
我將PHP作為FCGI執行!我將
upload_tmp_dir
option 設置為 value/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
和 home asext4
,更糟糕的是/tmp
分區是 16GB 的空間,這與我上面想像的完全是災難?問題:
如何以與or相同的方式強制
FCGI
使用指令?我還沒有找到記錄的方法來更改它使用的臨時目錄。upload_tmp_dir``CGI``mod_php
請幫忙!?
這不是絕對錯誤的,fastCGI 和 mod_php/cgi 之間有很大的不同——尤其是權限的分離。使用 fastCGI,網路伺服器對 PHP 的配置方式一無所知。
我認為移動比僅重命名同一目錄中的文件更有資源?!
重命名同一目錄中的文件和移動同一文件系統中的文件幾乎沒有區別。但是,這與您在此處討論的問題無關。為了使文件從 Apache 傳輸到 PHP,它必須通過一個套接字——因此,如果 Apache 使用與 PHP 不同的路徑來儲存文件,則無關緊要。
雖然您可以破解程式碼(也可以通過 Apache 環境)以使路徑相同,但這樣做將是一個非常糟糕的主意 - 因為 PHP 會在 Apache 嘗試從中讀取文件時嘗試寫入文件。