1

这个函数在我的服务器上造成了很大的麻烦,因为它在循环中:

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 是资源,布尔值在第 42 行的 /path/file.php 中给出”

感兴趣的行是:

$line = fgets($file_handle);

功能还可以,但不知道为什么给我这个奇怪的错误。

4

4 回答 4

4

因为$file_handle是布尔值false(您可以使用 进行检查var_dump),这反过来又是因为fopen调用失败而发生的。

fopen

成功时返回文件指针资源,错误时返回 FALSE。

于 2012-07-11T08:22:44.513 回答
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);
}
于 2012-07-11T08:31:16.450 回答
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.
于 2012-07-11T08:52:36.283 回答
0

可能 fopen 失败,因为您对该文件没有权限,或者您错过了匹配路径。

但是你正在循环到 fgets(); 这意味着没有 End of file 。

尝试放置$line = fgets($file_handle,4096);,看看它是否有效。

于 2012-07-11T08:25:33.407 回答