Я сплю или возврат каретки мешает версиям PHP видеть строку кода?

Недавно я обнаружил, что строки кода, содержащие только «CR» вместо «CRLF» или «LF» в конце строки, заставляют PHP вести себя странно, а именно видеть две строки как одну, игнорировать CR или, точнее, интерпретируя это как то, что оно есть: возврат каретки, но не перевод строки.

Раньше у меня никогда не было этой проблемы, но в последнее время я обнаружил, что notepad ++ иногда ставит только CR, когда я нажимаю «Ввод», чтобы перейти на новую строку ... это приводит к тому, что скрипт ведет себя плохо.

Например, этот скрипт Hello World отлично работает, когда строки снабжены LF или CRLF, но падает только с CR (по крайней мере, я воспроизвел эту проблему как на серверах peer1, так и на серверах hostgator — у кого-то еще есть другой опыт?)...

<?php
Header( "HTTP/1.1 301 Moved Permanently" );
Header( "Location: http://www.cnn.com/" );
?>

и я получаю эту ошибку:

Неустранимая ошибка: вызов неопределенной функции phpheader() в /home/bernatch/public_html/test-redir-cr.php в строке 1

Очевидно, что PHP видит код <?php и функцию заголовка как находящиеся в одной строке...

Мой вопрос: а) есть ли способ заставить PHP интерпретировать один CR как действительно другую строку

or

б) есть ли способ заставить блокнот ++ вводить CRLF или LF всякий раз, когда я нажимаю Enter?


person Edgardo DelTabarnaco    schedule 27.06.2012    source источник


Ответы (2)


Маки используют CR. Линукс использует ЛФ. Windows использует CR-LF, поэтому было бы очень странно, если бы операционная система Windows не вставляла LF после CR. Может быть, я что-то упускаю здесь.

Отредактировано в Windows -> Просмотрено в Linux = ОК

Отредактировано в Windows -> Просмотрено на Mac = ОК

Так что я предполагаю, что это может быть ваш FTP-клиент. Обязательно загружайте текстовые файлы в формате ASCII, а не в двоичном формате.

person taco    schedule 01.09.2012

В Notepad++ вы сможете выполнить преобразование EOL в формат Windows, как указано в этом ответе SuperUser.com.

person Jeff Jenkins    schedule 27.06.2012