Чтение в текстовом файле строки по строке php – новая строка не обнаружена

У меня есть функция php, которую я написал, которая возьмет текстовый файл и перечислит каждую строку как свою собственную строку в таблице.

Проблема в том, что классический «отлично работает на моей машине», но, конечно, когда я прошу кого-то еще создать файл .txt, который я ищу, он продолжает читать во всем файле как 1 строку. Когда я открываю его в текстовом редакторе, он выглядит так же, как я ожидаю его с новым именем в каждой строке, но его символ новой строки или что-то отбрасывающее.

До сих пор я пришел к выводу, что это может иметь какое-то отношение к любому текстовому редактору, который они используют в своей системе Mac.

Имеет ли это смысл? и есть ли простой способ просто обнаружить этот символ, который текстовый редактор распознает как новую строку и заменит его на стандартную, которую распознает php?

ОБНОВЛЕНИЕ: добавление следующей строки решило проблему.

ini_set('auto_detect_line_endings',true); 

Функция:

 function displayTXTList($fileName) { if(file_exists($fileName)) { $file = fopen($fileName,'r'); while(!feof($file)) { $name = fgets($file); echo('<tr><td align="center">'.$name.'</td></tr>'); } fclose($file); } else { echo('<tr><td align="center">placeholder</td></tr>'); } } 

Что случилось с file() ?

 foreach (file($fileName) as $name) { echo('<tr><td align="center">'.$name.'</td></tr>'); } 

На странице man fgets :

Примечание. Если PHP неправильно распознает окончание строки при чтении файлов, которые были созданы или созданы компьютером Macintosh, включение опции конфигурации времени автономной работы auto_detect_line_endings может помочь решить проблему.

Кроме того, вы пробовали функцию файла ? Он возвращает массив; каждый элемент в массиве соответствует строке в файле.

Изменить: если у вас нет доступа к php.ini, какой веб-сервер вы используете? В Apache вы можете изменить настройки PHP, используя файл .htaccess . Существует также функция ini_set, которая позволяет изменять настройки во время выполнения.

Это классический случай проблемы новой строки.

ASCII определяет несколько разных символов «новой строки». Два конкретных, о которых мы заботимся, это ASCII 10 (линейный канал, LF) и 13 (возврат каретки, CR).

Все системы на базе Unix, включая OS X, Linux и т. Д., Будут использовать LF в качестве новой строки. Mac OS Classic использовала CR только для того, чтобы быть другим, и Windows использует CR LF (это правильно, два символа для новой строки – посмотрите, почему никто не любит Windows, просто шутит) в качестве новой строки.

Следовательно, текстовые файлы от кого-то на Mac (при условии, что это современная ОС) будут иметь LF по окончании их строки. Если вы пытаетесь прочитать их в Windows, а Windows ожидает CR LF, он не найдет его. Теперь уже упоминалось, что PHP имеет возможность сортировать этот беспорядок для вас, но если вы предпочитаете, вот решение для хранения памяти:

 $file = file_get_contents("filename"); $array = split("/\012\015?/", $file); # won't work for Mac Classic 

Конечно, вы можете сделать то же самое с file() ( как уже упоминалось ).