Entwickler-Ecke

Programmiersprachen (Server) - PHP Bildergalerie


Dude566 - Sa 14.08.10 17:25
Titel: PHP Bildergalerie
Hallo,

ich versuche mir momentan eine kleine Bildergalerie für meine Seite in PHP zu basteln.
Ich habe allerdings ein Problem, die Bilder werden nicht angezeigt.


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
<html>
<head>
  <title>Bilderübersicht</title>
  <link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body>
  <div id="alles">
    <?php

      $handle = opendir("images");  /* Bilderverzeichnis */
   
      while($file = readdir($handle)) /* liest Dateinamen aus */
      {
        echo '<img src=\"images/'.$file.'" />'.'<br>';
        echo $file;
      }
   
      closedir($handle);       

    ?>
  </div>
</body>
</html>


Die Dateinamen werden korrekt ausgegeben, jedoch die Anzeige der Bilder ist fehlerhaft.

Der Ordner "images" und die "index.php" liegen im gleichen Verzeichnis.

Hoffe ihr könnt mir weiterhelfen, ich bin nur mit ein paar Grundlagen von PHP vertraut.

Gruß Dude566


Moderiert von user profile iconChristian S.: Topic aus Algorithmen, Optimierung und Assembler verschoben am So 15.08.2010 um 10:39
Moderiert von user profile iconChristian S.: Topic aus Delphi4PHP-Technologien verschoben am So 15.07.2012 um 13:16


ALF - Sa 14.08.10 18:47

Warum packst du file und verzeichnis nicht in einer Variable, sparst dir zusätzlich das esc

Delphi-Quelltext
1:
2:
$ver_File= $hanlde.'/'.$file;
echo '<img src="'.$ver_File.'"><br>';
nur so als Vorschlag. Obwohl escpen ja das richtige ist, aber manchmal sehr unübersichtlich wird :eyecrazy:

Gruss Alf


Dude566 - Sa 14.08.10 19:51

Dann sieht das ganze so aus:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
<?php

      $handle = opendir("images");
   
      while($file = readdir($handle))
      {
        $full_path = $handle.'/'.$file;
        echo '<img src="'.$full_path.'" /><br>';
        echo $file;
      }
   
      closedir($handle);       

    ?>


trotzdem werden die Bilder nicht angezeigt.


LexXis - Sa 14.08.10 20:24

Ist $handle auch wirklich ein Handle zugewiesen worden? Das hier [http://php.net/manual/de/function.readdir.php] hast du dir bestimmt schon angeschaut. Speziell das 1. Beispiel und dessen Erläuterung dazu, in der es um genau diese Überprüfung geht.


Dude566 - Sa 14.08.10 20:36

user profile iconDude566 hat folgendes geschrieben Zum zitierten Posting springen:

Die Dateinamen werden korrekt ausgegeben, jedoch die Anzeige der Bilder ist fehlerhaft.


Beantwortet das deine Frage? ;)


ALF - Sa 14.08.10 21:17

Schau mal in appache log was da für fehler drin steht! oder las dir evtl die Fehler auf der Seite mit angeben!

Gruss Alf


Dude566 - Sa 14.08.10 21:30

Ok und wie mache ich das? Hab's im Xampp laufen.


ALF - Sa 14.08.10 21:33

Schau mal unter xampp/apache/logs/
oder gib mal in der include.php
error_reporting(E_ALL) frei oder schreib es rein
Gruss Alf


Dude566 - Sa 14.08.10 21:58

Ja mache ich morgen und erstatte dann Bericht, bin noch unterwegs.


jaenicke - Sa 14.08.10 22:18

user profile iconDude566 hat folgendes geschrieben Zum zitierten Posting springen:
Die Dateinamen werden korrekt ausgegeben, jedoch die Anzeige der Bilder ist fehlerhaft.
Wie meinst du fehlerhaft? "Bild nicht gefunden" im Browser?

Wenn ja, welchen Code bekommst du als Fehler im Browser angezeigt und was sagt der Ladestatus des Bildes, wenn der Dateipfad usw. dort richtig steht?


Dude566 - Sa 14.08.10 22:54

Ich kann dir die Fehlermeldung gerade nicht sagen aber es wird das Symbol angezeigt wenn ein Bild nicht geladen werden kann. Schaue morgen nochmal nach und gebe dann weitere Details bekannt.


ALF - So 15.08.10 10:37

Zum Test kannst auch erst mal eine direkte Angabe machen!

Delphi-Quelltext
1:
echo ('<img src="images/meinbild.jpg" heigth="100" width="100"><br>');                    

Gruss Alf


Teekeks - So 15.08.10 18:09

Mal ganz dämliche Frage:
Hast du überhaupt Leserechte auf diese Bilder (also, hat dein Apatche diese)?


Dude566 - So 15.08.10 18:38

user profile iconALF hat folgendes geschrieben Zum zitierten Posting springen:
Zum Test kannst auch erst mal eine direkte Angabe machen!

Delphi-Quelltext
1:
echo ('<img src="images/meinbild.jpg" heigth="100" width="100"><br>');                    

Gruss Alf


Ja so funktioniert die Anzeige eines Bildes.

Die Links der fehlerhaften Bilder sehen so aus: http://localhost/galerie/Resource%20id%20#3/bild02.jpg
Was soll dieses "Resource", dieser Pfad existiert ja nicht.


Christian S. - So 15.08.10 18:42

Das "Resource" dürfte daher kommen, dass es Quatsch ist, $handle mit in den Dateipfad zu verwursten. Das steht ja kein Pfad drin!


Dude566 - So 15.08.10 18:52

Das hatte ich auch gedacht, da aber keiner über meinen Code gemeckert hatte ging ich davon aus es sei richtig. :lol: :oops:
Naja jetzt funktioniert es:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
<?php

    $handle = opendir("images");
   
    while($file = readdir($handle))
    {
      $full_path = 'images/'.$file;
      echo '<img src="'.$full_path.' "/><br></a>';
      echo $file;
    }
   
    closedir($handle);       

    ?>


ALF - So 15.08.10 22:19

Jo, wenn ich die Fehlermeldung sehe, sehe ich auch was er, ich übersehen haben. Sorry
Gruss Alf


Dude566 - Mo 16.08.10 00:08

Es gab ja eben keine Fehlermeldung. :D


ALF - Mo 16.08.10 05:23

Doch, wenn was nicht funct, schau ich immer in die logs rein oder schalte error_reporting(E_ALL) an, hilft ungemein :wink: bzw. beim richtigen lesen hätte ich :mrgreen: es ja auch sehen müssen.

Gruss Alf


Dude566 - Do 02.09.10 19:20

Also ich habe jetzt mal an dieser Sache weitergearbeitet und stoße auf ein Problem. :P

Ich möchte meinen Bekannten ermöglichen Bilder via FTP hochzuladen, ich möchte jedoch nicht das sie die Möglichkeit haben an meiner index.php mit dem Script für die Bildergallerie rumzufummeln.

Momentan sieht die Ordnerhierarchie so aus:

oberverzeichnis/index.php
oberverzeichnis/style.css
oberverzeichnis/images/"hier dann die einzelnen Ordner auf die andere Rechte haben

Nun sieht es aber so aus das ich für die Bilder natürlich eine Voransicht haben möchte, dafür habe ich schon ein Tool in Delphi gebastelt welches die Bilder passend verkleinert.

Aber wenn ich die kleinen und die großen Bilder in eine und die selben Verzeichnisse lege bringt es natürlich nichts denn dann werden beide in meiner Gallerie angezeigt (große Bilder dann fehlerhaft).

Deshalb dachte ich mir, machste noch eine Verzeichnis in den die anderen ihre Bilder im kleinen Format dann ebenfalls hochladen müssen.

oberverzeichnis/originale/images (hier liegen die großen Bilder
oberverzeichnis/images (hier liegen die kleinen Bilder für die Vorschau in der Gallerie)

Jetzt weis ich aber nicht wie ich es in meinem Script machen soll, dass es weis wo es die kleinen sind und dann das dazu passende große Bild als Link daruntersetzt.

Mein bisheriges Script (Ausschnitt):

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
<?php

  $ordner = $_GET['ordner'];
  
  if (!$ordner) 
  {
    $ordner = 'images';
  }
  
?>

<div id="header">
      <h1><?php echo $ordner; ?></h1>
    </div>
    
    <?php
      $handle = opendir($ordner);
      
      while($file = readdir($handle))
      {
        $full_path = $ordner.'/'.$file;
        echo '<div class="eintrag">';
        echo '<h2>'.$file.'</h2>';
        echo '<a href="originale/'.$full_path.'"><img src="'.$full_path.' "/></a>';
        @$datentyp = getimagesize($full_path);
        if (!$datentyp)
        {
          echo '<a href="index.php?ordner='.$full_path.' ">In Ordner wechseln</a>';
        }
        else
        {
          echo '<a href="originale/'.$full_path.'">Zur Einzelansicht</a>';
        }
        echo '</div>';
      }
      
      closedir($handle);
    ?>


Hoffe ihr könnt mir helfen.


ALF - Do 02.09.10 20:54

hi, hast Du das nicht schon so stehen? der link zeigt zu den original Grössen und das Bild selbst für die Vorschau kommt aus den anderen Ordner?
Ansonsten als Beispiel.
Vorrausgesetzt beide haben den gleichen Namen.

Quelltext
1:
echo '<a href="Anzeige.php?original='.$file.'"><img src="kleinbild/'.$file.' "/></a><br                    

Wechseln in einen anderen Ordner brauchst du da nicht. Für die Übergabe machst Du dir ne "Anzeige.php und startest ne neue Seite. Hat den Vorteil, Deine Seite bleibt im Hintergrund offen. Auf der Extra, kann man sich nun entscheiden das Bild zu Saugen oder das Fenster zu schliessen.
So auf die Schnelle.

Gruss Alf
Leider schon eeewig nix mehr mit PHP gemacht


Dude566 - Fr 03.09.10 18:00

So ich habe jetzt mal etwas anders Probiert und die Bilder direkt mit imagecopyresampled als Thumbnail erzeugen wollen.
Die Anleitung dazu habe ich hier her:
http://forum.de.selfhtml.org/archiv/2005/4/t104845/#m646950

Leider funktioniert es nicht und es werden wie wild komische Zeichen auf die ganze Seite geschrieben. :lol:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
<?php
      $handle = opendir($ordner);
      
      while($file = readdir($handle))
      {
        $full_path = $ordner.'/'.$file;
        @$sourcefile = imagecreatefromjpeg($full_path);
        $height = imagesy($sourcefile); 
        $width = imagesx($sourcefile);
        $destinationfile = imagecreatetruecolor(250, 250);
        imagecopyresized($destinationfile, $sourcefile, 0, 0, 0, 0, $width, $height, 250, 250);
        imagejpeg($destinationfile, "", 70);
        echo '<div class="eintrag">';
        echo '<h2>'.$file.'</h2>';
        echo '<a href="'.$full_path.'"><img src="index.php" alt="kleine Vorschau"/></a>';
        @$datentyp = getimagesize($full_path);
        if (!$datentyp)
        {
          echo '<a href="index.php?ordner='.$full_path.' ">In Ordner wechseln</a>';
        }
        else
        {
          echo '<a href="'.$full_path.'">Zur Einzelansicht</a>';
        }
        echo '</div>';
      }
      
      closedir($handle);
    ?>


Natürlich fehlt hier die Berechnung der passenden Größe für das Vorschaubild, deshalb der Wert 250 für Width und Height zum testen.

Hoffe ihr könnt mir sagen was ich korrigieren muss, dass es funktioniert.


ALF - Fr 03.09.10 18:14

Was soll den das mit der index.php

Quelltext
1:
"><img src="index.php"                    

Du musst dafür ne ander Scriptdatei nehmen, wo Du den code für das Umwandeln machst und diese dann zur Anzeige bringen!

Gruss Alf


Dude566 - Fr 03.09.10 18:16

Ja aber ich will ja nicht für jedes Bild eine neuen Tab aufmachen, es soll ja eine Bilderübersicht werden, außerdem wurde im Thread geschrieben ich soll doch den Namen der php Datei als Source angeben.

Könnte es vielleicht auch mit utf8 zu tun haben, das habe ich hier gelesen http://de.php.net/manual/de/function.imagejpeg.php ?


ALF - Fr 03.09.10 18:31

user profile iconDude566 hat folgendes geschrieben Zum zitierten Posting springen:
außerdem wurde im Thread geschrieben ich soll doch den Namen der php Datei als Source angeben.

aber doch nicht die Index.php. die hat doch nix mit dem Code (umwandeln) zu tun. Dafür sollts Du auch ne andere php nehmen und die dann zur Anzeige bringen. Dabei bleibt es immer die gleiche php, nur der Inhalt(das bild) wird geändert.
Wobei ich es wahrscheinlich nicht sehr effektiv sehe, die Bilder so Umzuwandeln um sie als Vorschaubilder zu machen. Kommt aber wahrscheinlich darauf an wieviele es werden?
Gruss Alf


Dude566 - Fr 03.09.10 19:03

Naja pro Übersicht gehe ich mal von höchstens 100 Bildern aus, in der Regel wohl eher weniger.

Habe es jetzt so gemacht:
index.php

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
<?php
      $handle = opendir($ordner);
      
      while($file = readdir($handle))
      {
        $full_path = $ordner.'/'.$file;
        echo '<div class="eintrag">';
        echo '<h2>'.$file.'</h2>';
        echo '<a href="'.$full_path.'"><img src="show.php?path='.$full_path.'" alt="kleine Vorschau"/></a>';
        @$datentyp = getimagesize($full_path);
        if (!$datentyp)
        {
          echo '<a href="index.php?ordner='.$full_path.' ">In Ordner wechseln</a>';
        }
        else
        {
          echo '<a href="'.$full_path.'">Zur Einzelansicht</a>';
        }
        echo '</div>';
      }
      
      closedir($handle);
    ?>


show.php

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
<?php
  $path = $_Get['path'];
  @$sourcefile = imagecreatefromjpeg($path);
  $height = imagesy($sourcefile); 
  $width = imagesx($sourcefile);
  $destinationfile = imagecreatetruecolor(250, 250);
  imagecopyresized($destinationfile, $sourcefile, 0, 0, 0, 0, $width, $height, 250, 250);
  imagejpeg($destinationfile, "", 70);
?>


Leider wird nur der Alternativtext der Bilder ausgegeben, deutet doch daraufhin das beim Laden des Bildes etwas fehlschlägt oder?


ALF - Fr 03.09.10 22:15

Lass Dir doch mal echos ausgeben, ob die Variablen den richtigen Inhalt haben!
Oder was sagt die Log?

Noch nen kleinen Tip für was eine Index.php da ist! Sollte standart mässig in jedem Ordner drin sein und diesen Inhalt haben!(mit wenigen Ausnahmen)
index.php

Quelltext
1:
<?php header ("location: ../index.php"); exit(); ?>                    

mehr sollte da nicht drin stehen! Damit wirst Du zurückgeschickt zur startseite, falls jemand versucht
"http://www.Meineseite.de/photos/" aufzurufen z.B.
und im Stammordner steht das in der index drin

Quelltext
1:
2:
3:
<?php
require_once('include.php');
?>
mit der include.php werden dann alle Initialisierungen deiner Seite Vorgenommen
Und um sicher zu gehen kann man diese Standartbezeichnungen include.php, admin.php usw. für sich auch anders benennen. Weil, Hackangriffe zielen meistens auf diese Standartnamen zurück!
Du solltest also Deine phps nicht als index.php deklarieren.

Gruss Alf


Dude566 - Fr 03.09.10 23:55

Ja aber dann sind ja theoretisch die anderen Index.php für Hackerangriffe anfällig oder?


Dude566 - Sa 04.09.10 11:50

Also in den Logs des Apache von XAMPP kann ich keinen Fehler finden, weis aber auch nicht genau wonach ich suchen sollte.
Der Pfad in $full_path scheint auch richtig übergeben zu werden, z.B. images/test.jpg.
Trotzdem wird leider nur der Alternativtext angezeigt.


Flamefire - Sa 04.09.10 12:36

Hast du mal php.net versucht?
http://www.php.net/manual/de/function.imagejpeg.php

du musst in der show.php
a) den header setzen (sonst weiß der browser ja nicht, dass es bild ist)
b) die funktion richtig verwenden. ""<>NULL


Dude566 - Sa 04.09.10 12:54

Ich habe es jetzt so gemacht:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
<?php
  $path = $_Get['path'];
  @$sourcefile = imagecreatefromjpeg($path);
  $height = imagesy($sourcefile); 
  $width = imagesx($sourcefile);
  $destinationfile = imagecreatetruecolor(250, 250);
  imagecopyresized($destinationfile, $sourcefile, 0, 0, 0, 0, $width, $height, 250, 250);
  header('Content-type: image/jpeg');
  imagejpeg($destinationfile);
  imagedestroy($im);
?>


Trotzdem wird immer nur der Alternativtext ausgegeben.


jfheins - Sa 04.09.10 13:10

user profile iconDude566 hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe es jetzt so gemacht:
Trotzdem wird immer nur der Alternativtext ausgegeben.

Dann ruf die Seite die das Bild ausgibt mal direkt mit dem Browser auf!

das Bild ist schon ein jpeg, oder?

Ich tippe mal, dass "imagedestroy($im);" einen Fehler wirft.


Flamefire - Sa 04.09.10 14:07

und nimm mal das @ vor "$sourcefile" weg
das hat da nix zu suchen.


jaenicke - Sa 04.09.10 15:20

user profile iconFlamefire hat folgendes geschrieben Zum zitierten Posting springen:
und nimm mal das @ vor "$sourcefile" weg
das hat da nix zu suchen.
Im fertigen Skript dann schon. Denn da sollte man ggf. interne Pfade usw. nicht durch Fehlermeldungen öffentlich machen. Deshalb ist es da schon besser die Fehlermeldungen zu unterdrücken.

Für die Fehlersuche ist es aber keine so gute Idee, da man die Fehler so eben nicht angezeigt bekommt.

Und wo wir schon bei Sicherheit sind:
Per Get Variablen einfach so zu akzeptieren ohne diese zu escapen usw., ist für einen öffentlichen Server eine äußerst schlechte Idee.

Was das Problem angelangt:
Sind denn die umgewandelten Dateien dann vorhanden? Hast du einmal versucht diese manuell im Browser anzusprechen?
Und sagen dir vielleicht ein Plugin wie HttpFox oder die integrierten Tools deines Browsers mehr?


Flamefire - Sa 04.09.10 15:41

müsste das @ dann nicht vor den funktionsnamen?

nja auf jeden Fall erst mal die Seite im Browser öffnen...
irgendwie kommt von dir immer nur "geht nicht", "zeigt nix an"
aber mal selber sowas gucken, fehlermeldungen ausgeben lassen, variablendumps und was man halt so alles machen kann....nix


Dude566 - Sa 04.09.10 16:13

user profile iconFlamefire hat folgendes geschrieben Zum zitierten Posting springen:

aber mal selber sowas gucken, fehlermeldungen ausgeben lassen, variablendumps und was man halt so alles machen kann....nix


Wenn man nicht weis wie geht das ja auch so gut, und im Browser werden keine Fehlermeldungen angezeigt. :roll:

So jetzt zum Problem:
Wenn ich die show.php mit einem GET Parameter aufrufe kommt eine Seite mit Fehleausgaben:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
http://localhost/galeriev3/show.php?path=images/bild01.jpg

Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: Filename cannot be empty in C:\Dokumente und Einstellungen\Julian\Eigene Dateien\XAMPP\xampp\htdocs\galeriev3\show.php on line 3

Warning: imagesy() expects parameter 1 to be resource, boolean given in C:\Dokumente und Einstellungen\Julian\Eigene Dateien\XAMPP\xampp\htdocs\galeriev3\show.php on line 4

Warning: imagesx() expects parameter 1 to be resource, boolean given in C:\Dokumente und Einstellungen\Julian\Eigene Dateien\XAMPP\xampp\htdocs\galeriev3\show.php on line 5

Warning: imagecopyresized() expects parameter 2 to be resource, boolean given in C:\Dokumente und Einstellungen\Julian\Eigene Dateien\XAMPP\xampp\htdocs\galeriev3\show.php on line 7


Also die erste Meldung sagt ja wohl aus das überhaupt keine Filename übergeben wird, kann ja aber eigentlich nicht sein denn ich habe ja einen per Get geliefert.

Edit: Also ich habe der Variable $path einfach mal etwas fest zugewiesen, jetzt gibt er das Bild aus.

Quelltext
1:
$path = 'images/bild01.jpg';                    


Pfad wird auch richtig per GET übergeben habe es mir zum Test per echo ausgeben lassen.

Übrig bleibt jetzt noch Zeile 9 in der wohl was falsch sein soll:

Quelltext
1:
Warning: Cannot modify header information - headers already sent by (output started at C:\Dokumente und Einstellungen\Julian\Eigene Dateien\XAMPP\xampp\htdocs\galeriev3\show.php:3) in C:\Dokumente und Einstellungen\Julian\Eigene Dateien\XAMPP\xampp\htdocs\galeriev3\show.php on line 9                    


Also beim Senden der Headerdaten.

Edit2: Jetzt klappt es, habe das Senden der Headerdaten an den Anfang gesetzt, dachte das wäre unwichtig denn auf http://www.php.net/manual/de/function.imagejpeg.php kommt es auch erst später im Verlauf.

Einziges Problem ist jetzt noch das nicht das ganze Bild im Thumbnail erzeugt wird, aber das wird wohl etwas mit den Abmessungen zu tun haben. :lupe:


Flamefire - Sa 04.09.10 16:35

Siehst du...also zeigt der Browser doch Fehlermeldungen an... :roll:
Und mal ein echo oder var_dump da einzufügen ist auch nicht schwer...

mit einem echo, hättest du den 1. fehler gefunden. ($_GET nicht $_Get)

der header() aufruf kann später erfolgen. muss nur vor jeder ausgabe stehn. also vor jedem echo oder image-ausgabe
(PS: header('...image') dürfte verhindern, dass du echo ausgaben siehst. also nicht vergessen auszukommentieren, beim testen)

dann zeig mal dein aktuelles script


Dude566 - Sa 04.09.10 16:50


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
<?php
  header('Content-type: image/jpeg');
  $path = $_GET['path'];
  @$sourcefile = imagecreatefromjpeg($path);
  $height = imagesy($sourcefile); 
  $width = imagesx($sourcefile);
  $destinationfile = imagecreatetruecolor(250, 250);
  imagecopyresized($destinationfile, $sourcefile, 0, 0, 0, 0, $width, $height, 250, 250);
  imagejpeg($destinationfile);
  imagedestroy($destinatonfile);
?>


Muss jetzt noch einen Algorithmus schreiben der die Bilder im richtigen Verhältnis für die Thumbnails verkleinert, denn meine Freunde werden wohl Bilder veschiedenster Auflösungen hochladen und in der Übersicht darf die Breite nicht mehr als 300px betragen


ALF - Sa 04.09.10 21:50

hi, wenn ich mich recht entsinne hat der Header eigentlich gar nix in php zu suchen. :gruebel:
PHP ist ja eigentlich nicht für irgendwelche Anzeigen zuständig!
Dafür schreibt man sich die html Seite dazu und übergibt ihr die notwendigen Infos, die für die Anzeige zuständig sind!
Aber kann ja sein das sich dies alles in den Jahren geändert hat :nixweiss: 4-5 Jahre her bei mir.

Das mit den echos und log bzw. error_reporting(E_ALL) hatte ich Dir aber schon mal gesagt!

user profile iconDude566 hat folgendes geschrieben Zum zitierten Posting springen:
Ja aber dann sind ja theoretisch die anderen Index.php für Hackerangriffe anfällig oder?
Nein!
Ein Browser sucht standartmässig (ohne weitere Angaben) immer eine index(php/html) und zwar in allen Verzeichnissen die ich als Gast bei Dir aufrufen kann. Darum auch der Hinweis für was die index.php sind!
Angreifen kann man nur phps denen man was übergibt. Für das Escapen und überprüfen, das nur das drin ist, was Du erwartest, bist Du selbst zuständig :wink: machst Du es nicht, hast Du irgendwann ein Problem. Hat dir @jaenicke ja auch gesagt.

Gruss Alf


Flamefire - Sa 04.09.10 22:03

@alf: doch der header muss schon sein. dafür ist dier header() funktion ja da.
da man mit PHP ja auch bilder dynamisch generieren kann (z.b. captchas) muss man ja auch sagen können, dass man hier ein bild hat.
oder auch für cache-control o.ä. ist der header ja auch da.


ALF - Sa 04.09.10 22:14

Bin doch so blöd, hab ich doch selber bei den index.php drin!
Sorry
Gruss Alf


jaenicke - Sa 04.09.10 22:49

user profile iconFlamefire hat folgendes geschrieben Zum zitierten Posting springen:
müsste das @ dann nicht vor den funktionsnamen?
Das gilt AFAIK für die restliche Zeile.

Du kennst das auch aus Batchdateien nehme ich an. Da ist das genauso. Das typische @echo off am Anfang, damit man auch das nicht mehr angezeigt bekommt.


Dude566 - Mi 15.09.10 19:12

Ein Problem wäre da aber noch, es wird leider auch ".." und "." als Ordner oder Datei in der Übersicht angezeigt.
Ich möchte aber nicht das jemand sich so in das Verzeichnis hangeln kann in dem die Hauptseite und weitere Dateien liegen.

Also wollte ich dann überprüfen ob $file = ".." oder "." ist, jetzt wird aber nichts mehr angezeigt, vermutlich da in den Dateinamen ja auch Punkte zur Dateiendung gehören.

Quelltext
1:
2:
3:
if (!$file = '..') {
 /* der ganze Kram zur Anzeige */
}


Yogu - Mi 15.09.10 19:35

user profile iconDude566 hat folgendes geschrieben Zum zitierten Posting springen:
Ein Problem wäre da aber noch, es wird leider auch ".." und "." als Ordner oder Datei in der Übersicht angezeigt.
Ich möchte aber nicht das jemand sich so in das Verzeichnis hangeln kann in dem die Hauptseite und weitere Dateien liegen.

Das sind zwei verschiedene Probleme: ein optisches und ein akutes Sicherheitsrisiko. Das erste ist recht leicht zu lösen, du hast es ja fast geschafft. Um aber tatsächlich zu verhindern, dass ein Ordner aufgerufen werden kann, der oberhalb des Script-Ordner liegt, musst du die Eingaben prüfen, nicht die Ausgabe filtern. Beispielsweise könntest du Strings mit dem Inhalt '..' verbieten.

user profile iconDude566 hat folgendes geschrieben Zum zitierten Posting springen:
Also wollte ich dann überprüfen ob $file = ".." oder "." ist, jetzt wird aber nichts mehr angezeigt, vermutlich da in den Dateinamen ja auch Punkte zur Dateiendung gehören.

Quelltext
1:
2:
3:
if (!$file = '..') {
 /* der ganze Kram zur Anzeige */
}

Zwei kleine Fehler. Erstens musst du das doppelte Gleichheitszeichen (==) für Gleichheitstests verwenden (das einfache (=) bewirkt eine Zuweisung).


Quelltext
1:
if (!$file == '..') {                    

Zweitens die Reihenfolge der Operatoren beachten. Du hast deinen Code schön formatiert, denn es wird sichtbar, wie PHP den Ausdruck auswertet: Erst wird der boolsche Operator Nicht auf $file angewandt, was bewirkt, dass $file in einen Boolean verwandelt wird. Dabei kommt dann true heraus. Der nicht-Operator macht daraus ein false. Jetzt vergleichst du false mit '..' - und was kommt raus - natürlich false, denn die Gleichheit ist unwahr.

Stattdessen musst du entweder zuerst vergleichen, dann negieren (!($file == '..')) oder einfach den ungleich-Operator (!= verwenden).