【PHP】下らねぇ質問はここに書き込みやがれ 25
■ このスレッドは過去ログ倉庫に格納されています
0243nobodyさん
2006/07/28(金) 00:25:54ID:???最後の行が改行で終わってる場合、3行目を読み込んだ時点ではeof()は立たない。
(EOFを認識する前に、改行を認識した時点でfgets()は制御を戻してしまうため)
さらに4回目のfgets()が動くとEOFを認識し戻り値がFALSEとなり、eof()が立つようになる。
(var_dump()してみれば分かるが、$list[3]は string(0) "" ではなく bool(false) になってるはず)
普通、そういう読み込みループは
while (($line = fgets($fp)) !== FALSE){
$list[] = $line;
$i++;
}
と書くか
while (!feof($fp)){
$line = fgets($fp);
if($line === FALSE) break;
$list[] = $line;
$i++;
}
のように書く。
PHPは前からやってたって言うけど、それにしちゃ経験浅すぎない?
その辺り、公式マニュアルのfgetsの説明に
ttp://www.php.net/manual/ja/function.fgets.php
> 陥りやすい罠:
> C 言語の fgets の動作に慣れている人は、EOF を返す条件の違いについて 注意する必要があります。
という感じで注意書きがされているよ。
■ このスレッドは過去ログ倉庫に格納されています