2012-01-25 14 views
3

我想打開一個文件進行讀/寫。我一直在Ubuntu上開發,並沒有任何問題。現在是部署到RHEL服務器的時候了,我發現似乎對要寫入的文件的位置存在某種限制。RHEL + PHP:寫入/ var/www/html之外的文件?

在RHEL,除非它是在/ var/www/html等我無法打開該文件。我無法弄清楚如何允許其他地點。由於磁盤空間管理的原因,我需要處理不同捲上的文件。

以下是代碼,在Ubuntu上正常工作無論什麼位,但在RHEL休息,如果該文件是網站根目錄外:

$repometa = fopen("/path/to/file/it/does/exist/and/has/good/perms", "r+b"); 

實際的錯誤如下,這是怪異,因爲權限很好(由「apache」用戶擁有,文件上有0644個燙髮,目錄上有755個)。

fopen(<thefile>): failed to open stream: Permission denied 

有人點我描述的文件如何未破RHEL的阿帕奇/ PHP的配置允許文件系統寫入備用位置?

感謝, 〜保羅

+1

接過核選項:[刪除了SELinux(http://www.revsys.com/writings/quicktips/turn-off-selinux.html) – PaulProgrammer

回答

3

正如寫在httpd_selinux(8)手冊頁,你必須給文件和目錄的特定文件的上下文,如果你希望能夠讀取或寫信給他們。有關詳細信息,請參閱手冊頁,請記住,PHP腳本作爲守護程序運行,除非您已專門將PHP設置爲以CGI運行。

+0

你可能是對的 - 但我不能讓頭或手冊頁的尾巴,以瞭解​​允許讀/寫訪問apache用戶的內容。任何指向一個很好的教程的指針? – PaulProgrammer

+2

*沒有*可以訪問apache *用戶*。您必須訪問在域中運行的守護進程。這是通過手冊頁中列出的文件上下文完成的。 –

+0

好。我仍然不明白man_page_mean_中的上下文。關於上下文是否有任何背景? – PaulProgrammer

1

聽起來像一個用戶和/或組權限的問題。該文件本身是可寫......(因爲你在你的好路徑名,提到),但也許是阿帕奇用戶(或然而,它的標題是,)是不允許設置爲默認以外的任何文件更改/ var/www/html目錄?

任何方式爲/ var裏面更改文件/ www/html等,然後讓另一個shell腳本(和/或用戶),從那裏並將其移動到你想要的目錄?

有趣的是它會在Ubuntu和RHEL不工作;也許RHEL對用戶和團隊來說更嚴格?

順便說一句:在一般情況下,它可能是更安全不會有PHP寫文件的WWW目錄之外的... :)

編輯

在@伊格納西奧的提示(1) ,也許這樣的事情可能工作:http://us2.php.net/manual/en/function.fopen.php#56551

如果這件事情你需要的時候,你可能想嘗試在命令行中鍵入此:

/usr/sbin/setsebool -P httpd_can_network_connect=1 

我還是會小心PHP文件操作www文件夾...但是,希望幫助外...!

(1)http://linux.die.net/man/8/httpd_selinux

+0

我敢肯定該目錄的用戶權限和文件是正確的 - apache用戶和組擁有文件和路徑,並分別有644/755。 – PaulProgrammer

+1

這是我不喜歡RHEL的原因之一 - 對於不考慮安全性的人來說,它被配置爲「安全」,但對於需要一點靈活性的人來說卻是限制性的。 – PaulProgrammer

+0

我知道你的意思;它看起來有點類似於這個用戶所發生的情況:http://stackoverflow.com/questions/3882244/php-fopen-permission-denied – summea

3

要一些具體添加到接受的答案,我也有這種確切的問題和該命令固定對我來說。

chcon -R -t httpd_sys_content_t /path/to/file/it/does/exist/and/has/good/perms 
+1

謝謝。有時候,這些手冊讓人感到困惑,沒有一個有效的例子。 – ehfeng