2012-07-11 73 views
1

此功能使我的服務器上的大麻煩,因爲是在循環:與文件PHP函數循環處理

function loadFiles() 
{ 
$email = $_POST["emailp"]; 
$file_handle = fopen("/tmpphp/dmbigmail.file", "r"); 
while (!feof($file_handle)) { 
$line = fgets($file_handle); 
if(stristr($line,$email)){ 
    $show = trim(str_replace($email,' ',$line)); 
    //echo $show; 
    $parsedata = substr($show,0,11); 
    $parselink = substr($show,10); 
    $total = $parsedata.'<a href=' . $parselink. ">$parselink</a><br>"; 
    echo $total; 
    } 
    } 
    fclose($file_handle); 
} 

在我的日誌,我可以看到這一點: 「PHP的警告:與fgets()預計參數1是資源,布爾在/path/file.php給出的第42" 行

行感興趣的是:

$line = fgets($file_handle); 

功能是好的,但我不知道爲什麼給我這個奇怪的錯誤。

回答

4

因爲$file_handle是布爾型false(您可以用var_dump來檢查),而這又是因爲fopen調用失敗而發生的。

fopen

成功返回文件指針資源,或錯誤FALSE。

+0

不應該'feof'還預計,參數1是資源? – xdazz 2012-07-11 08:27:38

+0

@xdazz:是的,但很有可能我們沒有被告知任何事情。 – Jon 2012-07-11 08:39:25

0

可能fopen失敗,因爲您沒有該文件的權限,或者您錯過了匹配路徑。但你正在循環到fgets();這意味着沒有文件結尾。

嘗試把$line = fgets($file_handle,4096);,看看它是否工作。

2

試試這個:

$file_handle = @fopen("/tmpphp/dmbigmail.file", "r"); 
if ($file_handle) { 
    while (($line = fgets($file_handle, 4096)) !== false) { 
     if(stristr($line,$email)){ 
      $show = trim(str_replace($email,' ',$line)); 
      //echo $show; 
      $parsedata = substr($show,0,11); 
      $parselink = substr($show,10); 
      $total = $parsedata.'<a href=' . $parselink. ">$parselink</a><br>"; 
      echo $total; 
     } 
    } 
    if (!feof($file_handle)) { 
     echo "Error: unexpected fgets() fail\n"; 
    } 
    fclose($file_handle); 
} 
1

嘛,只有很少的建議,以確保您的代碼,您嘗試打開文件之前執行此測試:

$filepath = "/tmpphp/dmbigmail.file"; 
if (!file_exists($filepath) || !is_file($filepath)) { 
    echo "$filepath not found or it is not a file."; exit; //return; //die(); 
} 
if ($file_handle = fopen($filepath, "r")) { 
....etc.