PHP
Debugging
Zoeken…
Dumping variabelen
Met de functie var_dump
kunt u de inhoud van een variabele (type en waarde) dumpen voor foutopsporing.
Voorbeeld:
$array = [3.7, "string", 10, ["hello" => "world"], false, new DateTime()];
var_dump($array);
Output:
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"
}
}
Fouten weergeven
Als u wilt dat PHP runtime-fouten op de pagina weergeeft, moet u display_errors
inschakelen, in php.ini
of met de functie ini_set
.
U kunt kiezen welke fouten u wilt weergeven, met de functie error_reporting
(of in de ini), die E_*
accepteert, gecombineerd met bitsgewijze operatoren .
PHP kan fouten in tekst- of HTML-indeling weergeven, afhankelijk van de instelling html_errors
.
Voorbeeld:
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
Tekstuitvoer zonder opmaak: (HTML-indeling verschilt tussen implementaties)
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
OPMERKING: Als u foutrapportage hebt uitgeschakeld in php.ini en dit tijdens runtime inschakelt, worden sommige fouten (zoals parse-fouten) niet weergegeven, omdat ze zijn opgetreden voordat de runtime-instelling werd toegepast.
De gebruikelijke manier om error_reporting
te handelen is om het volledig in te schakelen met E_ALL
constant tijdens de ontwikkeling en het publiekelijk weergeven met display_errors
in de productiefase uit te schakelen om de interne E_ALL
van uw scripts te verbergen.
phpinfo ()
Waarschuwing
Het is absoluut noodzakelijk dat phpinfo
alleen in een ontwikkelomgeving wordt gebruikt. Geef nooit code met phpinfo
in een productieomgeving
Invoering
Dat gezegd hebbende, kan het een nuttig hulpmiddel zijn bij het begrijpen van de PHP-omgeving (OS, configuratie, versies, paden, modules) waarin u werkt, vooral wanneer u een bug achterna zit. Het is een eenvoudige ingebouwde functie:
phpinfo();
Het heeft één parameter $what
waarmee de uitvoer kan worden aangepast. De standaardwaarde is INFO_ALL
, waardoor alle informatie wordt weergegeven en tijdens de ontwikkeling vaak wordt gebruikt om de huidige status van PHP te bekijken.
U kunt de parameter INFO_*
constanten INFO_*
, gecombineerd met bitsgewijze operatoren om een aangepaste lijst te bekijken.
Je kunt het in de browser uitvoeren voor een mooi opgemaakte gedetailleerde look. Het werkt ook in PHP CLI, waar u het naar less
buizen kunt spuiten voor eenvoudiger zicht.
Voorbeeld
phpinfo(INFO_CONFIGURATION | INFO_ENVIRONMENT | INFO_VARIABLES);
Dit toont een lijst met PHP-richtlijnen ( ini_get
), omgeving ( $_ENV
) en vooraf gedefinieerde variabelen.
Xdebug
Xdebug is een PHP-extensie die mogelijkheden biedt voor foutopsporing en profilering.
Het maakt gebruik van het DBGp-foutopsporingsprotocol.
Er zijn enkele leuke functies in deze tool:
- stapel sporen op fouten
- maximale nestniveau-bescherming en tijdregistratie
- nuttige vervanging van standaard
var_dump()
functie voor het weergeven van variabelen - maakt het mogelijk om alle functieaanroepen te loggen, inclusief parameters en retourwaarden naar een bestand in verschillende formaten
- code dekking analyse
- profilering informatie
- foutopsporing op afstand (biedt interface voor debugger-clients die communiceren met actieve PHP-scripts)
Zoals u kunt zien, is deze extensie perfect geschikt voor de ontwikkelomgeving. Vooral de functie voor foutopsporing op afstand kan u helpen om uw php-code te debuggen zonder talloze var_dump's en het normale foutopsporingsproces te gebruiken zoals in C++
of Java
talen.
Meestal is het installeren van deze extensie heel eenvoudig:
pecl install xdebug # install from pecl/pear
En activeer het in je php.ini:
zend_extension="/usr/local/php/modules/xdebug.so"
Raadpleeg deze instructies in meer gecompliceerde gevallen
Wanneer u deze tool gebruikt, moet u onthouden dat:
XDebug is niet geschikt voor productieomgevingen
phpversion ()
Invoering
Wanneer u met verschillende bibliotheken en de bijbehorende vereisten werkt, is het vaak noodzakelijk om de versie van de huidige PHP-parser of een van de pakketten te kennen.
Deze functie accepteert een enkele optionele parameter in de vorm van een extensienaam: phpversion('extension')
. Als de betreffende extensie is geïnstalleerd, retourneert de functie een tekenreeks met de versiewaarde. Als de extensie niet is geïnstalleerd, wordt FALSE
geretourneerd. Als de extensienaam niet wordt opgegeven, retourneert de functie de versie van PHP parser zelf.
Voorbeeld
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
Foutrapportage (gebruik ze allebei)
// this sets the configuration option for your environment
ini_set('display_errors', '1');
//-1 will allow all errors to be reported
error_reporting(-1);