• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

readdir 2 ausgaben zu viel?

Status
Für weitere Antworten geschlossen.

wolf360

Neues Mitglied
Also ich hab folgendes Problem, ich will so ne Bildergallerie machen:

PHP:
<?php   include("../head.php"); ?>
<?php

    $pfad = "gig/Colon";
    if(is_dir($pfad)){



         if($open = opendir($pfad)){
                  while(false !== ($ausgabe = readdir($open))){
                     echo '<img height="200" width="200" src="gig/Colon/'.$ausgabe.'">';
                  }
         }else{
                echo "Fehler Bitte kontaktieren Sie den Webmaster";
         }

    }else{
      echo "Fehler bei der Gallerie\n Bitte kontaktieren Sie den Webmaster";
    }

?>


<?php   include("../footer.php"); ?>

so code klappt auch 1a blos ich hab 2 Ausgaben die ich nicht leer sind und die störn xD aber ich hab keine Ahnung woher die beidn Leeren felder kommen.

Rock im Hennahuf

gruß wolf360

Edit: hab den fehler gefunden -.-" musste blos . und .. ausblenden
 
Zuletzt bearbeitet:
dir hat das hier gefehlt
PHP:
if($ausgabe == '.' || $ausgabe == '..'){ continue; }

denn wenn du einen ordner ausliest bekommst du auch einen zeiger darauf das es einen unterordner gibt also ".." und einen zeiger auf den aktuellen ordner "." die musst du ignorieren ^^

hier deinen code habe ich auch nochmal formatiert ;)

PHP:
<?php

include("../head.php"); 

$pfad = "gig/Colon";
if(is_dir($pfad)) {
    if($open = opendir($pfad)){
        while(false !== ($ausgabe = readdir($open))) {
            if($ausgabe == '.' || $ausgabe == '..'){ continue; }
            echo '<img height="200" width="200" src="gig/Colon/'.$ausgabe.'">';
        }
    } else {
        echo "Fehler Bitte kontaktieren Sie den Webmaster";
    }
} else {
    echo "Fehler bei der Gallerie\n Bitte kontaktieren Sie den Webmaster";
}

include("../footer.php");

?>
 
gleich mal zur nächsten Frage:

Ich will kleine ladezeiten haben, und will die orginalgroßen Fotos iwie per Pop-up öffnen und die Seite erst mit Vorschaubildern laden lassn....

Im mom hab ihc das ja mit widht und height im img tag gemacht, blos nimmt das wahnsinnig viel ladezeit

geht das iwie kürzer?

gruß wolf360
 
Erstmal: Edit Button Pl0x

Zu deiner Frage:
Thumbs erstellen, die laden weniger. Ist zwar ein wenig Arbeit, aber ich wüsste keinen anderen Weg wies leichter geht.
 
Thumbs sind kleinere Versionen der Bilder.
Sowas wie bei Google-Bilder Suche.
Allerdings sind Google Thumbs dynamisch erstellt, wie das geht, weis ich leider selbst nicht.

Ansonsten einfach alle Fotos kleiner machen und als *_thumb.jpg/*_thumb.gif abspeichern,
 
Allerdings sind Google Thumbs dynamisch erstellt, wie das geht, weis ich leider selbst nicht.

Das ist eigentlich nicht weiter schwer und lässt sich ohne Probleme in PHP realisieren.

Du erstellst dir eine image.php Datei. Anstelle die Bilder zu laden rufst du nun im src Attribut des img tags nur die image.php auf und hängst das bild ran, also
HTML:
<img src="image.php?image=big_picture.jpg" />

Die PHP Datei lädt nun das Bild, was wesentlich schneller geht, als wenn der Client das Bild lädt, da ja Server eine weitaus schnellere Anbindung haben.

Du setzt mittels PHP: header - Manual den Header des PHP Scripts auf das jeweilige image format und gibst eine verkleinerte Version des Bildes aus.

Könnte so aussehen (nur ein Beispiel):
PHP:
<?php

// FUNKTIONIERT >SO< NUR FÜR DIE FROMATE
// GIF, JPG/JPEG, PNG

$original = isset($_GET["image"]) ? $_GET["image"] : "nopic.jpg";


// Originalbild und Mime Typ auslesen
$mimetype = array_pop(explode("/", mime_content_type($original)));
if($mimetype == "jpg") {
  $mimetype = "jpeg";
}

// Thumbnail als Kopie erstellen
$thumb = call_user_func("imagecreatefrom".$mimetype, $original);
$thumb_mime = "image/".$mimetype;

// Neue größe festlegen 
// (height = 100, width anpassen damit Verhältnis stimmt)
list($width, $height) = getimagesize($original);
$newwidth = $width / ($height/100);

// Thumb-größe anpassen
imagecopyresized($thumb_small, $thumb, 0, 0, 0, 0, $newwidth, 100, $width, $height);

// Header für Ausgabe setzen
header('Content-type: '.$thumb_mime);

// Ausgabe
call_user_func("image".$mimetype, $thumb_small);
?>

Habs nicht getestet aber so ist zumindest die Idee
 
Das ist eigentlich nicht weiter schwer und lässt sich ohne Probleme in PHP realisieren.
Die PHP Datei lädt nun das Bild, was wesentlich schneller geht, als wenn der Client das Bild lädt, da ja Server eine weitaus schnellere Anbindung haben.
Das ist sicher richtig, wenn es aber um eine Geschwindigkeitsfrage geht, dann muss man auch anmerken, dass Deine Lösung trotzdem noch eine höhere Ladezeit hat, als wenn die Thumbnails vorher von Hand erzeugt werden, denn die Zeit, die PHP braucht, ein neues Image zu erstellen, muss ja auch mit eingerechnet werden.

Gruß,
-Efchen
 
Nein, wie kann es auf das selbe rauskommen, wenn bei der einen Lösung zusätzliche Arbeit erforderlich ist?

Das schnellste ist, die Thumbnails alle selber zu erzeugen und mit auf der Website abzulegen und dann nur die Thumbs zu verlinken.

Das angenehmste (für den Webmaster) ist, die Thumbnails von PHP zu berechnen lassen, das erfordert aber zusätzliche Arbeit auf Seite des Servers, was natürlich auch zu einer (leicht) verlängerten Wartezeit auf die Seite führt. Die Ladezeit verändert sich gegenüber der ersten Lösung nicht, aber die effektive Wartezeit des Nutzers sehr wohl.

Das einfachste (für jemanden gänzlich ohne Ahnung) ist, die Bilder in ihrer Originalgröße per HTML oder CSS zu skalieren und klein anzeigen zu lassen. Dabei werden aber die Bilder in ihrer Originalgröße runtergeladen, was lange Ladezeiten verursacht. Außerdem ist die Qualität per HTML/CSS skalierter Bilder grauenvoll.

Lösung 1 ist die schnellste. Lösung 2 wird immer langsamer, je mehr Thumbnails auf einer Seite berechnet werden müssen, Lösung 3 ist inakzeptabel.

Alles klar?
-Efchen
 
Natürlich geht das schneller, wenn du einmal die Thumb erstellst, und beim nächsten Aufruf erstmal prüfst ob nicht schon ein Thumb existiert bevor du wieder einen erstellst.

Dann sollte man (wenn es sich um externe Bilder handelt wie bei Google) allerdings in bestimmten Zeitintervallen die Thumbs aktualisieren, denn das Bild könnte sich ja geändert haben und dann nicht mehr mit dem Thumb übereinstimmen.
 
mhh... also erstmal danke für die hilfe, aber iwie klappt des net -.-"

okey ich hab a bissl was geänder weil das mit dem mime_conetnt_type() net ging (es kam ne Fehlermeldung called undefined function)

etz is es so:
Code:
$image = getimagesize($orginal);

// Originalbild und Mime Typ auslesen
$mimetype = array_pop(explode("/", $image[3]));
if($mimetype == "jpg") {
  $mimetype = "jpeg";
}

müsste eig. aufs gleiche rauskommen...

hab etz mal so gemacht:
<img src="test.php?image=IMG_3663-900.jpg">

und die ausgabe is einfach nur son Fehlerbild...-.-"
 
ruf mal direkt die php auf und schau nach fehlermeldungen (error_reporting an machen nicht vergessen)

also einfach ma das aufrufen test.php?image=IMG_3663-900.jpg
 
okey das Downloadfenster is etz weg hier mal des neue code (von mir a bissl abgeändert:

PHP:
<?php


if(isset($_GET["image"])){
  $original = $_GET["image"];
  $mimetyp = getimagesize($original);
   // Originalbild und Mime Typ auslesen
$type = explode("/", $mimetyp['mime']);


// Thumbnail als Kopie erstellen
$thumb = call_user_func("imagecreatefrom".$type[1], $original);
$thumb_mime = "image/".$type[1];

list($width, $height) = getimagesize($original);

// Thumb-größe anpassen

imagecopyresized($thumb_small, $thumb, 0, 0, 0, 0, 200, 200, $width, $height);

// Header für Ausgabe setzen
header("Content-type: ".$thumb_mime);

// Ausgabe
call_user_func("image".$type[1], $thumb_small);


}else{
   echo "Fehler";
}
abba die ausgabe is nur´n Fehlerbild...-.-"

http://rock-im-hennahuf.de/test.php?image=test.jpeg

was is etz noch falsch???
 
bei mir klappt's

wenn wir schon beim thema sind:
ich habe mal einen popup-viewer gecoded, der

1.
die original-grösse eines bildes ausliest und dann die anzeige entsprewchend anpasst (popup resizen).
2.
ein resize des bildes auf das seitenverhälltnis umrechnet
3.
das popup auf die grösse des bildes anpasst
4.
die übergabe eines infotextes unterm bild ermöglicht
5.
das popup resized, so dass es sich dem bild anpasst
6.
je browserkennung entsprechende werte zum popup hinzurechnet, so dass für den ie andere fenstermasse verwendet werden als für den firefox oder opera oder....
es entstehen also keine scrollbalken

bildpfad und text werden per $_GET an das fenster übergeben.

besteht an sowas intersse ?
 
ja jetzt klappt es da ich dem komplettn code neu geschrieben hab:

Code:
<?php

    if(isset($_GET["image"])){
    $original = $_GET["image"];
    $type = getimagesize($original);


$groeße = 0.2;


header('Content-type: '.$type['mime']);


list($width, $height) = getimagesize($original);
$new_width = $width * $groeße;
$new_height = $height * $groeße;


$thumb = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromjpeg($original);
imagecopyresampled($thumb, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

// Output
imagejpeg($thumb);
}else{
    echo "Fehler";
}
?>

ja an sowas besteht interesse sowas wär ideal!

danke scho mal für die hilfe!!
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben