auto_detect_line_endingsはデフォルトではコメントアウトされている。
注意: マッキントッシュコンピュータ上で作成されたファイルを読み込む際に、 PHP が行末を認識できないという問題が発生した場合、 実行時の設定オプションauto_detect_line_endings を有効にする必要が生じるかもしれません。from PHP: fgets - Manual
php.iniにはこう書かれている。
; If your scripts have to deal with files from Macintosh systems,(ここでいう「Mac」とは、OS Xになる前のバージョン9までの古いMacを指すと思われる。参考:改行コード - Wikipedia)
; or you are running on a Mac and need to deal with files from
; unix or win32 systems, setting this flag will cause PHP to
; automatically detect the EOL character in those files so that
; fgets() and file() will work regardless of the source of the file.
これは逆に言うと、Macが関わらないLinux・Windowsだけの環境なら、auto_detect_line_endingsの設定も含めてfgets()での改行コードについて特に意識しなくてよいということだ。
試しにWindows上のPHPで改行コードが「CR+LF」の場合と「LF」の場合でfgets()結果に違いがあるか実験してみたところ、違いは無かった。
(auto_detect_line_endingsはコメントアウトのまま。)
しかし、改行コードが「CR」の場合、全て1行目として扱われてしまった...。
テストに使ったコードは下記の通り。
<?php
$fp = @fopen('test.php', 'r');
$i = 1;
if ($fp) {
while (!feof($fp)) {
echo "$i : " . fgets($fp);
$i++;
}
fclose($fp);
}
あと、fgets()で取得した文字列の最後には改行コードが付いているので注意。不要な場合はrtrim()で取り除ける。
勉強になりました。ありがとうございました。
返信削除お役に立てて良かったです ^^
返信削除助かりました。どもです^^
返信削除