Exception mit include


InPanic

Grünschnabel
Hallo,

ich würde gerne eine Exception einbauen, wenn das einbauen einer .php Datei mit include Fehlschlägt.

Folgendes ist mein Ausgangsscript:

PHP:
<?php
if (isset($_SESSION["login"]) &&
($_SESSION["login"] == "true")) {
@include ("datei1.php");
} else {
@include ("datei2.php");
}
?>
Wenn eine der beiden php Dateien nicht eingebunden werden kann, soll eine benutzerdefinierte Fehlermeldung kommen.

Folgendes habe ich bisher versucht:
PHP:
<?php
    class MeineAusnahme extends Exception {}

$file = 'datei1.php';
$file1 = 'datei2.php';
    
if (isset($_SESSION["login"]) &&
($_SESSION["login"] == "true")) {
    
        try {
    
    if(!file_exists($file)){
     throw new MeineAusnahme ();
    } else if (file_exists($file)){
        
        @include('datei1.php');
        
    } else if (!file_exists($file2)){
     throw new MeineAusnahme ();
        
    } else {
        
         @include('datei2.php');
        
    }
}  catch(MeineAusnahme $e) {
    
    die("Fehlermeldung");
}   
}   
?>
Ich glaube, ich habe mich etwas verzettelt. Vor allem bin ich nicht sicher, wie ich prüfe, ob include Fehlgeschlagen ist. Aber auch
die grundlegende Syntax stelle ich in Frage.

Ich würde mich um etwas konstruktive Hilfe sehr freuen. Wenn mehr Informationen gebraucht werden, oder etwas unklar ist, bitte nochmals nachfragen :)
 

Yaslaw

n/a
Moderator
Warum ein @ vor dem include? Du willst den Rückgabewert
Nunja, das ganze file_exists kannst du dir sparen. lies mal die Doku zu include() durch: PHP: include - Manual

Du kannst einfach den Rückgabewert prüfen
Umgang mit Rückgabewerten: include gibt im Fehlerfall FALSE zurück und und generiert eine Warnung. Erfolgreiches Einbinden, außer überschrieben durch die eingebundene Datei, gibt 1 zurück. ....


Weil include eine spezielles Sprachkonstrukt ist, sind die Klammern um das Argument optional. Beim Vergleichen des Rückgabewerts muss allerdings aufgepasst werden (siehe Beispiel).

Beispiel #4 Vergleichen des Rückgabewerts von include

PHP:
<?php
// funktioniert nicht, wird als include(('vars.php') == TRUE) behandelt
// also als include('')
if (include('vars.php') == TRUE) {
echo 'OK';
}

// Funktioniert
if ((include 'vars.php') == TRUE) {
echo 'OK';
}
?>
In deinem Fall etwa
PHP:
if ((include file1) != TRUE) {
    if ((include file2) != TRUE) throw new MeineAusnahme ();
}