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

StackOverflow https://stackoverflow.com/questions/817783

  •  03-07-2019
  •  | 
  •  

Вопрос

У меня есть функция 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>');
}

Со страницы руководства 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() (как уже было упомянуто).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top