2012-08-04 83 views
3

我收到警告對我的網頁FCLOSE警告:FCLOSE():提供的參數是不是一個有效的流資源

警告:FCLOSE():提供的參數是不是一個有效的流資源

使用下面的代碼

$fp = fopen('data.txt', 'w'); 
$write = '2'; 
fwrite($fp, $write); 
fclose($fp); 

更新代碼

if(isset($_REQUEST['go1'])) 
{ 
    $fp = fopen('data.txt', 'w'); 
    $write = '1'; 
    $fp1 = fopen('file.php', 'w'); 
    $write1 = '<br><img src="/1/online.png" style="position:absolute; z-index:-2;" />'; 
} 
if(isset($_REQUEST['go2'])) 
{ 

    $fp = fopen('data.txt', 'w'); 
    $write = '2'; 
    $fp1 = fopen('file.php', 'w'); 
    $write1 = '<br><img src="/1/offline.png" style="position:absolute; z-index:-2;" />'; 
} 

fwrite($fp, $write); 
fclose($fp); 
fwrite($fp1, $write1); 
fclose($fp1); 

$fp = fopen('data.txt', 'r'); 
$contents = fread($fp, filesize('data.txt')); 
fclose($fp); 
if($contents == '1') 
    include('file.php'); 
else if($contents == '2') 
    include('file.php'); 
else 
    echo 'Something else...'; 

收到錯誤第27行和29行 線27

fclose($fp);  

line29

fclose($fp1); 
+0

您是否檢查以確保文件正確打開? – 2012-08-04 12:10:15

+0

@Burhan是文件正在打開並且寫入相同 – user1561466 2012-08-04 12:12:18

+0

腳本中還有其他內容嗎?如果有,請嘗試僅使用這些行來模擬相同的事情。另外,確保'數據。txt'實際上是寫入,而不僅僅是以前的一些舊文件的實驗:) – Vatev 2012-08-04 12:15:19

回答

0

立即彈簧想到的是,fopen由於某種原因失敗的唯一可能性,將$fp設置爲FALSE

例如,如果您不允許創建或覆蓋data.txt文件(權限等),則可能發生這種情況。

fopenfclose文檔PHP(略轉述):

的fopen()調用成功返回文件指針資源,或錯誤FALSE。

fclose()的文件指針必須有效,並且必須成功指向文件由fopen()或fsockopen()打開。

(my italics)。你真的應該從fopen檢查返回值,以確保它在嘗試使用文件句柄之前工作。


根據您的更新代碼,您應該檢查其中一個請求變量(go1或go2)是否被實際設置。如果兩者都不是,那麼你將不會打開該文件,但你仍然會嘗試關閉它。

而且,雖然您它寫入文件,但您可能需要確認在開始運行之前刪除它。您可能只是看到前一個文件。

+0

但文件打開並且寫入相同 – user1561466 2012-08-04 12:13:04

+0

data.txt也是chmod 777 – user1561466 2012-08-04 12:14:35

+0

您應該仍然以防萬一,從'fopen'(和'fwrite')檢查返回代碼。權限是失敗的原因之一,可能還有其他原因。否則,請確認您發佈的代碼是_exactly_您擁有的代碼(包括沒有介入的內容)。我問的原因是你的代碼基本上是http://www.php.net/manual/en/function.fwrite.php中的_canonical_例子,所以它不可能按原樣工作。 – paxdiablo 2012-08-04 12:18:16

0

你的問題是在「的if-else」語句(文件沒有打開),檢查你的代碼

+0

如何隱藏錯誤日誌以顯示在php頁面中? – user1561466 2012-08-06 12:22:54

0

當你的,如果()條件returnes假,有沒有$ fp的文件打開,沒有什麼關閉。 PHP不明白你想關閉什麼文件,因爲沒有打開任何文件。

相關問題