2014-01-30 183 views
0

我遇到了一個非常奇怪的問題。我正嘗試使用fopen()執行寫入文件。PHP權限被拒絕fopen

這是我在writetofile.php嘗試:

$fw = fopen('/test.txt', 'w'); 
fwrite($fw, 'hello world' . "\r\n"); 
fclose($fw); 

這是我不斷收到錯誤:

Warning: fopen(/test.txt): 
failed to open stream: Permission denied in C:\inetpub\wwwroot\writetofile.php on line 41 
Warning: fwrite() expects parameter 1 to be resource, boolean given... 

我100%肯定我有權限的服務器。我是管理員。此外,我暫時給予每個人完全的權限。我甚至嘗試在本地運行php腳本,直接從服務器使用localhost。我沒有使用Apache,我使用的是IIS。我嘗試修改權限後嘗試重新啓動IIS。我沒有在安全模式下運行PHP。

任何想法可能會導致此問題?

回答

0

/test.txt將會是文件系統ROOT目錄中的文件,其中用戶帳戶通常沒有寫權限(除非您以root用戶身份運行此代碼)。在web服務器的用戶帳戶下運行的PHP尤其如此。

你可能只想test.txt(沒有斜線)`這將嘗試把文件放到腳本的「當前工作目錄」 - 通常是相同的目錄中的腳本本身是

+0

+1,這工作!謝謝!問題:不應該將'/ test.txt'寫入根目錄,這與我的工作目錄(C:\ inetpub \ wwwroot \)相同? – AnchovyLegend

+0

因爲PHP在文件系統級別運行。它不能少於你實際運行php代碼的URL。它沒有看到網址。它只會看到服務器驅動器上的文件。它不受服務器的文檔根 –

+0

的約束沒有fopen()使用系統路徑和/是文件系統的根目錄「./test.txt」會在當前工作目錄中寫入文件 –

0

1,當你部署。網站,刪除所有日誌文件夾名稱

2-裏面的代碼如下創建文件夾名稱,創建日誌內部文件頂部

3-寫。 (初始化期間在網上)

$ClientUserName = gethostbyaddr($_SERVER['REMOTE_ADDR']); 

function Data_Log($dataline) 
{ 
global $ClientUserName; 
$dir = 'UserInputLog' ; 
$fileName = $ClientUserName. '_ServerWebLog.txt'; 

if(is_dir($dir) === false) 
    mkdir($dir); 

    $fileName = $dir. '\\'.$fileName; 

    $myfile = fopen($fileName, "a") or die("Unable to open file!"); 
    fwrite($myfile, "$dataline\r\n"); 
    fclose($myfile); 

}