PHP
Referenzliste
php_check_syntax
Sonstige-Funktionen
Befehl:
bool php_check_syntax ( string $filename [, string &$error_message ] )
Parameter-Liste:
Beschreibung | |
---|---|
Der Name der Datei, die überprüft werden soll. | |
Wenn der error_message Parameter genutzt wird, enthält dieser die Fehlernachrichten, die durch den Syntax Check erzeugt wurden. error_message wird von der reference übergeben. |
Rückgabewerte:
Gibt
TRUE
zurück, wenn die Datei die Überprüfung bestanden hat, und FALSE
wenn Fehler aufgetreten sind, oder wenn filename
nicht geöffnet werden konnte. Beschreibung:
Überprüft die Syntax (lint) der angegebenen Datei, filename
Das bewirkt dasselbe wie php -l aus der Kommandozeile mit dem Unterschied, dass diese Funktion die Datei filename ausführt aber den überprüften Dateinamen filename nicht ausgibt.
Zum Beispiel: Wenn eine Funktion in filename definiert ist, wird diese Funktion in der Datei, die php_check_syntax() ausgeführt hat, verfügbar sein, aber die Ausgabe der Datei filename würde nicht ausgegeben werden.
Das bewirkt dasselbe wie php -l aus der Kommandozeile mit dem Unterschied, dass diese Funktion die Datei filename ausführt aber den überprüften Dateinamen filename nicht ausgibt.
Zum Beispiel: Wenn eine Funktion in filename definiert ist, wird diese Funktion in der Datei, die php_check_syntax() ausgeführt hat, verfügbar sein, aber die Ausgabe der Datei filename würde nicht ausgegeben werden.
Aktiv in Version:
(PHP 5 <= 5.0.4, PHP 7)
Siehe auch:
php_check_syntax() - Beispiel:
Eingabe:
<?php function php_syntax_error($code) { $braces = 0; $inString = 0; // Zunächst einmal müssen wir wissen, ob Klammern richtig // ausgewogen. Dies ist nicht trivial durch variable // Interpolation, die in heredoc, backticked und doppelt // Anführungszeichen auftritt. foreach (token_get_all('<?php ' . $code) as $token) { if (is_array($token)) { switch ($token[0]) { case T_CURLY_OPEN: case T_DOLLAR_OPEN_CURLY_BRACES: case T_START_HEREDOC: ++$inString; break; case T_END_HEREDOC: --$inString; break; } } else if ($inString & 1) { switch ($token) { case '`': case '"': --$inString; break; } } else { switch ($token) { case '`': case '"': ++$inString; break; case '{': ++$braces; break; case '}': if ($inString) --$inString; else { --$braces; if ($braces < 0) break 2; } break; } } } // Anzeige parse Fehlermeldungen und Nutzung Ausgabepufferung, sie zu fangen $inString = @ini_set('log_errors', false); $token = @ini_set('display_errors', true); ob_start(); // Wenn $braces nicht Null ist, dann sind wir sicher, dass $code gebrochen ist. // Wir lassen es trotzdem, um die Fehlermeldung und die Zeilennummer zu fangen. // Else, wenn $braces richtig ausgewogen, dann können wir sicher stellen $code // in einem toten Code-Sandbox, auf seine Hinrichtung zu verhindern. // Beachten Sie, dass ohne diese Sandkasten, eine Funktion oder Klasse // Deklaration in $code werfen konnte eine "Kann nicht deklarieren" fatal error. $braces || $code = "if(0){{$code}\n}"; if (false === eval($code)) { if ($braces) $braces = PHP_INT_MAX; else { // Holen Sie sich die maximale Anzahl der Zeilen in $code einen Grenzfall beheben false !== strpos($code, "\r") && $code = strtr(str_replace("\r\n", "\n", $code), "\r", "\n"); $braces = substr_count($code, "\n"); } $code = ob_get_clean(); $code = strip_tags($code); // Holen Sie sich die Fehlermeldung und die Zeilennummer if (preg_match("'syntax error, (.+) in .+ on line (\d+)$'s", $code, $code)) { $code[2] = (int) $code[2]; $code = $code[2] <= $braces ? array($code[1], $code[2]) : array('unexpected $end' . substr($code[1], 14), $braces); } else $code = array('syntax error', 0); } else { ob_end_clean(); $code = false; } @ini_set('display_errors', $token); @ini_set('log_errors', $inString); return $code; } ?>
Beschreibung:
Beschreibung | |
---|---|
5.0.5 | Diese Funktion wurde aus PHP entfernt. |
5.0.3 | Aufrufen der exit() Funktion nachdem php_check_syntax() in einem Speicherzugriffsfehler endete. |
5.0.1 | error_message wird von "by reference" übergeben. |
Sonstige-Funktionen