Zufallsbild aus Ordner inkl. Unterordner
Karsten1982
- php
Hallo,
ich hab mal versucht, ein Zufallsbild aus einem Ordner und seinen Unterordnern anzuzeigen...
Folgendes Skript benutze ich dafür:
<?php
function ordnerinhalt($ordner='cpg144/albums/uploads')
{
$handle = opendir($ordner);
while ($file = readdir ($handle)){
if($file{0} != '.') {
if(is_dir($ordner.'/'.$file)) {
$folderArray[] = $file;
} else {
$fileArray[] = $file;
}
}
}
closedir ($handle);
if(isset($folderArray)) {
asort($folderArray);
foreach($folderArray as $row) {
ordnerinhalt($ordner.'/'.$row);
}
}
if(isset($fileArray)) {
asort($fileArray);
foreach($fileArray as $row) {
$rows[] = $row;
//shuffle($rows);
mt_srand((double)microtime()*1000000);
$number = mt_rand(0,count($auswahl)-1);
echo "Zufallsbild<br />\n<img src=".$ordner."/".$row[$number]."><br />\n";
}
}
}
ordnerinhalt();
?>
Leider funktioniert das ganze nicht... Es wird versucht mir alle Bilder anzuzeigen, welche aber kaputt sind... Der Quelltext im Browser sieht folgendermaßen aus:
Zufallsbild<br />
<img src=cpg144/albums/uploads/austria/P><br />
Zufallsbild<br />
<img src=cpg144/albums/uploads/austria/P><br />
Zufallsbild<br />
<img src=cpg144/albums/uploads/austria/P><br />
Zufallsbild<br />
<img src=cpg144/albums/uploads/austria/P><br />
Zufallsbild<br />
<img src=cpg144/albums/uploads/austria/P><br />
...
Kann mir wer helfen???
Grüße Karsten
echo $begrüßung;
Kann mir wer helfen???
Ja, es handelt sich dabei um das übliche Problem, dass in den Variablen etwas anderes enthalten ist, als du dir vorstellst. Um dem Problem auf die Spur zu kommen, sind Kontrollausgaben der Inhalte erforderlich, die mit dem Erwarteten zu vergleichen sind. Fehler zu suchen ist eine Tätigkeit, die der Programmierer können muss, weswegen ich dir keinen genauen Hinweis auf den Fehler geben werde.
Um Kontrollausgaben vorzunehmen eignet sich echo und var_dump() bei einfachen (skalaren) Variablentypen. Bei komplexen Typen (Arrays, Objekte) eignet sich print_r() und var_dump() mit vorangestellten <pre>.
Ebenfalls hilfreich ist ein auf E_ALL gestelltes error_reporting. Damit werden Meldungen vom Typ E_NOTICE nicht mehr unterdrückt, welche über Zugriffe auf nicht initialisierte Variablen aufklären.
Was du auch noch wissen solltest: Die Schreibweisen $string{position} und $string[position] bewirken bei Strings das gleiche. (Bei diesem Thema gab/gibt es etwas Hin und Her. Die []-Schreibweise ist aber diejenige mit Zukunft.)
echo "$verabschiedung $name";
Hallo dedlfix.
Die Schreibweisen $string{position} und $string[position] bewirken bei Strings das gleiche. (Bei diesem Thema gab/gibt es etwas Hin und Her. Die []-Schreibweise ist aber diejenige mit Zukunft.)
Apropos Zukunft: wird es irgendwann möglich sein, einfache Datentypen zum Type–Hinting in Klassenmethoden angeben zu können? Momentan ist man ja auf Objekt und Array beschränkt.
Einen schönen Sonntag noch.
Gruß, Mathias
echo $begrüßung;
Apropos Zukunft: wird es irgendwann möglich sein, einfache Datentypen zum Type–Hinting in Klassenmethoden angeben zu können? Momentan ist man ja auf Objekt und Array beschränkt.
Ich glaube nicht. Das wird sicherlich auch nicht kommen. Was würdest du erwarten, wenn ein String gefordert ist und ein Integer übergeben wird? Einen fatalen Fehler mit Script-Abbruch wie derzeit bei Objekten oder eine automatische Typumwandlung? Letztere findet ja sowieso statt, wenn es nötig ist. Ich denke nicht, das so ein Feature ins PHP-Konzept passt.
Einen Ausblick auf die nahe Zukunft (PHP 5.2) liefert das Manual bereits. Da finden sich schon Beschreibungen zu beispielsweise Filter Functions und neue Konstanten/Werte beim Error Reporting.
Die weiter entfernte Zukunft beleuchtet ein Dokument mit Notizen eines Developer Meetings.
echo "$verabschiedung $name";
Hallo dedlfix.
Was würdest du erwarten, wenn ein String gefordert ist und ein Integer übergeben wird? Einen fatalen Fehler mit Script-Abbruch wie derzeit bei Objekten oder eine automatische Typumwandlung?
Das käme auf den Einzelfall an. Obiges Beispiel könnte derzeit, mit einem Typecast (wenn nötig) und einer User–Notice abgespeist werden.
Allgemein fällt mir gerade auf, dass ich die ganze Sache komplizierter gesehen habe, als sie ist. Ich wollte der Sauberkeit halber bestimmte Typen erzwingen, aber wirklich erforderlich ist dies eigentlich garnicht, da es durchaus jetzt schon genug Möglichkeiten gibt, darauf angemessen zu reagieren.
Einen Ausblick auf die nahe Zukunft (PHP 5.2) liefert das Manual bereits. Da finden sich schon Beschreibungen zu beispielsweise Filter Functions und neue Konstanten/Werte beim Error Reporting.
Sehr gut. Beides sieht nützlich aus. Nur dass die Filterfunktionen per PEAR nachinstalliert werden müssen, gefällt mir weniger. Aber vermutlich kann man jeden guten Webhoster dazu überreden, die nötigen Pakete zu installieren.
Die weiter entfernte Zukunft beleuchtet ein Dokument mit Notizen eines Developer Meetings.
Danke wieder einmal für den Link. Nun setze ich auch endlich einmal ein Lesezeichen, da ich ihn immer wieder vergesse.
Einen schönen Sonntag noch.
Gruß, Mathias
echo $begrüßung;
[...] Filter Functions und neue Konstanten/Werte beim Error Reporting.
Sehr gut. Beides sieht nützlich aus. Nur dass die Filterfunktionen per PEAR nachinstalliert werden müssen, gefällt mir weniger.
Nein, soweit ich weiß werden die Filter Functions direkt in PHP 5.2 eingebunden sein (spätestens aber unter PHP 6), da sie unter anderem als Ersatz/bessere Alternative für das dann (PHP 6) weggefallene Magic Quotes dienen.
echo "$verabschiedung $name";
Hallo dedlfix.
[...] Filter Functions und neue Konstanten/Werte beim Error Reporting.
Sehr gut. Beides sieht nützlich aus. Nur dass die Filterfunktionen per PEAR nachinstalliert werden müssen, gefällt mir weniger.
Nein, soweit ich weiß werden die Filter Functions direkt in PHP 5.2 eingebunden sein (spätestens aber unter PHP 6), da sie unter anderem als Ersatz/bessere Alternative für das dann (PHP 6) weggefallene Magic Quotes dienen.
Na das wird ja immer besser. Ich hatte mich nur auf den Punkt „Installation“ auf obiger Seite gestützt. Wenn diese Funktionen ins Gesamtpaket einfließen, sind meine obigen Bedenken hinfällig.
Einen schönen Sonntag noch.
Gruß, Mathias
echo $begrüßung;
Na das wird ja immer besser.
Eben fand ich noch eine interessante Seite zur Zukunft PHPs: http://oss.backendmedia.com/PHPTODO/
(und siehe da: PHP 5.2.0, Abschnitt "Confirmed", Punkt 14, input_filter nach core verlinkt)
echo "$verabschiedung $name";