2012-10-18 8 views
5

Hier ist der Code, den ich für mehrere Stunden zu kämpfen haben:PHP benötigen nicht ohne Fehler

if ((require $_SESSION['ROOT_PATH'] . '/templates/core/menu_js.php') == 'OK') { 
    echo 'OK'; 
} else { 
    echo 'KO'; 
} 

Wenn ich die PHP-Dokumentation auf der „require“ Richtlinie richtig die „KO“ sollte nie geschrieben werden verstehen, Denn wenn die Anforderung nicht funktioniert, wird ein Fehler ausgelöst.

error_reporting(E_ERROR | E_WARNING | E_PARSE | E_COMPILE_ERROR); 

Beachten Sie, dass das gleiche benötigen (oder ist) funktioniert perfekt in anderen Seiten der Website:

In meinem Fall die „KO“ wird immer noch mit Fehler tunning angezeigt.

EDIT

Die if-Struktur nach dem Ansehen der Dokumentation hinzugefügt wurde. Anfangs habe ich nur eine einzige Zeile hatte:

require $_SESSION['ROOT_PATH'] . '/templates/core/menu_js.php'; 

Wie ich, dass diese Linie überprüft nicht funktionierte, habe ich die if.

Übrigens. Erforderliche Seite (wenn es funktioniert) fügt der aufrufenden Seite ein script Tag hinzu, das ich nie auf dieser eindeutigen Seite sehe. Auf jeder anderen Seite, auf der dies erforderlich ist, wird das Skript bei der Ausgabe angezeigt.

Also meine Frage sollte sein ", wenn die Ausgabe der erforderlichen PHP-Datei nicht angezeigt wird, warum wird kein Fehler ausgelöst?"

+1

Hat menu_js.php tatsächlich eine Aussage, die sagt: zurück 'OK'? Wenn nicht, wird immer 'KO' gesagt. Siehe auch: http://nl1.php.net/manual/en/function.include.php – Friek

Antwort

4

Nach the documentation

Erfolgreiche enthält, es sei denn durch die enthaltene Datei überschrieben, 1 zurückkehren ... Außerdem ist es möglich, Werte von den darin enthaltenen Dateien zurückzukehren. Sie können den Wert des Include-Aufrufs wie für eine normale Funktion verwenden.

Ihre Datei gibt also nicht 'OK' zurück. Es gibt entweder 1 (für Erfolg) oder einen benutzerdefinierten Wert zurück.

require ist ein Sprachkonstrukt, keine Standardfunktion. Wenn Sie require verwenden, geben Sie bereits an, dass der Code fehlschlagen sollte, wenn die Datei nicht gefunden wird. Höchstwahrscheinlich müssen Sie den Rückgabewert nicht überprüfen.

+0

Sie haben Recht. Deshalb kann ich nicht verstehen, warum das "KO" angezeigt wird. – Targol

+0

Bitte lesen Sie meine Änderungen. Ich hatte deine Eltern nicht berücksichtigt. –

1

Sie können nicht require verwenden in if

verwenden

if(file_exists($_SESSION['ROOT_PATH'] . '/templates/core/menu_js.php')) 
{ 
echo 'OK'; 
} else { 
    echo 'KO'; 
} 
+0

Danke für die Antwort, aber, wie ich in der Frage sagte, funktioniert die GENAU gleiche Zeile (zB die "require") in vielen anderen Seiten meiner Website, so weiß ich sicher, dass die Datei existiert. – Targol

+0

@jhonraymos: Aus dem PHP-Include-Handbuch: Erfolgreiche Includes, sofern sie nicht von der enthaltenen Datei überschrieben werden, return 1. Es ist möglich, eine return-Anweisung innerhalb einer Include-Datei auszuführen, um die Verarbeitung in dieser Datei zu beenden und zum aufgerufenen Skript zurückzukehren es. – Friek

+1

Ihr erster Satz ist meine Antwort: Sie können nicht erfordern in if Aber wo ist es in der Dokumentation geschrieben? – Targol

1

Zwar trifft es zu, dass die benötigt wird nicht Rückkehr alles, was die bedingte immer Rückkehr ‚KO‘, da die linke Hand Der Wert in der Klammer ist niemals gleich "OK". Sie können überprüfen, ob die Datei fehlerhaft ist, indem Sie den Wert display_errors ini in diesem Skript vorübergehend auf Ein setzen.

Da Sie Ihre Fehlerberichterstattung eingestellt haben, um dies zu erfassen, ist Ihre display_errors wahrscheinlich deaktiviert und zeigt Ihnen dies daher nicht an.Legen Sie es für dieses Skript wie folgt aus:

ini_set('display_errors', 'on'); 
+0

Ich versuchte das mit keinem Erfolg. – Targol

3

Dies funktioniert nur, wie erwartet, wenn menu_js.phpreturn 'OK'; enthält. Ansonsten funktioniert die require einwandfrei, aber der zurückgegebene Wert ist nicht "OK", weshalb Ihre "KO" -Bedingung ausgelöst wird. require gibt 'OK' nicht zurück. Wenn das nicht funktioniert, wird das Programm sofort angehalten, Ihr false Zustand wird nie so getroffen, wie Sie denken.

2

Es gibt einige Fehler hier:

  1. Nach der PHP-Dokumentation:

    require ist identisch mit include außer bei einem Ausfall wird es auch einen fatalen E_COMPILE_ERROR Level-Fehler erzeugen.

    Ein schwerwiegender Fehler stoppt die Ausführung des Skripts.

  2. require kehrt, was die enthaltene Datei Rückgabe:

    // a.php 
    return 'test'; 
    
    // b.php 
    $result = require 'a.php'; 
    echo $result; // will display 'test' 
    

also nicht testen den Rückgabewert von require! Verwenden Sie is_file(), dann, wenn true, fordern Sie diese Datei!