2012-07-29 21 views
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,所以我得到一个无限循环。

为什么会发生这些事情?我需要得到一个行数。

回答

2

通过我在你的代码中看到,你在这行打开与模式a文件:

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

当你做到这一点,只有它的写:

$fileObject->eof()需要读取文件,你应该打开该文件a+允许读/写:

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

Ps:要么与aa+,指针将转到文件的末尾。

+0

即使我以'r'模式创建第二个SplFileObject,也会发生这种情况。你已经回答了这个问题,谢谢。我为我的真正问题创建了一张新票:http://stackoverflow.com/questions/11706174 – mattalxndr 2012-07-29 02:29:28