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()にループしています。これは、ファイルの終わりがないことを意味します。

入れてみて$line = fgets($file_handle,4096);、それが機能しているかどうかを確認してください。

于 2012-07-11T08:25:33.407 に答える