Web

Когда использовать константу PHP «PHP_EOL»

Когда лучше всего использовать PHP_EOL?

Иногда я вижу ее в примерах кода PHP. Решает ли это проблемы завершения строки в системах DOS/Mac/Unix?

 

Ответ 1

Да, PHP_EOL якобы используется для поиска символа новой строки кроссплатформенным способом, поэтому это решает проблемы в DOS/Unix.

Обратите внимание, что PHP_EOL представляет собой символ конца строки для текущей системы. Например, он не найдет конечную строку Windows при выполнении в unix-подобной системе.

 

Ответ 2

Начиная main/php.h с версии PHP 7.1.1 и версии 5.6.30:

#ifdef  PHP_WIN32

#   include "tsrm_win32.h"

#   include "win95nt.h"

#   ifdef PHP_EXPORTS

#       define PHPAPI __declspec(dllexport)

#   else

#       define PHPAPI __declspec(dllimport)

#   endif

#   define PHP_DIR_SEPARATOR '\\'

#   define PHP_EOL "\r\n"

#else

#   if defined(__GNUC__) && __GNUC__ >= 4

#       define PHPAPI __attribute__ ((visibility("default")))

#   else

#       define PHPAPI

#   endif

#   define THREAD_LS

#   define PHP_DIR_SEPARATOR '/'

#   define PHP_EOL "\n"

#endif

Как видите, PHP_EOL может быть "\r\n"(на серверах Windows) или "\n"(на любом другом). В версиях PHP до 5.4.0RC8 было возможно третье значение для PHP_EOL"\r"(на серверах MacOSX). Это было неправильно и было исправлено 01.03.2012 с ошибкой 61193.

Вы можете использовать PHP_EOL в любом виде вывода (где допустимы любые из этих значений - например, HTML, XML, журналы ...), где вы хотите использовать унифицированные символы новой строки. Имейте в виду, что значение определяет сервер, а не клиент. Пользователи Windows будут получать выгоду от вашего сервера Unix, что иногда для них неудобно.

 

Ответ 3

Вы используете PHP_EOL, когда вам нужна новая строка и вы хотите использовать кроссплатформенный подход. Это можно применять при записи файлов в файловую систему (журналы, экспорт и другие). Вы можете использовать это, если хотите, чтобы сгенерированный вами HTML был читабельным. Поэтому вы можете сопровождать ваш <br /> символом PHP_EOL. Также это можно использовать, если вы запускаете php как скрипт из cron и вам нужно вывести что-то и отформатировать это для экрана. Или, если вы создаете письмо для отправки, которое нуждается в форматировании.

 

Ответ 4

Я бы хотел добавить ответ на вопрос «Когда не следует его использовать», поскольку он еще не рассматривался, и я могу представить, что он используется вслепую, и никто не замечает проблемы до тех пор, пока не появится проблема. Некоторые из этих вопросов несколько противоречат некоторым существующим ответам.

При выводе на веб-страницу в HTML, особенно текста в <textarea>, <pre> или <code>, вы, вероятно, всегда захотите использовать \n, а не PHP_EOL.

Причина этого в том, что хотя код может хорошо работать на одном сервере который является Unix-подобной платформой при развертывании на хосте Windows (например, на платформе Windows Azure) он может изменить отображение страниц в некоторых браузерах (в частности, в Internet Explorer, некоторые версии которого будут видеть и \n, и \r).

Я не уверен, осталась ли эта проблема со времен IE6 или нет, так что это может быть довольно спорным, но, считаю необходимым предупредить, если это поможет людям задуматься о контексте. Могут быть и другие случаи (например, строгий XHTML), когда вывод \r' на некоторых платформах может вызвать проблемы с выводом, и я уверен, что есть и другие подобные случаи. Как уже было отмечено, вы не захотите использовать его при возврате HTTP-заголовков, поскольку они всегда должны соответствовать RFC на любой платформе.

Я бы не стал использовать его для чего-то вроде разделителей в CSV-файлах. Платформа, на которой работает сервер, не должна определять окончания строк в генерируемых или потребляемых файлах.

 

Ответ 5

Я нашел PHP_EOL очень полезным для работы с файлами, особенно если вы записываете в файл несколько строк содержимого. Например, у вас есть длинная строка, которую вы хотите разбить на несколько строк при записи в обычный файл. Использование \r\n может не сработать, поэтому просто добавьте PHP_EOL в свой скрипт, и результат будет потрясающим. Посмотрите на этот простой пример ниже:

<?php

 $output = ' Это строка 1' . PHP_EOL .

          ' Это строка 2' . PHP_EOL .

          ' Это строка 3';

 $file = "filename.txt";

 

 if (is_writable($file)) {

 

    // В нашем примере мы открываем $file в режиме append.

    // Указатель файла находится в конце файла, следовательно.

    // именно туда попадет $output, когда мы запишем его через fwrite().

    if (!$handle = fopen($file, 'a')) {

         echo "Не удалось открыть файл ($file)";

         exit;

    }

    // Записываем $output в наш открытый файл.

    if (fwrite($handle, $output) === FALSE) {

        echo "Не удалось записать в файл ($file)";

        exit;

    }

    echo "Успех, содержимое ($output) записано в файл ($file)";

    fclose($handle);

} else {

    echo "Файл $file не доступен для записи";

}

?>

 

Схожие статьи

Что такое веб-дизайнер. Описание профессии и ее подводные камни
Web

Что такое веб-дизайнер. Описание профессии и ее подводные камни

Web

Как экранировать строки в SQL Server с помощью PHP

Web

Допустимо ли использование коротких тегов PHP?

Web

Как преобразовать серию «родитель-потомок» в иерархическое дерево