Versionen dieses Beitrags

Mit PHP Bild-Daten aus einem Ordner auslesen

Thepoeppel crop Rolf B
  • Mit PHP Bild-Daten aus einem Ordner auslesen
  • Hallo einsiedler,
  • bezahlt wird hier nicht, aber Selfhtml hat ein [Spendenkonto](https://selfhtml.org/spenden.html), falls Du Überdruck im Geldbeutel hast.
  • Du hast meinen Vorschlag mit dem $entry etwas anders umgesetzt, das macht aber nichts :)
  • Einen Teil deiner Fragen verstehe ich nicht, weil das, was ich auf welten-bau.de angezeigt bekomme, nicht zu deinen Fehlerbeschreibungen passt. Ich sehe auch nicht, dass dein Script eine Liste erzeugt, aber welten-bae.de liefert eine. Offenbar ist das Script mittlerweile weiterentwickelt worden und Du hast die Probleme teilweise schon gelöst.
  • Also erstmal nur die „einfachen“ Fehler:
  • ## echo '$Verzeichnis + $NAME ' . $entry[$i] ['verzeichnis+name']
  • zeigt deshalb nichts an, weil du bei dem Befüllen dieses Eintrags in $entry[i] die array_merge Funktion verwendest. array_merge erwartet aber zwei Arrays als Eingabe und hängt sie zusammen. DU willst zwei Strings zusammenketten - und dafür reicht `$verz . $datei` vollkommen aus. Lass den array_merge-Aufruf darum herum einfach weg.
  • ## echo 'BILDabmessungen ' . $entry[$i] ['bildabmessungen'[0]] . "\n";
  • zeigt nichts an, weil Du die Array-Zugriffe falsch schachtelst. Was Du geschrieben hast, ist (in der Reihenfolge wie PHP es durchführt)
  • - nimm die Zeichenkette 'bildabmessungen'
  • - hol die das erste Zeichen davon - also 'b'
  • - verwende das als Zugriffsschlüssel für $entry[i] - das findet nichts.
  • Richtig ist: `$entry[$i] ['bildabmessungen'] [0] . "\n";`
  • ## Sortierung nach Name
  • Hierfür musst Du den Einlesevorgang von der Ausgabe trennen. D.h. du brauchst zwei Schleifen, die nacheinander laufen. Dazwischen sortierst Du das Array.
  • Zum Sortieren bietet es sich an, das $entry-Array NICHT numerisch zu indizieren, sondern den Dateinamen als Index zu verwenden (also ein assoziatives Array). Die ksort-Funktion macht das Sortieren dann leicht (andernfalls müsstest Du mit usort und einem Sort-Callback herumbasteln).
  • ~~~php
  • $entry = []; // $entry als leeres Array vorbereiten
  • while ($datei = readDir($verzeichnis)) {
  • if ($datei != "." && $datei != "..") {
  • $entry[$datei] = [
  • 'name' => $datei,
  • 'verzeichnis+name' => $verz . $datei,
  • 'bildabmessungen' => getImageSize($datei),
  • 'berechnungen' => 'berechnungen'
  • ];
  • }
  • }
  • // SORT_FLAG_CASE sortiert case-insensitive - lass den 2. Parameter weg wenn du das nicht willst
  • ksort($entry, SORT_FLAG_CASE);
  • // SORT_NATURAL würde bsw. img2 vor img10 einsortieren (was normalerweise nicht passiert)
  • // SORT_FLAG_CASE sortiert case-insensitive - lass das weg wenn du das nicht willst
  • ksort($entry, SORT_NATURAL | SORT_FLAG_CASE);
  • // Ausgeben
  • foreach ($entry as $datei => $eintrag) {
  • echo "<a href=\"img/$datei\"> $datei</a><br>\n";
  • echo "Vollst. Name: {$eintrag['verzeichnis+name']}\n";
  • echo "Bildabmessungen: {$eintrag['bildabmessungen'][0]}\n";
  • }
  • ~~~
  • _Rolf_
  • --
  • sumpsi - posui - clusi

Mit PHP Bild-Daten aus einem Ordner auslesen

Thepoeppel crop Rolf B
  • Mit PHP Bild-Daten aus einem Ordner auslesen
  • Hallo einsiedler,
  • bezahlt wird hier nicht, aber Selfhtml hat ein [Spendenkonto](https://selfhtml.org/spenden.html), falls Du Überdruck im Geldbeutel hast.
  • Du hast meinen Vorschlag mit dem $entry etwas anders umgesetzt, das macht aber nichts :)
  • Einen Teil deiner Fragen verstehe ich nicht, weil das, was ich auf welten-bau.de angezeigt bekomme, nicht zu deinen Fehlerbeschreibungen passt. Ich sehe auch nicht, dass dein Script eine Liste erzeugt, aber welten-bae.de liefert eine. Offenbar ist das Script mittlerweile weiterentwickelt worden und Du hast die Probleme teilweise schon gelöst.
  • Also erstmal nur die „einfachen“ Fehler:
  • ## echo '$Verzeichnis + $NAME ' . $entry[$i] ['verzeichnis+name']
  • zeigt deshalb nichts an, weil du bei dem Befüllen dieses Eintrags in $entry[i] die array_merge Funktion verwendest. array_merge erwartet aber zwei Arrays als Eingabe und hängt sie zusammen. DU willst zwei Strings zusammenketten - und dafür reicht `$verz . $datei` vollkommen aus. Lass den array_merge-Aufruf darum herum einfach weg.
  • ## echo 'BILDabmessungen ' . $entry[$i] ['bildabmessungen'[0]] . "\n";
  • zeigt nichts an, weil Du die Array-Zugriffe falsch schachtelst. Was Du geschrieben hast, ist (in der Reihenfolge wie PHP es durchführt)
  • - nimm die Zeichenkette 'bildabmessungen'
  • - hol die das erste Zeichen davon - also 'b'
  • - verwende das als Zugriffsschlüssel für $entry[i] - das findet nichts.
  • Richtig ist: `$entry[$i] ['bildabmessungen'] [0] . "\n";`
  • ## Sortierung nach Name
  • Hierfür musst Du den Einlesevorgang von der Ausgabe trennen. D.h. du brauchst zwei Schleifen, die nacheinander laufen. Dazwischen sortierst Du das Array.
  • Zum Sortieren bietet es sich an, das $entry-Array NICHT numerisch zu indizieren, sondern den Dateinamen als Index zu verwenden (also ein assoziatives Array). Die ksort-Funktion macht das Sortieren dann leicht (andernfalls müsstest Du mit usort und einem Sort-Callback herumbasteln).
  • ~~~php
  • $entry = []; // $entry als leeres Array vorbereiten
  • while ($datei = readDir($verzeichnis)) {
  • if ($datei != "." && $datei != "..") {
  • $entry[$datei] = [
  • 'name' => $datei,
  • 'verzeichnis+name' => array_merge($verz . $datei),
  • 'verzeichnis+name' => $verz . $datei,
  • 'bildabmessungen' => getImageSize($datei),
  • 'berechnungen' => 'berechnungen'
  • ];
  • }
  • }
  • // SORT_FLAG_CASE sortiert case-insensitive - lass den 2. Parameter weg wenn du das nicht willst
  • ksort($entry, SORT_FLAG_CASE);
  • // Ausgeben
  • foreach ($entry as $datei => $eintrag) {
  • echo "<a href=\"img/$datei\"> $datei</a><br>\n";
  • echo "Vollst. Name: {$eintrag['verzeichnis+name']}\n";
  • echo "Bildabmessungen: {$eintrag['bildabmessungen'][0]}\n";
  • }
  • ~~~
  • _Rolf_
  • --
  • sumpsi - posui - clusi