2012-11-06 168 views
2

我已經在linux fedora機器上安裝了apache服務器 ,並且我在var/www/html 上放置了以下test.php和test.html,但是當我打開127.0 .0.1/test.html的火狐 的test.php的不創建的text.txt文件,更不用說寫字符串到文件 和也沒有輸出「回聲是$ var」php file_put_contents無法在apache服務器目錄上創建文件

的錯誤是

Warning: file_put_contents(test.txt): failed to open stream: Permission denied in /var/www/html/getdata.php on line 7 

該目錄的權限爲:

drwxr-xr-x. 2 root root 4096 Nov 6 14:14 html 

test.php的:

<?php 
$v="x"; 
$fname='test.txt'; 
$rv=file_put_contents($fname,$v); 
echo $rv; 
echo $v; 
?> 

的test.html文件是如此複雜,怎麼我計劃複雜的東西寫入到服務器上的文件,但由於有一些問題,我簡單的測試。 PHP

的test.html:

<!DOCTYPE html> 
<html> 
<body> 

<form id="yourFormID" method="POST" action="/getdata.php" ></form> 

<script> 
    function sendArray(theArray) 
    { 
    var frm = document.getElementById('yourFormID'); 
    fld = document.createElement("INPUT"); 
    fld.name ="data"; 
    fld.type = "hidden"; 
    fld.value = JSON.stringify(theArray); 
    frm.appendChild(fld); 
    frm.submit(); 
    } 

    var yourArray = [0.000023323,0.00001292,0.00003323]; 

    sendArray(yourArray); 

    </script> 
    </body> 
    </html> 
+1

在test.php文件的開始部分啓用錯誤報告,以查看出錯的地方: 'error_reporting(E_ALL^E_NOTICE); ini_set('display_errors',1); ini_set('display_startup_errors',1);' – mav

+0

這是權限問題,我對如何處理它不知所措 – user1769686

+0

[PHP fopen()錯誤:未能打開流:權限被拒絕]( http://stackoverflow.com/questions/7665093/php-fopen-error-failed-to-open-stream-permission-denied) – GordonM

回答

2

HTML目錄目前由root用戶所有,但在Fedora下,Web服務器作爲「apache」用戶運行。 (見 「阿帕奇文件安全」 的https://fedoraproject.org/wiki/Administration_Guide_Draft/Apache?rd=Docs/Drafts/AGBeta/Apache節)

所以,作爲根,執行:

chown -R apache:apache /var/www/html/ 
chmod -R 770 /var/www/html 

首先使Web服務器擁有該目錄。第二個確保只有「apache」組中的用戶才能讀取/寫入文件。它還表示機器上沒有其他用戶甚至可以讀取它們。

如果您需要其他用戶能夠將文件寫入您的Web樹,請將它們添加到「apache」組中。

+0

這是一個很好的解決方案,但是從高安全性的角度來看,打開整個web目錄到'apache'組和用戶並不是一個好的做法。 – honyovk

+0

@MBJ是的,如果有/ var/www/html目錄樹下存在的文件/子目錄但您不希望被Apache加密,則將其所有權更改爲myuser:myuser和權限700.如果您希望只讀Apache/PHP腳本的文件/子目錄,但可由其他用戶寫入,請將所有權更改爲myuser:apache,並將權限更改爲750.(但這兩個都是非常不尋常的用例,並且應該擁有自己的StackOverflow問題:-) –

2

這是一個權限問題與Linux操作系統。嘗試:

chmod 777 path/to/test.txt 

在命令行。

編輯:這是一篇關於Linux文件權限的好文章。 http://www.tuxfiles.org/linuxhelp/filepermissions.html

編輯2:我想補充,設置相應的權限的文件是唯一的方法PHP可以操縱說與file_put_contentsfwrite文件等

+0

只是想知道如果是這樣的話,那麼服務器可能是脆弱的? – user1769686

+3

不,777中的最後7個是'other'。這意味着服務器內的任何用戶(本地)都可以編輯您授予此權限的特定文件。 – honyovk

相關問題