PHP
отладка
Поиск…
Сбрасывающие переменные
Функция var_dump
позволяет сбрасывать содержимое переменной (тип и значение) для отладки.
Пример:
$array = [3.7, "string", 10, ["hello" => "world"], false, new DateTime()];
var_dump($array);
Выход:
array(6) {
[0]=>
float(3.7)
[1]=>
string(6) "string"
[2]=>
int(10)
[3]=>
array(1) {
["hello"]=>
string(5) "world"
}
[4]=>
bool(false)
[5]=>
object(DateTime)#1 (3) {
["date"]=>
string(26) "2016-07-24 13:51:07.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(13) "Europe/Berlin"
}
}
Отображение ошибок
Если вы хотите, чтобы PHP отображал ошибки во время выполнения на странице, вы должны включить display_errors
, либо в php.ini
либо с помощью функции ini_set
.
Вы можете выбрать, какие ошибки отображать, с функцией error_reporting
(или ini), которая принимает константы E_*
, объединенные с использованием побитовых операторов .
PHP может отображать ошибки в текстовом или HTML-формате, в зависимости от настройки html_errors
.
Пример:
ini_set("display_errors", true);
ini_set("html_errors", false); // Display errors in plain text
error_reporting(E_ALL & ~E_USER_NOTICE); // Display everything except E_USER_NOTICE
trigger_error("Pointless error"); // E_USER_NOTICE
echo $nonexistentVariable; // E_NOTICE
nonexistentFunction(); // E_ERROR
Вывод простого текста: (формат HTML отличается от реализаций)
Notice: Undefined variable: nonexistentVariable in /path/to/file.php on line 7
Fatal error: Uncaught Error: Call to undefined function nonexistentFunction() in /path/to/file.php:8
Stack trace:
#0 {main}
thrown in /path/to/file.php on line 8
ПРИМЕЧАНИЕ. Если сообщение об ошибках отключено в php.ini и включено во время выполнения, некоторые ошибки (например, ошибки синтаксического анализа) не будут отображаться, поскольку они произошли до того, как была применена установка времени выполнения.
Общий способ обработки error_reporting
состоит в том, чтобы полностью включить его с константой E_ALL
во время разработки и отключить публичное отображение его с помощью display_errors
на этапе производства, чтобы скрыть внутренности ваших скриптов.
phpinfo ()
Предупреждение
Крайне важно, чтобы phpinfo
использовался только в среде разработки. Никогда не phpinfo
код, содержащий phpinfo
в производственную среду
Вступление
Сказав это, это может быть полезным инструментом в понимании среды PHP (ОС, конфигурации, версий, путей, модулей), в которой вы работаете, особенно при погоне за ошибкой. Это простая встроенная функция:
phpinfo();
Он имеет один параметр $what
который позволяет настроить выход. По умолчанию используется INFO_ALL
, что позволяет отображать всю информацию и обычно используется во время разработки, чтобы увидеть текущее состояние PHP.
Вы можете передать параметр INFO_*
константы в сочетании с побитовыми операторами, чтобы увидеть настроенный список.
Вы можете запустить его в браузере для красиво оформленного подробного просмотра. Он также работает в PHP CLI, где вы можете перенаправить его на less
чтобы упростить просмотр.
пример
phpinfo(INFO_CONFIGURATION | INFO_ENVIRONMENT | INFO_VARIABLES);
Это отобразит список директив PHP ( ini_get
), среды ( $_ENV
) и предопределенных переменных.
Xdebug
Xdebug - это расширение PHP, которое обеспечивает возможности отладки и профилирования.
Он использует протокол отладки DBGp.
В этом инструменте есть несколько полезных функций:
- трассировка стека по ошибкам
- максимальная защита уровня вложенности и отслеживание времени
- полезная замена стандартной функции
var_dump()
для отображения переменных - позволяет записывать все вызовы функций, включая параметры и возвращаемые значения в файл в разных форматах
- анализ покрытия кода
- профилирующая информация
- удаленная отладка (обеспечивает интерфейс для клиентов отладчика, которые взаимодействуют с запущенными скриптами PHP)
Как вы видите, это расширение отлично подходит для среды разработки. Особенно удаленная функция отладки может помочь вам отладить ваш php-код без многочисленных var_dump и использовать обычный процесс отладки, как на языках C++
или Java
.
Обычно установка этого расширения очень проста:
pecl install xdebug # install from pecl/pear
И активируйте его в свой php.ini:
zend_extension="/usr/local/php/modules/xdebug.so"
В более сложных случаях см. Эту инструкцию
Когда вы используете этот инструмент, вы должны помнить, что:
XDebug не подходит для производственных условий
phpversion ()
Вступление
При работе с различными библиотеками и связанными с ними требованиями часто бывает необходимо знать версию текущего парсера PHP или одного из его пакетов.
Эта функция принимает единственный необязательный параметр в виде имени расширения: phpversion('extension')
. Если заданное расширение установлено, функция вернет строку, содержащую значение версии. Однако, если расширение, не установленное FALSE
будет возвращено. Если имя расширения не указано, функция вернет версию парсера PHP.
пример
print "Current PHP version: " . phpversion();
// Current PHP version: 7.0.8
print "Current cURL version: " . phpversion( 'curl' );
// Current cURL version: 7.0.8
// or
// false, no printed output if package is missing
Отчеты об ошибках (используйте их оба)
// this sets the configuration option for your environment
ini_set('display_errors', '1');
//-1 will allow all errors to be reported
error_reporting(-1);