php eol что это

Когда использовать константу PHP «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:

# define PHPAPI __declspec(dllexport)

# define PHPAPI __declspec(dllimport)

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

# define PHPAPI __attribute__ ((visibility(«default»)))

Ответ 3

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

Ответ 4

При выводе на веб-страницу в HTML, особенно текста в

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

Ответ 5

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

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

if (!$handle = fopen($file, ‘a’)) <

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

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

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

Мы будем очень благодарны

если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.

Источник

Php eol что это

There is no way to implement a backwards compatible __DIR__ in versions prior to 5.3.0.

A lot of notes here concern defining the __DIR__ magic constant for PHP versions not supporting the feature. Of course you can define this magic constant for PHP versions not yet having this constant, but it will defeat its purpose as soon as you are using the constant in an included file, which may be in a different directory then the file defining the __DIR__ constant. As such, the constant has lost its *magic*, and would be rather useless unless you assure yourself to have all of your includes in the same directory.

Concluding: eye catchup at gmail dot com’s note regarding whether you can or cannot define magic constants is valid, but stating that defining __DIR__ is not useless, is not!

If you’re using PHP with fpm (common in this day and age), be aware that __DIR__ and __FILE__ will return values based on the fpm root which MAY differ from its actual location on the file system.

This can cause temporary head-scratching if deploying an app where php files within the web root pull in PHP files from outside of itself (a very common case). You may be wondering why __DIR__ returns «/» when the file itself lives in /var/www/html or whathaveyou.

You might handle such a situation by having NGINX explicitly add the necessary part of the path in its fastcgi request and then you can set the root on the FPM process / server / container to be something other than the webroot (so long as no other way it could become publicly accessible).

Hope that saves someone five minutes who’s moving code to FPM that uses __DIR__.

Источник

Строки

Замечание: Строки ( string ) не могут быть размером более 2 Гб (2147483647 байт).

Синтаксис

Строка может быть определена четырьмя различными способами:

Одинарные кавычки

Чтобы использовать одинарную кавычку внутри строки, проэкранируйте ее обратной косой чертой (\). Если необходимо написать саму обратную косую черту, продублируйте ее (\\). Все остальные случаи применения обратной косой черты будут интерпретированы как обычные символы: это означает, что если вы попытаетесь использовать другие управляющие последовательности, такие как \r или \n, они будут выведены как есть вместо какого-либо особого поведения.

Замечание: В отличие от синтаксиса двойных кавычек и heredoc, переменные и управляющие последовательности для специальных символов, заключенных в одинарные кавычки, не обрабатываются.

echo ‘это простая строка’ ;

echo ‘Также вы можете вставлять в строки
символ новой строки вот так,
это нормально’ ;

// Выводит: Однажды Арнольд сказал: «I’ll be back»
echo ‘Однажды Арнольд сказал: «I\’ll be back»‘ ;

// Выводит: Вы удалили C:\*.*?
echo ‘Вы удалили C:\\*.*?’ ;

// Выводит: Вы удалили C:\*.*?
echo ‘Вы удалили C:\*.*?’ ;

// Выводит: Это не будет развернуто: \n новая строка
echo ‘Это не будет развернуто: \n новая строка’ ;

Двойные кавычки

Если строка заключена в двойные кавычки («), PHP распознает большее количество управляющих последовательностей для специальных символов:

Управляющие последовательности

ПоследовательностьЗначение
\nновая строка (LF или 0x0A (10) в ASCII)
\rвозврат каретки (CR или 0x0D (13) в ASCII)
\tгоризонтальная табуляция (HT или 0x09 (9) в ASCII)
\vвертикальная табуляция (VT или 0x0B (11) в ASCII) (с версии PHP 5.2.5)
\eescape-знак (ESC или 0x1B (27) в ASCII) (с версии PHP 5.4.4)
\fподача страницы (FF или 0x0C (12) в ASCII) (с версии PHP 5.2.5)
\\обратная косая черта
\$знак доллара
двойная кавычка
\5последовательность символов, соответствующая регулярному выражению символа в восьмеричной системе счисления
\x[0-9A-Fa-f]последовательность символов, соответствующая регулярному выражению символа в шестнадцатеричной системе счисления

Как и в строке, заключенной в одинарные кавычки, экранирование любого символа выведет также и саму обратную косую черту. До версии PHP 5.1.1, обратная косая черта в \ не печаталась.

Но самым важным свойством строк в двойных кавычках является обработка переменных. Смотрите более подробно: обработка строк

Heredoc

Очень важно отметить, что строка с закрывающим идентификатором не должна содержать других символов, за исключением точки с запятой (;). Это означает, что идентификатор не должен вводиться с отступом и что не может быть никаких пробелов или знаков табуляции до или после точки с запятой. Важно также понимать, что первым символом перед закрывающим идентификатором должен быть символ новой строки, определенный в вашей операционной системе. Например, в UNIX системах, включая Mac OS X, это \n. После закрывающего идентификатора также сразу должна начинаться новая строка.

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

Heredoc не может быть использован для инициализации полей класса. Начиная с версии PHP 5.3, это ограничение распространяется только на heredoc, содержащие внутри себя переменные.

Пример #1 Неверный пример

Heredoc-текст ведет себя так же, как и строка в двойных кавычках, при этом их не имея. Это означает, что вам нет необходимости экранировать кавычки в heredoc, но вы по-прежнему можете использовать вышеперечисленные управляющие последовательности. Переменные обрабатываются, но с применением сложных переменных внутри heredoc нужно быть также внимательным, как и при работе со строками.

Пример #2 Пример определения heredoc-строки

= Пример строки,
охватывающей несколько строчек,
с использованием heredoc-синтаксиса.
EOD;

$foo = new foo ();
$name = ‘МоеИмя’ ;

Результат выполнения данного примера:

Также возможно использовать heredoc-синтаксис для передачи данных через аргументы функции:

Пример #3 Пример применения heredoc в аргументах

Начиная с версии 5.3.0, стала возможной инциализация статических переменных и свойств/констант класса с помощью синтаксиса heredoc:

Пример #4 Использование heredoc для инциализации статических переменных

// Class properties/constants
class foo
<
const BAR = Пример использования константы
FOOBAR;

Начиная с версии PHP 5.3.0 можно также окружать идентификатор Heredoc двойными кавычками:

Пример #5 Использование двойных кавычек в heredoc

Nowdoc

Nowdoc указывается той же последовательностью = Пример текста,
занимающего несколько строк,
с помощью синтаксиса nowdoc.
EOD;

$foo = new foo ();
$name = ‘МоеИмя’ ;

Результат выполнения данного примера:

В отличие от heredoc, nowdoc может быть использован в любом контексте со статическими данными. Типичный пример инициализации полей класса или констант:

Пример #7 Пример использования статичных данных

Поддержка nowdoc была добавлена в PHP 5.3.0.

Обработка переменных

Если строка указывается в двойных кавычках, либо при помощи heredoc, переменные внутри нее обрабатываются.

Существует два типа синтаксиса: простой и сложный. Простой синтаксис более легок и удобен. Он дает возможность обработки переменной, значения массива ( array ) или свойства объекта ( object ) с минимумом усилий.

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

Простой синтаксис

Если интерпретатор встречает знак доллара ($), он захватывает так много символов, сколько возможно, чтобы сформировать правильное имя переменной. Если вы хотите точно определить конец имени, заключайте имя переменной в фигурные скобки.

Результат выполнения данного примера:

Аналогично могут быть обработаны элемент массива ( array ) или свойство объекта ( object ). В индексах массива закрывающая квадратная скобка (]) обозначает конец определения индекса. Для свойств объекта применяются те же правила, что и для простых переменных.

Пример #8 Пример простого синтаксиса

$people = new people ();

Результат выполнения данного примера:

Для чего-либо более сложного, используйте сложный синтаксис.

Сложный (фигурный) синтаксис

Он называется сложным не потому, что труден в понимании, а потому что позволяет использовать сложные выражения.

Любая скалярная переменная, элемент массива или свойство объекта, отображаемое в строку, может быть представлена в строке этим синтаксисом. Просто запишите выражение так же, как и вне строки, а затем заключите его в <и >. Поскольку <не может быть экранирован, этот синтаксис будет распознаваться только когда $ следует непосредственно за <. Используйте <\$, чтобы напечатать <$. Несколько поясняющих примеров:

// Показываем все ошибки
error_reporting ( E_ALL );

echo «Это значение переменной по имени, которое возвращает функция getName(): <$< getName ()>> » ;

// Не работает, выводит: Это то, что возвращает getName():
echo «Это то, что возвращает getName(): » ;
?>

С помощью этого синтаксиса также возможен доступ к свойствам объекта внутри строк.

Результат выполнения данного примера:

Функции, вызовы методов, статические переменные классов, а также константы классов работает внутри , начиная с версии PHP 5. Однако, указываемое значение будет обработано как имя переменной в том же контексте, что и строка, в которой она определяется. Использование одинарных фигурных скобок (<>) не будет работать для доступа к значениям функций, методов, констант классов или статических переменных класса.

// Показываем все ошибки
error_reporting ( E_ALL );

$rootbeer = ‘A & W’ ;
$ipa = ‘Alexander Keith\’s’ ;

Доступ к символу в строке и его изменение

Строки в PHP внутренне представляют из себя массивы байт. Как результат, доступ или изменение строки по смещению небезопасно с точки зрения многобайтной кодировки, и должно выполняться только со строками в однобайтных кодировках, таких как, например, ISO-8859-1.

Пример #9 Несколько примеров строк

Начиная с PHP 5.4 смещение в строке должно задаваться либо целым числом либо строкой, содержащей цифры, иначе будет выдаваться предупреждение. Ранее смещение, заданное строкой вида «foo», без предупреждений преобразовывалось в 0.

Пример #10 Различия между PHP 5.3 и PHP 5.4

Результат выполнения данного примера в PHP 5.3:

Результат выполнения данного примера в PHP 5.4:

В PHP 5.5 была добавлена поддержка доступа к символам в строковых литералах с помощью синтаксиса [] или <>.

Полезные функции и операторы

Строки могут быть объединены при помощи оператора ‘.’ (точка). Обратите внимание, оператор сложения ‘+’ здесь не работает. Дополнительную информацию смотрите в разделе Строковые операторы.

Для модификации строк существует множество полезных функций.

Также существуют функции для работы с URL, и функции шифрования/дешифрования строк (mcrypt и mhash).

Преобразование в строку

Целое ( integer ) или число с плавающей точкой ( float ) преобразуется в строку, представленную числом, состоящим из его цифр (включая показатель степени для чисел с плавающей точкой). Числа с плавающей точкой могут быть преобразованы с помощью экспоненциального представления (4.1E+6).

NULL всегда преобразуется в пустую строку.

Преобразование строк в числа

Если строка распознается как числовое значение, результирующее значение и тип определяется так, как показано далее.

Если строка не содержит какой-либо из символов ‘.’, ‘e’, или ‘E’, и значение числа помещается в пределы целых чисел (определенных PHP_INT_MAX ), строка будет распознана как целое число ( integer ). Во всех остальных случаях она считается числом с плавающей точкой ( float ).

Более подробную информацию об этом преобразовании смотрите в разделе о strtod(3) документации Unix.

Если вы хотите протестировать любой из примеров этого раздела, скопируйте и вставьте его и следующую строку, чтобы увидеть, что происходит:

Подробности реализации строкового типа

Строковый тип ( string ) в PHP реализован в виде массива байт и целого числа, содержащего длину буфера. Он не содержит никакой информации о способе преобразования этих байт в символы, предоставляя эту задачу программисту. Нет никаких ограничений на содержимое строки, например, байт со значением 0 («NUL»-байт) может располагаться где угодно (однако, стоит учитывать, что некоторые функции, как сказано в этом руководстве, не являются «бинарно-безопасными», т.е. они могут передавать строки библиотекам, которые игнорируют данные после NUL-байта).

Принимая во внимание тот факт, что PHP не диктует определенную кодировку для строк, можно задать вопрос, как в таком случае кодируются строковые литералы. Например, строка «á» эквивалентна «\xE1» (ISO-8859-1), «\xC3\xA1» (UTF-8, форма нормализации C), «\x61\xCC\x81» (UTF-8, форма нормализации D) или какому-либо другому возможному представлению? Ответом является следующее: строка будет закодирована тем образом, которым она записана в файле скрипта. Таким образом, если скрипт записан в кодировке ISO-8859-1, то и строка будет закодирована в ISO-8859-1 и т.д. Однако, это правило не применяется при включенном режиме Zend Multibyte: в этом случае скрипт может быть записан в любой кодировке (которая указывается ясно или определяется автоматически), а затем конвертируются в определенную внутреннюю кодировку, которая и будет впоследствии использована для строковых литералов. Учтите, что на кодировку скрипта (или на внутреннюю кодировку, если включен режим Zend Multibyte) накладываются некоторые ограничения: практически всегда данная кодировка должна быть надмножеством ASCII, например, UTF-8 или ISO-8859-1. Учтите также, что кодировки, зависящие от состояния, где одни и те же значения байт могут быть использованы в начальном и не начальном состоянии сдвига (initial and non-inital shift state), могут вызвать проблемы.

Разумеется, чтобы приносить пользу, строковые функции должны сделать некоторые предположения о кодировке строки. К несчастью, среди PHP-функций довольно большое разнообразие подходов к этому вопросу:

В конечном счете, написание корректных программ, работающих с Unicode, означает осторожное избегание функций, которые не работают с Unicode и, скорее всего, испортят данные, и использование вместо них корректных функций, обычно из расширений intl и mbstring. Однако, использование функций, способных работать с Unicode, является самым началом. Вне зависимости от тех функций, которые предоставляет язык, необходимо знать спецификацию самого Unicode. Например, если программа предполагает существование в языке только строчных и заглавных букв, то она делает большую ошибку.

Источник

Когда я использую PHP-константу «PHP_EOL»?

Я иногда вижу это в примерах кода PHP. Это решает проблемы конечной линии DOS / Mac / Unix?

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

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

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

Вы используете, PHP_EOL когда вы хотите новую линию, и вы хотите быть кроссплатформенным.

Это может быть при записи файлов в файловую систему (журналы, экспорт, другое).

Вы бы использовали его, если вы запускаете php как скрипт из cron и вам нужно что-то вывести и отформатировать для экрана.

Вы можете использовать его, если создаете электронное письмо для отправки, которое требует некоторого форматирования.

PHP_EOL (string) Правильный символ «Конец строки» для этой платформы. Доступно с PHP 4.3.10 и PHP 5.0.2

Вы можете использовать эту константу при чтении или записи текстовых файлов в файловой системе сервера.

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

Если окончания строк имеют значение, явно указывайте окончания строк вместо использования константы. Например:

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

Если вы выводите на веб-страницу в HTML, в частности, текст

Нет, PHP_EOL не обрабатывает проблемы с конечной линией, потому что система, в которой вы используете эту константу, не та же система, в которую вы отправляете выходные данные.

Определение PHP_EOL заключается в том, что он дает вам символ новой строки операционной системы, над которой вы работаете.

На практике вам это почти никогда не нужно. Рассмотрим несколько случаев:

Когда вы выводите в Интернет, на самом деле не существует никаких соглашений, кроме того, что вы должны быть последовательными. Поскольку большинство серверов Unixy, вы все равно захотите использовать «\ n».

Если вы выводите в файл, PHP_EOL может показаться хорошей идеей. Тем не менее, вы можете получить аналогичный эффект, имея буквальный символ новой строки внутри вашего файла, и это поможет вам, если вы попытаетесь запустить некоторые файлы в формате CRLF в Unix, не забивая существующие символы новой строки (как парень с двойной загрузкой системы). Могу сказать, что предпочитаю последнее поведение)

PHP_EOL настолько смехотворно длинен, что его действительно не стоит использовать.

Источник

Когда я использую постоянную PHP «PHP_EOL»?

Я иногда вижу это в образцах кода PHP. Означает ли этот дескриптор проблемы DOS / Mac / Unix?

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

Вы используете PHP_EOL когда хотите новую строку, и хотите быть кросс-платформенным.

Это может быть, когда вы пишете файлы в файловой системе (журналы, экспорт, другие).

Вы бы использовали его, если вы используете php как скрипт из cron, и вам нужно было что-то выводить и отформатировать его для экрана.

Вы можете использовать его, если вы создаете электронное письмо для отправки, которое требует некоторого форматирования.

Из main/php.h PHP версии 5.6.30 и версии 7.1.1:

Я просто хотел показать значения возможностей PHP_EOL поддерживаемые PHP-источниками, так как пока не показано здесь …

PHP_EOL (строка) Правильный символ «Конец строки» для этой платформы. Доступно с PHP 4.3.10 и PHP 5.0.2

Вы можете использовать эту константу при чтении или записи текстовых файлов в файловой системе сервера.

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

Если заканчивается конец строки, явным образом указываю окончания строки вместо использования константы. Например:

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

Если вы выводите на веб-страницу в HTML, особенно текст в

Нет, PHP_EOL не обрабатывает проблемы с конечной точкой, потому что система, в которой вы используете эту константу, – это не та же система, куда вы отправляете вывод.

Существует одно очевидное место, где это может быть полезно: когда вы пишете код, который преимущественно использует одиночные кавычки. Его аргументы в пользу того,

Искусство этого должно быть последовательным. Проблема с миксами и совпадением «и» заключается в том, что когда вы получаете длинные строки, вы действительно не хотите идти на охоту за тем, какую цитату вы использовали.

Как со всеми вещами в жизни, это зависит от контекста.

Стандартная «новая линия» DOS / Windows – это CRLF (= \ r \ n), а не LFCR (\ n \ r). Если мы поместим последнее, это может привести к неожиданному (ну, по сути, виду ожидаемого!: D) поведения.

В настоящее время почти все (хорошо написанные) программы принимают стандарт UNF LF (\ n) для кода новой строки, даже демоны почтовых отправителей (RFC устанавливает CRLF как новую строку для заголовков и тела сообщения).

Вы пишете код, который преимущественно использует одиночные кавычки.

У меня есть сайт, где скрипт регистрации записывает новую строку текста в текстовый файл после действия пользователя, который может использовать любую ОС.

Использование PHP_EOL в этом случае не представляется оптимальным. Если пользователь находится в Mac OS и записывает в текстовый файл, он помещает \ n. При открытии текстового файла на компьютере Windows он не отображает разрыв строки. По этой причине я использую вместо этого «\ r \ n», который работает при открытии файла на любой ОС.

Handy с error_log (), если вы выводите несколько строк.

Я обнаружил, что многие отладочные заявления выглядят странно на моих установках Windows, поскольку разработчики предполагают окончание unix при разрыве строк.

Я использую константу PHP_EOL в некоторых сценариях командной строки, которые мне приходилось писать. Я разрабатываю свою локальную машину Windows, а затем тестирую на сервере Linux. Использование константы означало, что мне не нужно было беспокоиться об использовании правильной строки, заканчивающейся для каждой из разных платформ.

Я использую WebCalendar и обнаружил, что Mac iCal barfs импортирует сгенерированный файл ics, потому что конец строки жестко закодирован в xcal.php как «\ r \ n». Я вошел и заменил все вхождения PHP_EOL, и теперь iCal счастлив! Я также тестировал его на Vista, и Outlook смог также импортировать этот файл, даже если символ конца строки «\ n».

Очень раздражающая ошибка!

Вместо этого используйте PHP_EOL, чтобы получить результат.

Я предпочитаю использовать \ n \ r. Кроме того, я нахожусь в системе Windows, и \ n отлично работает в моем опыте.

Поскольку PHP_EOL не работает с регулярными выражениями, и это самый полезный способ работы с текстом, я никогда не использовал его или не нуждался.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *