2012-07-29 1 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() 요구가 파일을 읽을 수

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

: 당신은 읽기/쓰기 할 수 있도록 a+으로 파일을 열어야합니다

Ps : a 또는 a+ 중 하나를 사용하면 포인터가 파일 끝으로 이동합니다.

+0

'r'모드에서 두 번째 SplFileObject를 만들더라도 발생합니다. 당신이 대답했습니다. 고마워요. 내 실제 문제에 대한 새로운 티켓을 만들었습니다. http://stackoverflow.com/questions/11706174 – mattalxndr

관련 문제