2010-12-09 52 views
1

嗨,當我執行此代碼沒有發生在瀏覽器中,但是當我刪除與明星線,內容打印正確,最新錯誤?問題與fopen和fwrite

/////////////////

$documentroot=$_SERVER['DOCUMENT_ROOT']; 
$handle=fopen("$documentroot/order/order.txt",'r+'); 

if(!$handle) { 
    echo 'error opening file'; 
} 

$content="pepsi\ncola\npeperoni"; 
$write=fwrite($handle,$content); //* 

if(!$write){ //* 
    echo 'error writing'; //* 
} //* 

while(!feof($handle)) { 
$string=fgets($handle); 
echo $string; 
} 
+0

你確定PHP賬戶(例如www-data)有寫權限嗎? – Hamish 2010-12-09 06:51:18

+0

您需要在if語句中使用`($ write === false)``。 – 2010-12-09 06:57:17

回答

2

此行應該是這樣的。

$handle=fopen("$documentroot/order/order.txt",'w'); 

文件應該在寫入mode.try中打開這個。

謝謝。

+0

問題是,我不輸入倒帶($句柄),謝謝回答,這麼多 – user533287 2010-12-09 08:59:23

0

/*這是PHP的開始標記,它需要用另一個*/關閉,但這次是*。你可以堅持//只有一行評論。

+0

問題是,我不輸入倒帶($句柄),謝謝回答,非常感謝 – user533287 2010-12-09 09:02:44

0

您正在打開r+模式下的文件,這意味着讀取+寫入模式。但是如果文件orders.txt不存在,則會創建而不是。所以確保文件存在。

另外,當打開文件出現問題時,您立即退出

if(!$handle) { 
    echo 'error opening file'; 
    exit; // MISSING 
} 

假設文件已經存在,它的內容將在fopen之後被擦除。接下來,fwrite將寫入內容。現在文件指針位於文件的末尾,因此您在while循環中撥打feof()的電話將返回true,並且永遠不會輸入。

爲了解決這個問題,你倒回文件指針開始從文件中讀取前:

rewind($handle); // ADD THIS 

while(!feof($handle)) { 
... 
} 
0
$documentroot=$_SERVER['DOCUMENT_ROOT']; 
$handle=fopen("$documentroot/order/order.txt",'r+'); 

if(!$handle) { 
    echo 'error opening file'; 
} 

$content="pepsi\ncola\npeperoni"; 
$write=fwrite($handle,$content); 

if(!$write){ 
    echo 'error writing'; 
} 
fseek($handle, 0); 
while(!feof($handle)) { 
$string=fgets($handle); 
echo $string; 
} 

文件的寫操作後,您的文件指針設置寫入數據的一端需要設置爲fgets的開始位置。 fseek這樣做。

fseek($ handle,0);

這會將您的指針指向開頭,以便fgets現在可以從文件中讀取。 fgets函數需要有效的文件指針來讀取在這種情況下的起始位置。