Versionen dieses Beitrags

Mit PHP Bild-Daten aus einem Ordner auslesen

Ts rot TS
  • Mit PHP Bild-Daten aus einem Ordner auslesen
  • Hello,
  • sieht doch schon besser aus. Ein paar "Kleinigkeiten" sollten aber noch verbessert werden. :-)
  • Grundsätzlich solltest Du dich dazu durchringen, abgrenzbare Funktionen aus dem Code zu machen. Dann lassen sich die Fehler, notwenige Änderungen am Code, usw. besser zuordnen. Und auch anderenfalls sollten die "IF-Blöcke" auch immer das umschließen, was sie denn abfragen.
  • Beispiel: Wenn kein Handle für das Verzeichnis erstellt werden konnte, kann man auch keinen Kanal für dieses Handle wieder schließen. Es gibt ja keinen!
  • Und Variablen sollen das enthalten, was ihre Namen suggerieren. `$verzeichnis` ist daher ein irreführender Name. Du solltest z. B. lieber `$dateiname` dafür benutzen.
  • Ich ändere deshalb nicht grundsätzlich deinen Code, sondern sortiere ihn nur etwas.
  • ~~~php
  • <?php
  • function get_image_filenames($verzeichnis=false)
  • {
  • if ($verzeichnis === false) return false; ## Daisy-Chain-Skip
  • $verzeichnis = rtrim($verzeichnis, '/') . '/'; ## Normierung nach POSIX
  • $_liste = array();
  • if ($vhandle = opendir($verzeichnis))
  • {
  • while (false !== ($filename = readdir($vhandle)))
  • {
  • if (is_file($filename))
  • {
  • if (false !== ($imgsize = getImageSize($verzeichnis . $filename))) ## ist es ein Bild?
  • {
  • $_liste[$filename] = array(
  • 'name' => $filename,
  • 'pfad' => ($verzeichnis . $filename),
  • 'bildabmessungen' => $imgsize,
  • 'berechnungen' => 'berechnungen' ## Deine Baustelle?
  • 'berechnungen' => 'berechnungen'
  • );
  • ## Berechnungen ist deine nächste Baustelle?
  • }
  • }
  • }
  • ksort($entry, SORT_NATURAL | SORT_FLAG_CASE);
  • closedir($handle);
  • return $_liste
  • }
  • return $_liste
  • return false;
  • }
  • #-------------------------------------------------------------------------------
  • function html_list_filename($_liste=false)
  • {
  • if (($_liste === false) or (!is_array($_liste)) return false; ## Daisy-Chain-Skip
  • $htmlout = '';
  • foreach ($_liste as $filename => $_fileinfo)
  • {
  • $htmlout = "\n<pre>\n";
  • $htmlout .= "name:\t {$filename}\n";
  • $htmlout .= "\n";
  • $htmlout .= "pfad & name:\t {$_fileinfo[path]}\n";
  • $htmlout .= "\n";
  • $htmlout .= "Bildabmessungen:\n";
  • $htmlout .= "\twidth:\t {$entry[$verzeichnis]['bildabmessungen'][0]}\n";
  • $htmlout .= "\theight:\t {$entry[$verzeichnis]['bildabmessungen'][1]}\n";
  • $htmlout .= "\n";
  • $htmlout .= "<a href=\"$path\">$path</a>\n";
  • $htmlout .= "</pre>\n";
  • }
  • return $htmlout;
  • }
  • #-------------------------------------------------------------------------------
  • $_liste = get_image_filenames('img/');
  • echo html_list_filename($_liste);
  • ?>
  • ~~~
  • Das lässt sich bestimmt alles noch viel hübscher schreiben. Mindestens für den Anfang würde ich aber auf jeden Fall von Kurzschreibweisen absehen!
  • Man könnte es als nächsts nun noch durch Error-Logging ergänzen, oder den berüchtigten Filter auf MIME-Types. Da getimagesize() hierfür schon sehr viele Informationen zur Verfügung stellt (im zweiten, bisher ungenutzten Parameter), würde ich dort ansetzen.
  • Bitte selber den/die Fehler suchen, der/die laut Highlighter noch drinstecken. Ich kann es jetzt so nicht testen.
  • Liebe Grüße
  • Tom S.
  • --
  • Es gibt nichts Gutes, außer man tut es!
  • Das Leben selbst ist der Sinn.

Mit PHP Bild-Daten aus einem Ordner auslesen

Ts rot TS
  • Mit PHP Bild-Daten aus einem Ordner auslesen
  • Hello,
  • sieht doch schon besser aus. Ein paar "Kleinigkeiten" sollten aber noch verbessert werden. :-)
  • Grundsätzlich solltest Du dich dazu durchringen, abgrenzbare Funktionen aus dem Code zu machen. Dann lassen sich die Fehler, notwenige Änderungen am Code, usw. besser zuordnen. Und auch anderenfalls sollten die "IF-Blöcke" auch immer das umschließen, was sie denn abfragen.
  • Beispiel: Wenn kein Handle für das Verzeichnis erstellt werden konnte, kann man auch keinen Kanal für dieses Handle wieder schließen. Es gibt ja keinen!
  • Und Variablen sollen das enthalten, was ihre Namen suggerieren. `$verzeichnis` ist daher ein irreführender Name. Du solltest z. B. lieber `$dateiname` dafür benutzen.
  • Ich ändere deshalb nicht grundsätzlich deinen Code, sondern sortiere ihn nur etwas.
  • ~~~php
  • <?php
  • function get_image_filenames($verzeichnis=false)
  • {
  • if ($verzeichnis === false) return false; ## Daisy-Chain-Skip
  • $verzeichnis = rtrim($verzeichnis, '/') . '/'; ## Normierung nach POSIX
  • $_liste = array();
  • if ($vhandle = opendir($verzeichnis))
  • {
  • while (false !== ($filename = readdir($vhandle)))
  • {
  • if (is_file($filename))
  • {
  • if (false !== ($imgsize = getImageSize($verzeichnis . $filename))) ## ist es ein Bild?
  • {
  • $_liste[$filename] = array(
  • 'name' => $filename,
  • 'pfad' => ($verzeichnis . $filename),
  • 'bildabmessungen' => $imgsize,
  • 'berechnungen' => 'berechnungen' ## Deine Baustelle?
  • );
  • }
  • }
  • }
  • ksort($entry, SORT_NATURAL | SORT_FLAG_CASE);
  • closedir($handle);
  • }
  • return $_liste
  • }
  • #-------------------------------------------------------------------------------
  • function html_list_filename($_liste=false)
  • {
  • if (($_liste === false) or (!is_array($_liste)) return false; ## Daisy-Chain-Skip
  • $htmlout = '';
  • foreach ($_liste as $filename => $_fileinfo)
  • {
  • $htmlout = "\n<pre>\n";
  • $htmlout .= "name:\t {$filename}\n";
  • $htmlout .= "\n";
  • $htmlout .= "pfad & name:\t {$_fileinfo[path]}\n";
  • $htmlout .= "\n";
  • $htmlout .= "Bildabmessungen:\n";
  • $htmlout .= "\twidth:\t {$entry[$verzeichnis]['bildabmessungen'][0]}\n";
  • $htmlout .= "\theight:\t {$entry[$verzeichnis]['bildabmessungen'][1]}\n";
  • $htmlout .= "\n";
  • $htmlout .= "<a href=\"$path\">$path</a>\n";
  • $htmlout .= "</pre>\n";
  • }
  • return $htmlout;
  • }
  • #-------------------------------------------------------------------------------
  • $_liste = get_image_filenames('img/');
  • echo html_list_filename($_liste);
  • ?>
  • ~~~
  • Das lässt sich bestimmt alles noch viel hübscher schreiben. Mindestens für den Anfang würde ich aber auf jeden Fall von Kurzschreibweisen absehen!
  • Man könnte es als nächsts nun noch durch Error-Logging ergänzen, oder den berüchtigten Filter auf MIME-Types. Da getimagesize() hierfür schon sehr viele Informationen zur Verfügung stellt (im zweiten, bisher ungenutzten Parameter), würde ich dort ansetzen.
  • Bitte selber den/die Fehler suchen, der/die laut Highlighter noch drinstecken. Ich kann es jetzt so nicht testen.
  • Liebe Grüße
  • Tom S.
  • --
  • Es gibt nichts Gutes, außer man tut es!
  • Das Leben selbst ist der Sinn.

Mit PHP Bild-Daten aus einem Ordner auslesen

Ts rot TS
  • Mit PHP Bild-Daten aus einem Ordner auslesen
  • Hello,
  • sieht doch schon besser aus. Ein paar "Kleinigkeiten" sollten aber noch verbessert werden. :-)
  • Grundsätzlich solltest Du dich dazu durchringen, abgrenzbare Funktionen aus dem Code zu machen. Dann lassen sich die Fehler, notwenige Änderungen am Code, usw. besser zuordnen. Und auch anderenfalls sollten die "IF-Blöcke" auch immer das umschließen, was sie denn abfragen.
  • Beispiel: Wenn kein Handle für das Verzeichnis erstellt werden konnte, kann man auch keinen Kanal für dieses Handle wieder schließen. Es gibt ja keinen!
  • Und Variablen sollen das enthalten, was ihre Namen suggerieren. `$verzeichnis` ist daher ein irreführender Name. Du solltest z. B. lieber `$dateiname` dafür benutzen.
  • Ich ändere deshalb nicht grundsätzlich deinen Code, sondern sortiere ihn nur etwas.
  • ~~~php
  • <?php
  • function get_image_filenames($verzeichnis=false)
  • {
  • if ($verzeichnis === false) return false; ## Daisy-Chain-Skip
  • $verzeichnis = rtrim($verzeichnis, '/') . '/'; ## Normierung nach POSIX
  • $_liste = array();
  • if ($vhandle = opendir($verzeichnis))
  • {
  • while (false !== ($filename = readdir($vhandle)))
  • {
  • if (is_file($filename))
  • {
  • if (false !== ($imgsize = getImageSize($verzeichnis . $filename))) ## ist es ein Bild?
  • {
  • $_liste[$filename] = array(
  • 'name' => $filename,
  • 'pfad' => ($verzeichnis . $filename),
  • 'bildabmessungen' => $imgsize,
  • 'berechnungen' => 'berechnungen' ## Deine Baustelle?
  • );
  • }
  • }
  • }
  • ksort($entry, SORT_NATURAL | SORT_FLAG_CASE);
  • closedir($handle);
  • return $_liste
  • }
  • return $_liste
  • }
  • #-------------------------------------------------------------------------------
  • function html_list_filename($_liste=false)
  • if (($_liste === false) or (!is_array($_liste)) return false; ## Daisy-Chain-Skip
  • $htmlout = '';
  • foreach ($_liste as $filename => $_fileinfo)
  • {
  • $htmlout = "\n<pre>\n";
  • $htmlout .= "name:\t {$filename}\n";
  • $htmlout .= "\n";
  • $htmlout .= "pfad & name:\t {$_fileinfo[path]}\n";
  • $htmlout .= "\n";
  • $htmlout .= "Bildabmessungen:\n";
  • $htmlout .= "\twidth:\t {$entry[$verzeichnis]['bildabmessungen'][0]}\n";
  • $htmlout .= "\theight:\t {$entry[$verzeichnis]['bildabmessungen'][1]}\n";
  • $htmlout .= "\n";
  • $htmlout .= "<a href=\"$path\">$path</a>\n";
  • $htmlout .= "</pre>\n";
  • }
  • return $htmlout;
  • }
  • #-------------------------------------------------------------------------------
  • $_liste = get_image_filenames('img/');
  • echo html_list_filename($_liste);
  • ?>
  • ~~~
  • Das lässt sich bestimmt alles noch viel hübscher schreiben. Mindestens für den Anfang würde ich aber auf jeden Fall von Kurzschreibweisen absehen!
  • Man könnte es als nächsts nun noch durch Error-Logging ergänzen, oder den berüchtigten Filter auf MIME-Types. Da getimagesize() hierfür schon sehr viele Informationen zur Verfügung stellt (im zweiten, bisher ungenutzten Parameter), würde ich dort ansetzen.
  • Liebe Grüße
  • Tom S.
  • --
  • Es gibt nichts Gutes, außer man tut es!
  • Das Leben selbst ist der Sinn.