Ulf: PHP findet Textdatei nicht

Hi, ich möchte eine Textdate öffnen, aber er findet die Datei nciht, allerdings kann man sie über einen Link öffnen.

<html>
<head>
<?
echo "<title>Bilder Detailansicht: $_GET[bild]</title>";
?>
<meta name="author" content="Ulf Wüstefeld">
<?
if($_SESSION[stil]=="hell")
{
echo "<link rel='stylesheet' href='$hell' type='text/css'>";
}
else
{
echo "<link rel='stylesheet' href='$dunkel' type='text/css'>";
}
?>
</head>
<body>
<?
echo "<center><a href=bilder.php?ordner=$_GET[ordner]><img src='./$_GET[ordner]/$_GET[bild]'></a><br>";
echo "<font size=-1>Klicken Sie in das Bild, um zur&uuml;ck zur Bilder&uuml;bersicht zu gelangen.</font></center><br><br>";
$test=strrev($_GET[bild]);
$test=strstr($test, '.');
$test=strrev($test);
$test = "http://www.niederrheinhalle.de/bilder/" . $_GET[ordner] . "/" . $test . "txt";
if(file_exists($test))
{
  echo "Datei $test existiert<br>";
}
{
  echo "Datei $test existiert nicht<br>";
}
echo "<a href='$test'>$test</a><br>";
$test = fopen($test,"r");
while (!feof($test))
{
  $buffer = fgets($test, 4096);
  echo "$buffer";
}
fclose ($test);
?>
</body>
</html>

  1. dir ist schon bewusst das bei $_GET[ordner] die '' fehlen?? also es eigentlich $_GET['ordner'] heißen müsste??

    1. Hi,

      dir ist schon bewusst das bei $_GET[ordner] die '' fehlen?? also es eigentlich $_GET['ordner'] heißen müsste??

      übrigens auch bei $_GET[bild]. Man kann auch die doppelten Anführungszeichen nehmen.

      MfG Hopsel

      --
      "It's amazing I won. I was running against peace, prosperity, and incumbency."
      George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
  2. Moin Ulf,

    $test = "http://www.niederrheinhalle.de/bilder/" . $_GET[ordner] . "/" . $test . "txt";
    if(file_exists($test))

    lies mal hier nach http://www.php.net/manual/de/function.file-exists.php

    Dort ist unter anderm zu lesen:

    Anmerkung: Diese Funktion kann nicht mit entfernten Dateien arbeiten, da der Zugriff auf die Datei, die bearbeitet werden soll, über das Dateisystem des Servers möglich sein muss.

    regds
    Mike©

    --
    Freunde kommen und gehen. Feinde sammeln sich an.
    1. Habe den Pfad soweit angepasst, dass er nicht über die externe Adresse geht, sondern lokal
      $test = "./" . $_GET['ordner'] . "/" . $test . "txt";

      1. Moin Ulf,

        »» Habe den Pfad soweit angepasst, dass er nicht über die externe Adresse geht, sondern lokal

        $test = "./" . $_GET['ordner'] . "/" . $test . "txt";

        Und? Geht oder geht net?

        Was willst du jetzt eigentlich wissen?

        regds
        Mike©

        --
        Freunde kommen und gehen. Feinde sammeln sich an.
        1. geht latürnich net.

          Irgendwie habe ich heute das Glück gepachtet

          1. Moin Ulf,

            »» geht latürnich net.

            hast Du dir mal den Inhalt von $test anzeigen lassen?

            echo $test;

            regds
            Mike©

            --
            Freunde kommen und gehen. Feinde sammeln sich an.
            1. Ja, habe ich.

              Hier kommst du auf die Seite:

              http://www.niederrheinhalle.de/bilder/bilder_detail.php?bild=Grosser%20Saal.JPG&ordner=test

              1. Moin Ulf,

                http://www.niederrheinhalle.de/bilder/bilder_detail.php?bild=Grosser%20Saal.JPG&ordner=test

                mit einem Schnellschuß vermute ich mal das das Leerzeichen (%20) die Ursache sein könnte. Ich empfehle alle Dateinamen immer klein zu schreiben, kein Leerzeichen sondern Unterstrich.

                Windoof handelt das tolerant, andere Systeme nicht.

                regds
                Mike©

                --
                Freunde kommen und gehen. Feinde sammeln sich an.
                1. Hello,

                  Windoof handelt das tolerant, andere Systeme nicht.

                  was z.B. bei FTP-Downloads von einem fremden Server (also einem, den man nicht selber eingerichtet hat) schon gefährlich werden kann. Wenn da nämlich Dateien in Groß-/Kleinschreibung dabei sind, die die gleichen Namen haben (aber eben an anderen Stellen die Versalien und Gemeinen), dann sind die nachher eben einfach nicht mehr da.

                  Harzliche Grüße aus http://www.annerschbarrich.de

                  Tom

                  --
                  Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                  Nur selber lernen macht schlau
                2. VOLLTREFFER!

                  DANKE!!!

  3. Hello Ulf,

    da das, was Du da machst, sowieso Genickschuss-Code ist (Injection, Dateisystem ist gefährdet), solltest Du nochmal von vorne anfangen. Ich hatte da diese Woche erst auf einen Thread geantwortet, der die Sicherheit von PHP-Code betraf. Da war genau Dein Beispiel beschrieben.

    So macht man[tm] das nicht, wenn keine Sicherheitslöcher entstehen sollen. ;-))

    Du solltest niemals den Direktzugriff auf ein Dateisystem zulassen, was Du aber machst, wenn Du einen externen Parameter in den Pfad übernimmst.

    Die bessere Vorgehensweise wäre es, wenn Du einen Translation-Table dazwischen schaltest. Den kannst Du dann auch mittels eines Scriptes füllen, das aber nicht von außen zur Verfügung stehen muss/sollte.

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau