Du bist hier: Tips » Scripte » PHP
PHP
Referenzliste

php_check_syntax

Sonstige-Funktionen

    Befehl:
bool php_check_syntax ( string $filename [, string &$error_message ] )


    Parameter-Liste:
NameBeschreibung
filenameDer Name der Datei, die überprüft werden soll.
error_messageWenn 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.


    Aktiv in Version:
(PHP 5 <= 5.0.4, PHP 7)

    Siehe auch:
•  include
include
 
Prüft, ob eine Datei existiert und lesbar ist
 

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:
Version 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