Ответ 1
Это не работает для вас?
http://us2.php.net/manual/en/filesystem.configuration.php#ini.auto-detect-line-endings
У меня есть 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>');
}
}
Это не работает для вас?
http://us2.php.net/manual/en/filesystem.configuration.php#ini.auto-detect-line-endings
Что случилось с file()
?
foreach (file($fileName) as $name) {
echo('<tr><td align="center">'.$name.'</td></tr>');
}
Из man-страницы fgets:
Примечание. Если PHP не распознает окончание строки при чтении файлов, которые были созданы или созданы компьютером Macintosh, включив auto_detect_line_endings, может помочь решить проблему.
Кроме того, вы пробовали функцию file? Он возвращает массив; каждый элемент в массиве соответствует строке в файле.
Изменить: если у вас нет доступа к 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()
(как уже упоминалось).