kostenloser Webspace werbefrei: lima-city


file_exists

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    seth93

    seth93 hat kostenlosen Webspace.

    Hi,
    ich möchte gern ein Verzeichnis auf die Datei test.php prüfen lassen.
    Jedoch soll der Dateiname immer als Variable gespeichert sein.
    Also z.B.
    <?
    $datei = "test.php";
    if(file_exists('ordner/$datei')){
    echo "Ok";
    }
    ?>

    Der gezeigte Code ist aber in einem Verzeichnis höher und ordner ist ein Ordner in dem momentanen Verzeichnis.
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Wann lernen Menschen endlich, ordentlich mit Strings umzugehen?

    Entweder du schreibst es in Doppelte Anführungszeichen, oder so:

    <?
    $datei = "test.php";
    if(file_exists('ordner/' . $datei)) {
      echo "Ok";
    }
    ?>
  4. Autor dieses Themas

    seth93

    seth93 hat kostenlosen Webspace.

    Ich hab das so überall gemacht, bist auf bei file_exists.
    Ich wollt nämlich die Dateien includieren und erstmal überprüfen lassen, ob die Datei überhaupt existieren.
  5. fvagsk schrieb:
    Oder so:
    <?
    $datei = "test.php";
    if(file_exists('ordner/' . "$datei")) {
      echo "Ok";
    }
    ?>



    Das wird Dir zu 100% einen Fehler raus geben... da Variabeln nicht in Anführungszeichen geschrieben werden, bzw. in Anführungszeichen nicht als solche erkannt werden.

    Der Code würde korrekt lauten:
    $var = 'datei.php';
    if(file_exists('ordner/'.$var)) {
        include('ordner/'.$var);
    } else {
        echo 'Fehler: '.$var.' konnte nicht gefunden werden.';
    }


    Und ganz nebenbei ist der Thread schon nen paar Tage alt, immer diese Leichenschänder :P

    Beitrag zuletzt geändert: 23.4.2009 21:02:37 von strange
  6. Ganz nebenbei:
    Variablen kann man in Anfürhungszeichen schreiben, solang es doppelte sind und der Apache so eingestellt ist, dass er es parsen soll.

    Das funktioniert dann aber auch wieder nur in den doppelten Anführungszeichen. In den einfachen wird nie geparsed.
    Der Kompatibilität halber sollte man also die Schreibweise mit dem Punkt bevorzugen und Variablen generell einzeln stehen lassen. ^^

    Beitrag zuletzt geändert: 23.4.2009 21:28:56 von adrians
  7. Und generelle sollte man keine Variablen Pfadnamen includieren... :)
    Vor allem keine variablen die komplett vom User abhängig sind und nicht explizit überprüft werden.
    Z.B. macht`s Bums für $datei = 'index.php'; ;)
  8. e********l

    Er könnte es auch in der Array Notation schreiben:

    $tmp = "Max Mustermann";
    echo 'Willkommen, Herr {$tmp}'.PHP_EOL;
  9. Um alle Sicherheitsbedenken zu erfüllen, sollte der Code so umgeschrieben werden:
    <?php
    $var = 'datei2.php';
    
    switch(strtolower($var)) {
        case 'datei1.php':   file_exists('ordner/datei1.php') ? include('ordner/datei1.php') : null; break;
        case 'datei2.php':   file_exists('ordner/datei2.php') ? include('ordner/datei2.php') : null; break;
        case 'datei3.php':   file_exists('ordner/datei3.php') ? include('ordner/datei3.php') : null; break;
        default:
            include "ordner/main.php"; // oder Fehlermeldung falls immer ein include stattfinden muß
    }
    ?>


    Grüßle

    Beitrag zuletzt geändert: 28.4.2009 17:10:16 von scout
  10. e********l

    Die Switch Anweisung ist überflüssig. Eine vorgelagerte IF Anweisung die überprüft ob die Datei existiert reicht aus.
    Wenn man will, kann man auch eine Fehlermeldung erzeugen. So wie in diesem Live Beispiel.

    // PAGE CONTROLLER LOGIC
    $pageControllerClass = ucfirst(WDF_LOCATION).'Page';
    if (file_exists('includes/bin/PageController/'.$pageControllerClass.'.php')) {
    	include 'bin/PageController/'.$pageControllerClass.'.php';
    	// class exists?
    	if (!class_exists($pageControllerClass,false)) {
    		$pageControllerClass = 'ErrorPage';
    	}
    } else {
    	$pageControllerClass = 'ErrorPage';
    }
  11. evil-devil schrieb:
    Die Switch Anweisung ist überflüssig. Eine vorgelagerte IF Anweisung die überprüft ob die Datei existiert reicht aus.
    Wenn man will, kann man auch eine Fehlermeldung erzeugen. So wie in diesem Live Beispiel.

    // PAGE CONTROLLER LOGIC
    $pageControllerClass = ucfirst(WDF_LOCATION).'Page';
    if (file_exists('includes/bin/PageController/'.$pageControllerClass.'.php')) {
    	include 'bin/PageController/'.$pageControllerClass.'.php';
    	// class exists?
    	if (!class_exists($pageControllerClass,false)) {
    		$pageControllerClass = 'ErrorPage';
    	}
    } else {
    	$pageControllerClass = 'ErrorPage';
    }


    Na, das ist aber nicht gerade allgemein sicher.
    Da wäre ich sehr vorsichtig, gerade, wenn man nicht weiß, wo genau das Script überall laufen wird.
    Das die Datei existiert bedeutet nie, dass man sich auch includen darf/sollte!
    In diesem Fall besteht zwar ein kleiner Schutz durch den speziellen Dateinamen, trotzdem sollte man bei einer allgemeinen Lösung dein Script nicht nutzen, da der eigentliche Nutzer deines Scriptes nicht unbedingt im Hinterkopf hat, worauf er bei der Dateibenennung zu achten hat.

    Ich hatte mal ein kurzes Tutorial dazu geschrieben - vor Jahren. :D
    http://www.lima-city.de/tutorials/page-start-sicheres-includen-mit-switch
    Ganz unten steht ein recht einfaches Script, welches leicht anzupassen sein sollte.
  12. e********l

    Der Dateiname ist halbidentisch mit dem Klassennamen. Wenn die aufzurufende Datei "HalloWelt.php" ist, dann lautet die entsprechende Class/Datei dazu HalloweltPage.php. Wo diese Daten letzten Endes liegt ist vollkommen egal, da der Include Pfad in der Konfiguration festgelegt wird und sich somit auch außerhalb des Webverzeichnisses befinden kann.

    //edit: Unabhängig davon ist der Sciptausschnitt auch nicht für den normalen User geeignet sondern richtet sich an den jeweiligen Framework Programmierer.

    Beitrag zuletzt geändert: 29.4.2009 18:24:12 von evil-devil
  13. evil-devil schrieb:
    Der Dateiname ist halbidentisch mit dem Klassennamen. Wenn die aufzurufende Datei "HalloWelt.php" ist, dann lautet die entsprechende Class/Datei dazu HalloweltPage.php. Wo diese Daten letzten Endes liegt ist vollkommen egal, da der Include Pfad in der Konfiguration festgelegt wird und sich somit auch außerhalb des Webverzeichnisses befinden kann.

    //edit: Unabhängig davon ist der Sciptausschnitt auch nicht für den normalen User geeignet sondern richtet sich an den jeweiligen Framework Programmierer.

    Deshalb ist dein Script auch nicht schlecht etc., bloß für die Adressatengruppe hier nicht unbedingt geeignet. ;-)
    Diejenigen die du damit ansprichst, haben vermutlich genug Hintergrundwissen und würden solch eine Frage nicht stellen.

    VG Lucas
  14. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!