![]() |
PHP: Script geht .... inzwischen
Das funktionierende ist unten(in meinem letzten post) angehängt und kann gerne verwendet werden.
habe ein php-skript geschreiben, das mir alle bilder eines verzeichnisses in einer tabelle anzeigt. es geht auch wunderbar, aber ab und an verschluckt es ein paar dateien, sprich zeigt nicht alle an. hier is mal der code:
Code:
also, ich kann da keinen fehler finden.
<?php
function is_image($filename) //diese funktion sollte selbsterklärend sein. stimmt sie? { //echo "Prüfung für $filename ergab "; if (is_dir($filename)) { //print "false\n"; return false; } $ext=strtolower(substr($filename,-3)); switch ($ext) { case "png": case "bmp": case "gif": case "wmf": case "jpg": case "peg": //print "true\n"; return true; break; default: //print "false\n "; return false; break; } } if (isset($_REQUEST["dir"] )) $dirname = $_REQUEST["dir"]; //hier wird die var $dirname initialisiert. else $dirname = "."; $dir = opendir($dirname); if (isset($_REQUEST["height"])) $height = $_REQUEST["height"]; //noch mehr init.... if (isset($_REQUEST["width"] )) $width = $_REQUEST["width"]; else $width="100%"; if (isset($_REQUEST["cols"])) $cols = $_REQUEST["cols"]; else if (isset($width)) $cols= floor(400 / $width); else $cols=4; //print "PHP-Skript-Debug-Infos:\n$cols"; //auskommentiert, würde $cols anzeigen readdir($dir); // . und readdir($dir); // .. abfangen $table_string = "<table class=\"main\">\n"; //init für den string, der später in den html-code kommt while ( $file = readdir($dir)) //alle files werden durchlaufen { $break=false; $table_string .= " <tr>\n"; //eine neue zeile..... for ($i=0;$i<$cols;$i++) //dieser loop liest die zeile komplett ein { $table_string .= " <td>"; while (! is_image($file)) //dieser loop sichert, dass in $file ein image steht if (! ($file = readdir($dir))) { $break=true; break; } if ($break) break; $img_string = "<image src=\"$dirname/$file\" "; //von hier... if (isset($height)) $img_string .= "height=\"$height\" "; if (isset($width )) $img_string .= "width=\"$width\" "; $img_string .= "alt=\"$file\">"; $table_string .= $img_string; $table_string .= "</td>\n"; //...bis hier wird der stirng erzeugt. $file=readdir($dir); //Hö? ach ja damit wird... das is ja eins zu viel des guten... nein ist es nicht, gerade überprüft! stimmt so! } $table_string .= " </tr>\n"; } $table_string .= "</table>\n"; ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/transitional.dtd"> <html> <head> <title>Galerie</title> </head> <body> <?php echo $table_string; ?> </body> </html> ps: dir ist das verzeichnis, cols ist die anzahl der spalten. mehr braucht man nicht. einfach per get übergeben. [edit=alcaeus][Klammern ersetzt] Mfg, alcaeus[/edit] |
Re: [PHP] Script geht nicht.....
Hi,
In der Funktion is_image() steht folgendes:
Delphi-Quellcode:
das geht so nicht ...
case "png":
case "bmp": case "gif": case "wmf": case "jpg": case "peg": //print "true\n"; return true; break; entweder schreibst Du:
Delphi-Quellcode:
oder einfacher:
case "png":
return true; break; case "bmp": return true; break; case "gif": return true; break; case "wmf": return true; break; case "jpg": return true; break; case "peg": //print "true\n"; return true; break;
Delphi-Quellcode:
Dein zweifaches readdir() (um . und .. zu filtern) solltest Du so umsetzen:
$arrExt = new Array('bmp','gif','jpg','png');
if(in_array($myExt, $arrExt)) return true; (ich habe das Bilder filtern gleich mal reingeschrieben)
Delphi-Quellcode:
Ausserdem kann ich nur jedem raten bei der Entwicklung eines Scriptes am Anfang 'error_reporting(E_ALL);' zu notieren, denn dann hilft einem der Interpreter ungemein ...
<?php
$arrExt = new Array('bmp','gif','jpg','png'); $handle=opendir('.'); while ($file = readdir ($handle)) { if ($file != "." && $file != "..") { $myExt = strtolower(substr($filename,-3)); if(in_array($myExt, $arrExt)) echo "$file\n"; } } closedir($handle); ?> grüsse, hannes |
Re: [PHP] Script geht nicht.....
Zitat:
Code:
Dann vielleicht noch sagen, welche Dateien es verschluckt. Nur wenn man diese Informationen hat, kann man nach dem Fehler im Code suchen. Wenn man sie nicht hat, braucht das ewig. :wink:
dein_ordner
- das_bild.bmp - das_bild_2.jpg - foto.gif usw. Edit: Es gab keine rote Nachricht. :gruebel: @noch_ein_hannes: Das switch ist imho so ok. Man kann in der Tat mehrmals case schreiben und nachher für alle auf einmal etwas ausführen lassen. :wink: |
Re: PHP: Script geht nicht.....
jep, da switch stimmt so. is zwar nicht elegant, aber legal.
@files: ich habs mit 30 dateien getestet, und je kleiner $cols war, desto weniger wurden angezeigt. bin glaube ich auf maximum 26 gekommen. wenns nur vier sind, gehts aber. ich werde im übrigen das ganze heute abend komplett umschreiben, und das ganze ein bisschen entschachteln. da kommt ein array of strng rein, da lad ich dann meine dateinamen rein, und dann wird das ganze in einem rutsch angezeigt. basta. der vollständigkeit halber kann jemand, der zufällig auf die lösung stößt, diese gerne hier posten. [werbeeinblendung] zum editieren kann ich übrigens Creator SE von s.h.a.r.k. (zu finden bei freeware) sehr empfehlen. wenn man noch keinen highlighter für php hat. zum testen XAMPP. [/werbeeinblendung] |
Re: PHP: Script geht nicht.....
Ich kann übrigens statt is_image folgende if-Abfrage empfehlen:
Code:
;)
$imginfo = @ getimagesize ("dateiname");
if(($imginfo[2] == 1) || ($imginfo[2] == 2) || ($imginfo[2] == 3)) |
Re: PHP: Script geht nicht.....
Der Hund liegt hier begraben:
Code:
Wenn $cols = 5 ist und $i bereits 4, wird am Ende deer Schleife nochmal readdir() aufgerufen. Beim nächsten Schleifendurchlauf ist $i aber 5, die Schleife wird also nicht nochmal durchlaufen. Anschließend wird aber durch die außenliegende while-Schleife nochmal readdir() aufgerufen, es geht also ein Verzeichniseintrag verloren. Je kleiner $cols ist, desto häufiger tritt dieser Fall auf, weil die innere for-Schleife häufiger durchlaufen werden muss, und desto mehr Dateien gehen so verloren.
for ($i=0;$i<$cols;$i++) //dieser loop liest die zeile komplett ein
{ // ... $file=readdir($dir); //Hö? ach ja damit wird... das is ja eins zu viel des guten... nein ist es nicht, gerade überprüft! stimmt so! } |
Re: PHP: Script geht nicht.....
Liste der Anhänge anzeigen (Anzahl: 1)
@jfheins: ja, das würde so gehen. ich bin damit aber anfangs irgendwie nicht zurechtgenommen, vor allem weil er mir
Code:
nicht genommen hat.
if (getimagesize($image)[0] > 0) {....}
@tommie-lie: kann ich im moment nicht nachvollziehen. habe das ganze jetzt aber komplett neugeproggt, und siehe da, es funktioniert. |
Re: PHP: Script geht nicht.....
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:08 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz