$ file-> eof()PHPのSPLFileObjectを使用するときは常にfalseを返します。

StackOverflow https://stackoverflow.com//questions/11705950

  •  13-12-2019
  •  | 
  •  

質問

なぜ私のPHPスクリプトがぶら下がっているのですか?

$path = tempnam(sys_get_temp_dir(), '').'.txt';
$fileInfo = new \SplFileInfo($path);
$fileObject = $fileInfo->openFile('a');
$fileObject->fwrite("test line\n");
var_dump(file_exists($path));          // bool(true)
var_dump(file_get_contents($path));    // string(10) "test line
                                       // "
var_dump(iterator_count($fileObject)); // Hangs on this
.

最後の行(iterator_count(...)を削除してこれに置き換えた場合:

$i = 0;
$fileObject->rewind();
while (!$fileObject->eof()) {
    var_dump($fileObject->eof());
    var_dump($i++);
    $fileObject->next();
}
// Output:
// bool(false)
// int(0)
// bool(false)
// int(1)
// bool(false)
// int(2)
// bool(false)
// int(3)
// bool(false)
// int(4)
// ...
.

$fileObject->eof()は常にfalseを返しますので、無限ループが表示されます。

なぜこれらのことが起こっているのですか?ラインカウントを受ける必要があります。

役に立ちましたか?

解決

あなたのコードに見えるもので、この行にMode aを持つファイルを開いています。

$fileObject = $fileInfo->openFile('a');
.

あなたがそれをするとき、その書き込みのみ:

$fileObject->eof()ファイルを読み込む必要がある場合は、read / Writeを許可するためにa+を持つファイルを開く必要があります。

$fileObject = $fileInfo->openFile('a+');
.


PS:aまたはa+を使用すると、ポインタはファイルの末尾になります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top