Загрузка файлов php через FTP, все разрывы строк и CR теряются при загрузке - PullRequest
1 голос
/ 26 марта 2012

Я могу загружать файлы, которые у меня не загружены, и возврат каретки не выполнен, однако при загрузке мои файлы помещаются в одну строку.

Это затрудняет поиск и устранение неисправностей этого приложения, поскольку есть ошибка, новсе в строке 1.

Почему это происходит?

Ответы [ 2 ]

3 голосов
/ 26 марта 2012

Маловероятно, что FTP "поместит все в одну строку".Скорее всего, файл использует окончания строки в стиле * nix, и вы загрузили файл в двоичном режиме на компьютер с Windows или что-то в этом роде.

Видите ли, разные платформы имеют разные последовательности символов для представления "нового"линия".В Windows это обычно CR + LF, а в * nix это просто LF.Проблема заключается в том, что многие программы предполагают, что в конце текстового файла должна стоять строка, и если он видит символ LF, он не видит его как символ новой строки.Так что все выглядит так, как будто это на одной линии.(Я не думал, что PHP так сильно разбирается в окончаниях строк, но я видел другие языки, которые сходят с ума по этому поводу.)

Бинарный режим передает файл байт за байтом и не конвертирует окончания строк,Что здорово, если вы загружаете или загружаете изображение или что-то в этом роде.Но если вы переносите текстовые файлы в двоичном режиме между машинами под управлением разных ОС, вы, скорее всего, увидите результаты «неправильных» окончаний строк.

Решение : Использовать режим ASCII для файлов PHP.Большинство FTP-клиентов имеют настройки для того, какой режим использовать и даже какой режим использовать для определенных типов файлов.Поскольку файлы PHP являются текстовыми, в большинстве случаев их, вероятно, следует передавать в режиме ASCII.

1 голос
/ 14 февраля 2017

Решение, которое сработало для меня:

  1. Используйте редактор Atom.io
  2. Установите пакет Atom Конец строки-конвертер
  3. Откройте файл в Atom> отметьте все> щелчок правой кнопкой мыши> Преобразовать окончания строк в> формат Unix
  4. Сохраните файл и загрузите его на сервер (если файл JS, откройте в браузере, чтобы убедиться, что разрывы строк правильные)

Некоторая справочная информация отсюда :

При загрузке файла с окончаниями строк Windows (CR + LF) в текстовом / ASCII-режиме,сервер заменяет LF на CR + LF, что приводит к неправильному CR + CR + LF.При открытии такого файла во внутреннем редакторе WinSCP редактор интерпретирует последовательность как два конца строки (CR и CR + LF), что приводит к пустой строке после каждой строки содержимого.Когда файл сохраняется, внутренний редактор сохраняет два окончания строки Windows CR + LF и CR + LF.При загрузке они конвертируются в два LF.Обходной путь - использовать внешний редактор и убедиться, что WinSCP не включает текстовый режим для отредактированных файлов.

...