0

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 を返すため、無限ループが発生します。

なぜこれらのことが起こっているのですか?行数を取得する必要があります。

4

1 に答える 1

2

あなたのコードで私が見るところによると、a次の行でモードを使用してファイルを開いています。

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

それを行うと、その書き込みのみ:

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

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

Ps:aまたはのいずれかを使用するa+と、ポインターはファイルの末尾に移動します。

于 2012-07-29T02:18:06.727 に答える