Fehler bei Array-Erstellung

schniggy

Mitglied
Hallo Gemeinde,

ich habe vor, für ein CMS ein Modul zu erstellen, welches ein Zufallsbild aus einem Ordner auswirft.
Das Verzeichnis wird ausgelesen, soweit klappt es - dann scheint es an der Zusammenstellung des Arrays zu hapern da folgende Fehlermeldung erscheint:
Warning: array_rand(): First argument has to be an array in /opt/lampp/htdocs/projekte/mosakk/modules/mod_spreadshirt.php on line 26
welche folgendes beinhaltet: (Zeile 26 ist die unterste, es liegt aber mit Sicherheit an den verherigen Zeilen,..
PHP:
$dir = opendir("$verzeichnis");
while (($file = readdir($dir)) != false) {
    if (preg_match("/^index/", $file)) continue;
    if (preg_match("/..?$/", $file)) continue;
    foreach($array_types as $typ) {
         if (preg_match("/.".$typ."$/i", $file)) $dateien[] = $file;
    };
};

$zufall = array_rand($dateien);

Das Script habe ich aus dem Netz, klagen darüber sind keine vorhanden, der Ordner beinhaltet lediglich *.gif-Dateien - andere Scripte habe ich ebenfalls probiert-gleiche Fehlermeldung,..!

Weiss jemand einen hilfreichen Rat? Vielen Dank!
 
Code:
if (preg_match("/..?$/", $file))
Dieser Ausdruck sucht nach einem beliebigen Zeichen, gefolgt von 0 oder 1 beliebigen Zeichen.
Da er immer zutrifft, wird der Rest der Schleife nicht weiter berücksichtigt... somit wird der Array nicht gefüllt(welchen du auch nirgends erzeugt hast).

Wenn du in RegExp einen Punkt verwenden willst, musst du ein Backslash davor setzen... ansonsten bedeutet er: beliebiges Zeichen
 
Das Array habe ich vorher schon erstellt, wollte nur nicht den ganzen Code abdrucken, aber hier meine Änderung:
PHP:
einmal die Array-Erstellung, 
$verzeichnis = "/opt/lampp/htdocs/projekte/mosakk/images/spreadshirt/";
$array_types = array('jpg' , 'png', 'gif');

dann folgt o.a. Schnipsel mit folgender Änderung:
if (preg_match("/\.\.?$/", $file)) continue;
(habe ich hoffentlich richtig gedeutet,...) - kommt auch keine Meldung mehr, ein Bild zeigt er aber auch nicht,...
 
Ich seh da auch nicht, wo du etwas ausgibst.... array_rand() liefert lediglich einen zufälligen Schlüssel eines Arrays.
Wenn du ein zufälliges Element ausgeben willst, dann bspw. so:
Code:
echo @$dateien[array_rand($dateien)];
Wenn dann nix ausgegeben wird, ist halt nix im Array drinnen.
 
Schon klar! Das kommt ja dann später - Hier mal der ganze Code:
PHP:
<?php
$verzeichnis = "/opt/lampp/htdocs/projekte/mosakk/images/spreadshirt/";
$array_types = array('jpg' , 'png', 'gif');

$dir = opendir("$verzeichnis");
while (($file = readdir($dir)) != false) {
    if (preg_match("/^index/", $file)) continue;
  if (preg_match("/\.\.?$/", $file)) continue;
    foreach($array_types as $typ) {
    if (preg_match("/.".$typ."$/i", $file)) $dateien[] = $file;
    };
};

$zufall = array_rand($dateien);
$bild = "$dateien[$zufall]";

$size = getimagesize("$verzeichnis"."$bild");
$breite = $size[0];
$hoehe = $size[1];
echo "<img src=\"$verzeichnis$bild\" width=\"$breite\" height=\"$hoehe\" border=\"0\">";
?>

Angesprochener Ordner ist gfüllt mit einigen Grafiken im gif-Format, sollte also etwas ausgeben!
 
Dann sind vielleicht keine Bilder in dem Verzeichnis?
Hab deinen Code mal kurz ausprobiert... funktioniert bei mir prima(wenn Bilder im Verzeichnis sind).

Vielleicht liegts auch am Pfad...der Server-Root-Pfad ist nicht identisch mit dm Dokument-Root-Pfad.

Bei der Ausgabe wird bei dir folgendes Verzeichnis vorausgesetzt, worin sich die Bilder Befinden:
Code:
http://[hostname]/opt/lampp/htdocs/projekte/mosakk/images/spreadshirt/
befinden sich dort die Bilder?...bestimmt nicht... bei der Angabe des Pfades zum Bild musst du das opt/lampp/htdocs/ weglassen.(nehme ich an)
 
Doch, doch - dort sind die Bilder drinne:

file:/opt/lampp/htdocs/projekte/mosakk/images/spreadshirt zeigt mir mein Konqueror an und darin befinden sich etliche Bilder.

Nutze ich:
http://localhost/mosakk/images/spreadshirt/
oder andere Konstellationen bekomme ich gleich einen opendir-Fehler angezeigt - online funktioniert das ganze auch nicht - liegts an der 4.3.10-Version-kann ich mir aber nicht vorstellen,...!
 
Der Pfad zum Auslesen des Verzeichnisses mag stimmen.... der Pfad bei der Anzeige des Bildes jedoch nicht.

Das eine ist eine Operation im Dateisystem... das andere eine über das HTTP-Protokoll.
Die Root-Pfade unterscheiden sich da.
 
Gut, ich werde jetzt mal online sowie local alle möglichen Konstellationen durchgehen bis sich was tut,...!

Danke Dir für deine Hife, wenn sich was ergeben hat, werd ichs posten - vielen Dank!


EDIT->Nein, ich komm ums verre**** nicht weiter! Selbst wenn ich die Grafiken im selben Verzeichnis liegen habe oder das Verzeichnis im Ordner der Datei liegt - immer wieder derselbe Fehler!
 
Zuletzt bearbeitet:
Zurück