Случайный интервал добавляется в файлы PHP при редактировании

0

Я не совсем уверен, когда это началось, но в последнее время все мои PHP файлы страдают от довольно раздражающей проблемы, когда пустое пространство добавляется к концу каждой отдельной строки. Немного раздражает, но не совсем невозможно работать с/вокруг. Тем не менее, я также заметил, что когда код, затронутый этой проблемой, скопирован и вставлен в другое место, эти безобидные пробелы являются новыми, пустые строки, что является довольно большой проблемой.

Я заметил, что открытие поврежденных файлов и повторное сохранение их с помощью UTF-8 NO BOM, похоже, исправляют проблему до тех пор, пока файл не будет закрыт и не откроется позже. Я запустил все свои файлы через программу, которая изменяет файлы как НЕТ-спецификации, но, похоже, это вообще не влияет.

Мне интересно, если это проблема с редактором, который я использую (UltraEdit), параметрами файла на компьютере/локальном сервере, проблемой с ftp-программой (FileZilla) или даже с проблемой веб-сервера.

  • 1
    сервер os и dev?
  • 0
    Попробуйте использовать другой редактор, такой как notepadd ++ или что-то простое, чтобы исключить это, поскольку, скорее всего, это проблема.
Показать ещё 1 комментарий
Теги:

2 ответа

2
Лучший ответ

Источником вашей проблемы является передача между системой Windows (вашей рабочей станцией) и системой Linux (ваш веб-сервер) с использованием FTP. Для текстовых файлов вы должны использовать режим ASCII (или текстовый) (а не "двоичный" режим) программы FTP при передаче файлов в обоих направлениях. Передача его с использованием двоичного режима тоже в порядке. Что порождает вашу проблему, так это их сочетание.

Windows использует два символа (CR и LF), чтобы пометить конец строк в текстовом файле. Для Linux (и OSX и других Unix-ов) для этой цели используется только LF. В режиме передачи текста /ascii программ FTP выполняется соответствующее преобразование при передаче. Двоичный режим не изменяет файлы, которые он передает.

Вот что происходит: вы создаете файл в Windows. Его линии заканчиваются CR LF. Вы передаете его в Linux с использованием двоичного режима. Символы CR не удаляются. Они не отображаются на веб-странице, но они отображаются (как ^ M) некоторыми Linux-программами. Они находятся в конце каждой линии. Вероятно, вы модифицируете скрипт на своем веб-сервере, чтобы быстро исправить проблему, обнаруженную вами, когда вы помещаете страницу в живую, а затем переносите файл обратно, но на этот раз, используя режим передачи текста. Или, может быть, друг/мастер копирует файл на своем собственном компьютере под управлением Windows, и они используют другую FTP-программу с разными настройками, чем ваша. Из-за текстового режима перед каждым символом NL программа FTP вставляет новый символ CR. Это приводит к тому, что линии заканчиваются CR CR LF. Некоторые программы Windows отображают первый символ CR как пробел. Другие считают это новой строкой (даже если это всего лишь "половина" новой строки).

Это не имеет никакого отношения к спецификации UTF-8. Btw, UTF-8 BOM абсолютно бесполезен.

Я не могу сказать о UltraEdit, но Notepad++, PSPad и другие редакторы Windows обнаруживают и отображают в своей строке состояния тип новых строк в файле, который они редактируют (Windows или Linux). Они также позволяют пользователю изменять тип новых строк из одной системы в другую.

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

  • 0
    Я возился с парой настроек, связанных с передачей файлов между локальным сервером и веб-сервером для учета этого конфликта Windows / Linux, и это, похоже, решило проблему. Возможно, придется немного поработать с настройками, чтобы убедиться, что он передает 100% правильно, но в противном случае это поставило меня на правильный путь к решению моей проблемы.
0

Проблема с файловым редактором.

Downlaod Notepad++ и установить символ в UTF-8 без спецификации и сохранить его.

Редактировать:

Установите разрешение файла только для чтения.

  • 0
    ОП: «Я заметил, что открытие поврежденных файлов и их повторное сохранение с UTF-8 БЕЗ ЗАПИСИ, похоже, исправляет проблему до тех пор, пока файл не закроется и не откроется позже. Я запускаю все свои файлы через программу, которая изменяет файлы быть НИКАКОЙ СПЕЦИАЛИСТОМ, но, похоже, это никак не повлияло ».

Ещё вопросы

Сообщество Overcoder
Наверх
Меню