Список опций командной строки
Список опций, доступный при запуске PHP из командной строки, может быть получен в любой момент путем запуска PHP с ключом -h :
Usage: php [options] [-f] [--] [args. ] php [options] -r [--] [args. ] php [options] [-B ] -R [-E ] [--] [args. ] php [options] [-B ] -F [-E ] [--] [args. ] php [options] -- [args. ] php [options] -a -a Интерактивный запуск -c | Ищет файл php.ini в указанной директории -n Не использовать файл php.ini -d foo[=bar] Установить конфигурационную опцию foo значением 'bar' -e Генерация дополнительной информации для отладчика и профайлера -f Парсит и исполняет -h Текущая справка -i Выводит информацию о PHP -l Проверка синтаксиса (lint) -m Показать скомпилированные модули -r Запустить PHP-код без использования -B Запустить PHP до обработки введенного кода -R Запустить PHP для каждой введенной строки -F Парсить и выполнять для каждой введенной строки -E Запустить PHP после обработки всех введенных строк -H Спрятать все переданные аргументы от внешних инструментов -S : Запустить со встроенным веб-сервером. -t Указать корень документов для встроенного веб-сервера. -s Отображает исходный код с цветной подсветкой -v Выводит информацию о версии PHP -w Отображает исходный текст без комментариев и пробелов -z Загрузить Zend-расширение . args. Аргументы, передаваемые скрипту. Используйте -- args в случае, если первый аргумент начинается с '-' или сам скрипт читается из потока STDIN. --ini Показывать имена конфигурационных файлов --rf Показать информацию о функции . --rc Показать информацию о классе . --re Показать информацию о расширении . --rz Показать информацию о Zend-расширении . --ri Показать конфигурацию для расширения .
PHP запускается интерактивно. Подробнее смотрите в разделе Интерактивная консоль.
Путь связывания библиотек (Bind Path) для внешнего режима FASTCGI Server (только для CGI ).
Не менять текущую директорию на директорию скрипта (только для CGI ).
Тихий режим. Подавляет вывод заголовков HTTP (только для CGI ).
Измерить время выполнения скрипта, повторенного count раз (только для CGI ).
При помощи этой опции можно указать директорию для поиска конфигурационного файла php.ini либо непосредственно указать на сам INI-файл (название которого может отличаться от стандартного php.ini ), например:
$ php -c /custom/directory/ my_script.php $ php -c /custom/directory/custom-file.ini my_script.php
Если эта опция не указана, поиск php.ini будет осуществлен в обычном месте.
Полностью игнорировать php.ini .
Устанавливает специальное значение для каждой из конфигурационных переменных, доступных в php.ini . Синтаксис выглядит следующим образом:
-d configuration_directive[=value]
# Если значение опущено, то соответствующей опции будет присвоено значение "1" $ php -d max_execution_time -r '$foo = ini_get("max_execution_time"); var_dump($foo);' string(1) "1" # Указание пустого значения установит соответствующую опцию значением "" php -d max_execution_time= -r '$foo = ini_get("max_execution_time"); var_dump($foo);' string(0) "" # Конфигурационная переменная будет установлена любым значением, указанным после символа '=' $ php -d max_execution_time=20 -r '$foo = ini_get("max_execution_time"); var_dump($foo);' string(2) "20" $ php -d max_execution_time=doesntmakesense -r '$foo = ini_get("max_execution_time"); var_dump($foo);' string(15) "doesntmakesense"
Включить режим расширенной информации, используемый отладчиком/профайлером.
Парсит и исполняет файл, указанный в опции -f . Этот переключатель необязателен и может быть убран. Достаточно передавать только имя запускаемого файла.
Замечание:
Для передачи аргументов в скрипт, первый аргумент должен быть —, иначе PHP воспримет их как свои опции.
Предоставляет удобный способ для проверки заданного PHP-кода на наличие синтаксических ошибок. В случае успешной проверки будет напечатана следующая фраза: «No syntax errors detected in «, — и код возврата будет равен 0. А в случае неудачи — текст «Errors parsing » вместе с внутренними сообщениями парсера и код возврата будет равен -1.
Проверка исходного кода при помощи данной опции не находит фатальных ошибок (например, таких как вызов неопределенных функций). Используйте опцию -f , если вы хотите проверить код на наличие фатальных ошибок.
Замечание:
Эта опция несовместима с опцией -r .
Пример #1 Вывод встроенных (и загружаемых) PHP и Zend модулей
$ php -m [PHP Modules] xml tokenizer standard session posix pcre overload mysql mbstring ctype [Zend Modules]
Позволяет выполнять PHP-код, указанный непосредственно в командной строке. Открывающие и закрывающие PHP-теги ( и ?>) не нужны и, более того, приводят к синтаксической ошибке.
Замечание:
При использовании этого ключа следует быть очень осторожным и избегать недоразумений, связанных с автоматической подстановкой переменных окружения.
Пример #2 Ошибка синтаксиса при использовании двойных кавычек
$ php -r "$foo = get_defined_constants();" PHP Parse error: syntax error, unexpected '=' in Command line code on line 1 Parse error: syntax error, unexpected '=' in Command line code on line 1
Проблема заключается в том, что sh/bash выполняет автоматическую подстановку переменных в случае, если используются двойные кавычки («). Поскольку переменная $foo вряд ли определена, она заменяется пустой строкой, так что передаваемый PHP-код для выполнения выглядит следующим образом:
$ php -r " = get_defined_constants();"
Правильным решением в данном случае будет использование одиночных кавычек ‘, поскольку автоматическая подстановка переменных, заключенных в одиночные кавычки, в sh/bash не происходит.
Пример #3 Использование одинарных кавычек для предотвращения подстановки переменных в консоли
$ php -r '$foo = get_defined_constants(); var_dump($foo);' array(370) < ["E_ERROR"]=>int(1) ["E_WARNING"]=> int(2) ["E_PARSE"]=> int(4) ["E_NOTICE"]=> int(8) ["E_CORE_ERROR"]=> [. ]
При использовании оболочки, отличной от sh/bash, могут возникнуть другие вопросы. В таком случае необходимо создать отчет о возникшей ошибке на сайте » http://bugs.php.net/. Можно столкнуться с проблемами при попытке получить доступ к переменным оболочки или при работе с экранирующими обратными слешами. Теперь вы предупреждены!
Замечание:
Ключ -r доступен в CLI SAPI , но недоступен в CGI SAPI .
Замечание:
Эта опция предназначена только для самых базовых вещей. Поэтому некоторые конфигурационные директивы (например, auto_prepend_file и auto_append_file) в этом режиме будут проигнорированы.
Выполняемый PHP-код до обработки потока ввода (stdin). Добавлена в PHP 5.
PHP-код, выполняемый для каждой введенной строки. Добавлена в PHP 5.
В этом режиме есть две специальные переменные: $argn и $argi . $argn содержит строку, которую PHP обрабатывает в данный момент, а $argi содержит номер этой строки.
PHP-файл, выполняемый для каждой введенной строки. Добавлена в PHP 5.
PHP-код, выполняемый после обработки ввода. Добавлена в PHP 5.
Пример #4 Использование опций -B , -R и -E для подсчета количества строк в проекте.
$ find my_proj | php -B '$l=0;' -R '$l += count(@file($argn));' -E 'echo "Всего строк: $l\n";' Всего строк: 37328
Запускает встроенный веб-сервер. Доступна, начиная с версии PHP 5.4.0.
Показать исходный код с подсвеченным разными цветами синтаксисом.
Эта опция использует внутренний механизм для парсинга файла и записи в стандартный поток вывода подсвеченную HTML-версию этого файла. Учтите, что все что она делает, это генерирует блок [. ]
HTML-тегов, без HTML-заголовков.
Замечание:
Эта опция несовместима с опцией -r .
Пример #5 Использование -v для получения типа SAPI и версии PHP и Zend
$ php -v PHP 5.3.1 (cli) (built: Dec 11 2009 19:55:07) Copyright (c) 1997-2009 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2009 Zend Technologies
Показать исходный код без комментариев и пробелов.
Замечание:
Эта опция несовместима с опцией -r .
Загружает Zend-расширение. Если передано только имя файла, PHP попытается загрузить это расширение из вашего системного пути поиска библиотек по умолчанию (обычно он указывается в /etc/ld.so.conf в Linux системах). Передача файла с абсолютным путем не будет использовать данный системный путь поиска. Относительное имя файла, содержащее директорию, укажет PHP подгрузить расширение относительно текущей директории.
Показывает имена конфигурационных файлов и сканируемые директории. Доступна, начиная с версии PHP 5.2.3.
Пример #6 Пример —ini
$ php --ini Configuration File (php.ini) Path: /usr/dev/php/5.2/lib Loaded Configuration File: /usr/dev/php/5.2/lib/php.ini Scan for additional .ini files in: (none) Additional .ini files parsed: (none)
Показывают информацию об указанной функции или методе класса (например, количество и названия параметров). Доступна, начиная с версии PHP 5.1.2.
Эта опция доступна только в случае если PHP был скомпилирован с поддержкой Reflection.
Пример #7 Базовое использование —rf
$ php --rf var_dump Function [ public function var_dump ] < - Parameters [2] < Parameter #0 [ $var ] Parameter #1 [ $. ] > >
Показывает информацию об указанном классе (список констант, свойств и методов). Доступна, начиная с версии PHP 5.1.2.
Эта опция доступна только в случае если PHP был скомпилирован с поддержкой Reflection.
Пример #8 Пример —rc
$ php --rc Directory Class [ class Directory ] < - Constants [0] < >- Static properties [0] < >- Static methods [0] < >- Properties [0] < >- Methods [3] < Method [ public method close ] < >Method [ public method rewind ] < >Method [ public method read ] < >> >
Показывает информацию об указанном расширении (список опций php.ini , определенных функций, констант и классов). Доступна, начиная с версии PHP 5.1.2.
Эта опция доступна только в случае если PHP был скомпилирован с поддержкой Reflection.
Пример #9 Пример —re
$ php --re json Extension [ extension #19 json version 1.2.1 ] < - Functions < Function [ function json_encode ] < >Function [ function json_decode ] < >> >
Показывает информацию о конфигурации указанного Zend-расширения (та же информация, что показывается функцией phpinfo() ). Доступна, начиная с версии PHP 5.4.0.
Показывает информацию о конфигурации указанного расширения (та же информация, что показывается функцией phpinfo() ). Доступна, начиная с версии PHP 5.2.2. Конфигурацию ядра можно узнать, указав в качестве имени расширения значение «main».
Пример #10 Пример —ri
$ php --ri date date date/time support => enabled "Olson" Timezone Database Version => 2009.20 Timezone Database => internal Default timezone => Europe/Oslo Directive => Local Value => Master Value date.timezone => Europe/Oslo => Europe/Oslo date.default_latitude => 59.930972 => 59.930972 date.default_longitude => 10.776699 => 10.776699 date.sunset_zenith => 90.583333 => 90.583333 date.sunrise_zenith => 90.583333 => 90.583333
Замечание:
Опции -rBRFEH, —ini и —r[fcezi] доступны только в CLI .
How to Hide Warnings in PHP
Ugh! As PHP developers, we’ve all seen something like this more than we’d like:
Warning: include(included.php): failed to open stream: No such file or directory in /var/www/html/include1.php on line 6
As a general rule, you don’t want to hide warnings like this. You want to be aware of them, and fix them, before your users see them. If you want to handle warnings in another way, I’ll talk about that below. But first, let’s look at the standard, “best practices” way to deal with them.
In your development environment, you want PHP warnings to be displayed and logged. In production, you want them hidden, but logged.
In order to accomplish this, open your php.ini file in your editor of choice, and search for display_errors Change the setting to On for development, and Off for production. Like this:
You may also want to check that errors are being logged as desired in both environments, like this (also in php.ini ):
Also, make sure that your error_reporting setting is sensible. If you look in php.ini , you’ll find that the recommended settings for error_reporting are:
error_reporting = E_ALL ; Default Value: E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED ; Development Value: E_ALL ; Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT
After making changes to php.ini , usually you will need to restart Apache in order for the changes to take effect.
If you don’t see the change taking place, you should double check a few things:
- Make sure there are no duplicate occurrences of display_errors in your ini file.
- Look around to see if there are any other php.ini files with this setting that might be overriding the main one.
- Check that the code is not using ini_set to override the php.ini file.
Now, sometimes a warning is expected, and you just want the warning logged, and not displayed. In that case, you can write your code to work around the warning, like so:
$display_errors = ini_get('display_errors'); // get the initial value ini_set('display_errors', 0); // do not display errors or warnings. Yup, it turns off warnings, too. $result = function_that_causes_a_warning(); // the warning will not be displayed because of the above line. ini_set('display_errors', $display_errors); // reset display_errors to the initial value.
This use case is very unusual. If you find yourself needing to do this, ask yourself if it’s really the best thing to do. Normally, you don’t want to “hack” the global settings that have been applied in php.ini .