Beim Debuggen von PHP-Skripten die über Ajax angesprochen werden gibt es ja das Problem, das Ausgaben die zum Beispiel mit var_dump() gemacht werden nicht im Browser erscheinen sondern als Response zum Ajax-Skript gehen.
Um die Debug-Ausgaben dort sichtbar zu machen, kann der Netzwermonitor des Browsers benutzt werden oder das Ajax-Skript mit einem console.log bestückt werden.
Codeausschnitt:
Das funktioniert ganz gut, sofern das ganze Ajax schon läuft und die Debug-Ausgaben im Response nicht stören.
Eine Alternative für das Debugging sieht wie folgt aus:
upload.php
Als erster Test wird die Datei upload.php direkt im Browser aufgerufen. Ausgabe:
Notice: Undefined variable: _FILE in C:\XAMPP\htdocs\js\jquery\upload.php on line 12
Ok
Wir rufen jetzt debug.html in einen neuen Browsertab auf um die grundlegende Funktionalität der Debugausgabe zu überprüfen:
[01-Aug-2019 10:36:59] PHP Notice: Undefined variable: _FILE in C:\XAMPP\htdocs\js\jquery\upload.php on line 12
Wir korrigieren nun den hier zu Demozwecken absichtlich gemachten Schreibfehler $_FILE in $_FILES, starten unsere Ajax-Appikation,
wechseln zu debug.html und aktualisieren das Fenster:
.
Das Array wird hier im Forum nicht richtig wiedergegeben, in echt ist es so formatiert:
Die Vorteile der PHP-Debug-Variante liegen auf der Hand. Um nur einige zu nennen:
- kein Verfälschen des Ajax-Responses
- Anzeige der Zeilennummer der Ausgabe
- Zeitstempel
- einfache Datenübernahme für isolierte Tests
Neben dem hier geschilderten Fall kann die Ausgabe von Debug-Informationen in eine HTML-Datei noch ganz nützlich sein
für Skripte die per Cron gestartet werden oder Skripte die Grafiken per GD-Funktionen erzeugen.
---------------------------------------------------------------------------------
- Ist der Beitrag hilfreich?
- Wird die Problematik verständlich rübergebracht ?
- Sind die Beispiele ausreichend ?
LG jspit
Um die Debug-Ausgaben dort sichtbar zu machen, kann der Netzwermonitor des Browsers benutzt werden oder das Ajax-Skript mit einem console.log bestückt werden.
Codeausschnitt:
Code:
$.ajax({ url: 'upload.php', data: data, type: 'POST', processData: false, contentType: false, success: function(data) { console.log(data); }
Eine Alternative für das Debugging sieht wie folgt aus:
upload.php
PHP-Code:
<?php
error_reporting(-1);
ini_set('display_errors', 1);
//debug-klasse einbinden
require __DIR__.'/../../php/class/class.debug.php'; //Pfad anpassen!
//debugausgaben in html logdatei inklusive Fehlermeldungen
debug::log("debug.html",true);
//arrays $_POST und $_FILES ausgeben
debug::write('POST,FILES',$_POST,$_FILE);
//Response
echo 'Ok';
Notice: Undefined variable: _FILE in C:\XAMPP\htdocs\js\jquery\upload.php on line 12
Ok
Wir rufen jetzt debug.html in einen neuen Browsertab auf um die grundlegende Funktionalität der Debugausgabe zu überprüfen:
[01-Aug-2019 10:36:59] PHP Notice: Undefined variable: _FILE in C:\XAMPP\htdocs\js\jquery\upload.php on line 12
[01.08.2019 10:36:59,938][+652 μs](519k/580k) Debug::write "upload.php" Line 12 | ||
0 | string(10) ASCII | "POST,FILES" |
1 | array(0) | array ( ) |
2 | NULL | NULL |
wechseln zu debug.html und aktualisieren das Fenster:
.
[01.08.2019 10:43:04,625][+35 μs](520k/581k) Debug::write "upload.php" Line 12 | ||
0 | string(10) ASCII | "POST,FILES" |
1 | array(0) | array ( ) |
2 | array(1) | array ( 'file' => array ( 'name' => "12.png", 'type' => "image/png", 'tmp_name' => "C:\\XAMPP\\tmp\\php14A.tmp", 'error' => 0, 'size' => 1333, ), ) |
PHP-Code:
array (
'file' =>
array (
'name' => "12.png",
'type' => "image/png",
'tmp_name' => "C:\\XAMPP\\tmp\\php14A.tmp",
'error' => 0,
'size' => 1333,
),
)
- kein Verfälschen des Ajax-Responses
- Anzeige der Zeilennummer der Ausgabe
- Zeitstempel
- einfache Datenübernahme für isolierte Tests
Neben dem hier geschilderten Fall kann die Ausgabe von Debug-Informationen in eine HTML-Datei noch ganz nützlich sein
für Skripte die per Cron gestartet werden oder Skripte die Grafiken per GD-Funktionen erzeugen.
---------------------------------------------------------------------------------
- Ist der Beitrag hilfreich?
- Wird die Problematik verständlich rübergebracht ?
- Sind die Beispiele ausreichend ?
LG jspit
Kommentar