我很明顯在Linux上。 PHP腳本似乎在'www-data'用戶下運行。我還可以看到上傳的文件最終在默認的/ tmp目錄中,每個都有一個名稱前綴爲「php」的名稱。所有的標準,我猜。所有這些文件的權限是-rw -------,即600,用戶'www-data',組'www-data'。問題是我有一個Postgresql數據庫服務器在用戶'postgres'下運行,它需要能夠讀取這些文件,因爲它將其內容插入到數據庫中。目前它顯然不能。當然,作爲一項規則,數據庫查詢和功能下誰的用戶連接到數據庫(我連接爲「WWW的數據」,以及),但在這裏我們談論的是已被調用爲「Postgres的服務器端功能操作。這是PostgresQL的限制,無論好壞。如何在/ tmp中覆蓋Apache/PHP存儲的文件的默認權限?
我認爲在考慮到安全性,但是我認爲世界不會下如果我允許或者Postgres的讀取這些文件,或放寬這些文件的權限去。
我如何控制這些文件與創建的權限?顯然,PHP自己創建它們,例如POST文件上傳,但我找不到任何配置開關。另外,我的/ tmp的權限爲'drwxrwxrwt'(777),屬於用戶'root',組'root'。
我試圖改變與「php_value upload_tmp_dir」上傳目錄,但它沒有任何效果,似乎 - PHP仍然存儲在/ tmp中的臨時文件。
我不想與'move_uploaded_file'或'chmod'一起使用,因爲它們寫入文件系統,我想避免這種情況,除了數據庫服務器插入記錄之外。
您也可以從PHP調用umask()。 – nos 2010-02-18 15:02:27
至於阿帕奇envvars中,好了,我不希望覆蓋所有文件的默認權限apache的創造,只爲那些在PHP上傳目錄(通常是/ tmp)創建的。 P.S. umask()不是線程安全的。 – amn 2010-02-18 19:53:27
好,從外觀上來看,你是唯一的選項是:在PHP 2)的umask在envvars中 3)CHMOD()文件 4)move_uploaded_file()以 我想說 1)的umask()在這些選擇中,chmod是最好的選擇。你必須做一些會影響你的文件系統的事情,因爲沒有辦法設置一個目錄對其中的所有內容都有默認權限。 – Tarka 2010-02-18 21:25:38