PHP
Debugowanie
Szukaj…
Zmienne zrzutowe
Funkcja var_dump
pozwala zrzucić zawartość zmiennej (typ i wartość) w celu debugowania.
Przykład:
$array = [3.7, "string", 10, ["hello" => "world"], false, new DateTime()];
var_dump($array);
Wynik:
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"
}
}
Wyświetlanie błędów
Jeśli chcesz, aby PHP wyświetlało błędy czasu wykonywania na stronie, musisz włączyć display_errors
, albo w php.ini
albo przy użyciu funkcji ini_set
.
Możesz wybrać, które błędy mają być wyświetlane, za pomocą funkcji error_reporting
(lub ini), która akceptuje stałe E_*
, połączone za pomocą operatorów bitowych .
PHP może wyświetlać błędy w formacie tekstowym lub HTML, w zależności od ustawienia html_errors
.
Przykład:
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
Zwykły tekst: (format HTML różni się w zależności od implementacji)
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
UWAGA: Jeśli masz wyłączone raportowanie błędów w php.ini i włączasz je w czasie wykonywania, niektóre błędy (takie jak błędy analizy) nie będą wyświetlane, ponieważ wystąpiły one przed zastosowaniem ustawienia środowiska wykonawczego.
Powszechnym sposobem obsługi error_reporting
jest włączenie go w pełni ze stałą E_ALL
podczas programowania i wyłączenie publicznego wyświetlania go za pomocą display_errors
na etapie produkcji, aby ukryć wewnętrzne skrypty.
phpinfo ()
Ostrzeżenie
Konieczne jest, aby phpinfo
było używane tylko w środowisku programistycznym. Nigdy nie wypuszczaj kodu zawierającego phpinfo
do środowiska produkcyjnego
Wprowadzenie
To powiedziawszy, może być użytecznym narzędziem do zrozumienia środowiska PHP (system operacyjny, konfiguracja, wersje, ścieżki, moduły), w którym pracujesz, szczególnie gdy ścigasz błąd. Jest to prosta wbudowana funkcja:
phpinfo();
Ma jeden parametr $what
pozwala dostosować dane wyjściowe. Domyślnie jest to INFO_ALL
, co powoduje, że wyświetla wszystkie informacje i jest często używane podczas programowania do sprawdzania aktualnego stanu PHP.
Możesz przekazać parametr INFO_*
stałe w połączeniu z operatorami INFO_*
, aby wyświetlić dostosowaną listę.
Możesz uruchomić go w przeglądarce, aby uzyskać ładnie sformatowany szczegółowy wygląd. Działa również w interfejsie CLI PHP, w którym można go potokować w less
aby ułatwić przeglądanie.
Przykład
phpinfo(INFO_CONFIGURATION | INFO_ENVIRONMENT | INFO_VARIABLES);
Spowoduje to wyświetlenie listy dyrektyw PHP ( ini_get
), środowiska ( $_ENV
) i predefiniowanych zmiennych.
Xdebug
Xdebug to rozszerzenie PHP zapewniające funkcje debugowania i profilowania.
Wykorzystuje protokół debugowania DBGp.
W tym narzędziu jest kilka fajnych funkcji:
- stosy śladów błędów
- maksymalna ochrona poziomu zagnieżdżenia i śledzenie czasu
- pomocna zamiana standardowej funkcji
var_dump()
do wyświetlania zmiennych - pozwala rejestrować wszystkie wywołania funkcji, w tym parametry i zwracać wartości do pliku w różnych formatach
- analiza zasięgu kodu
- informacje o profilowaniu
- zdalne debugowanie (zapewnia interfejs dla klientów debugujących, które współdziałają z uruchomionymi skryptami PHP)
Jak widać, to rozszerzenie doskonale nadaje się do środowiska programistycznego. Szczególnie funkcja zdalnego debugowania może pomóc w debugowaniu kodu php bez wielu var_dump i użyć normalnego procesu debugowania jak w językach C++
lub Java
.
Zwykle instalacja tego rozszerzenia jest bardzo prosta:
pecl install xdebug # install from pecl/pear
I aktywuj go w swoim php.ini:
zend_extension="/usr/local/php/modules/xdebug.so"
W bardziej skomplikowanych przypadkach zobacz tę instrukcję
Korzystając z tego narzędzia, należy pamiętać, że:
XDebug nie nadaje się do środowisk produkcyjnych
phpversion ()
Wprowadzenie
Podczas pracy z różnymi bibliotekami i powiązanymi z nimi wymaganiami często trzeba znać wersję bieżącego parsera PHP lub jednego z jego pakietów.
Ta funkcja przyjmuje pojedynczy opcjonalny parametr w postaci nazwy rozszerzenia: phpversion('extension')
. Jeśli to rozszerzenie jest zainstalowane, funkcja zwróci ciąg zawierający wartość wersji. Jeśli jednak rozszerzenie nie zostanie zainstalowane, FALSE
zostanie zwrócone. Jeśli nazwa rozszerzenia nie zostanie podana, funkcja zwróci wersję samego parsera PHP.
Przykład
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
Raportowanie błędów (użyj ich obu)
// this sets the configuration option for your environment
ini_set('display_errors', '1');
//-1 will allow all errors to be reported
error_reporting(-1);