Antworten auf deine Fragen:
Neues Thema erstellen

Antworten zum Thema „PHP, alle bilder eines Ordners ausgeben foreach erzeugt fehler.“

CanTk

Nicht mehr ganz neu hier

Code:
 <?php
				 
$dir = get_stylesheet_directory_uri()."/headerdiashow/";

foreach (glob($dir."*.jpg") as $filename){
    echo '<img src="'.$filename.'" width="992" height="373" alt="" >';
} 
?>


Soll in nem Wordpress Blog in einen Ordner im aktuellen Template gehen und von dort aus alle JPG auflisten. Erzeugt aber :


Invalid argument supplied for foreach() in <b>/www/htdocs/.../_sandbox/.../wp1/wp-content/themes/..../header.php</b> on line


Wo liegt der Fehler ?
Wenn ich einen normalen Pfad eingebe funktioniert alles. Wenn ich ein / vor den Pfad setze kommt auch wieder der Fehler. Mit dem von Wordpress generiertem Pfad gehts gar nicht.
Can
 

Duddle

Posting-Frequenz: 14µHz

AW: PHP, alle bilder eines Ordners ausgeben foreach erzeugt fehler.

Er meckert über ein fehlerhaftes Argument für foreach(). foreach() erwartet laut Handbuch ein Array. glob() hat als Rückgabewerte entweder ein leeres Array (keine Dateien gefunden), ein Array mit den Dateien, oder FALSE im Fehlerfall. Würde glob() ein leeres oder das korrekte Array zurückgeben, würde foreach() nicht meckern, also bleibt nur FALSE.

FALSE tritt im Fehlerfall auf. Ein Fehlerfall für Dateizugriffs-Funktionen ist in der Regel ein Verstoß gegen irgendeine Dateizugriffs-Regel. Ergo ist höchstwahrscheinlich der Pfad falsch.

Kurz: Lass dir den Pfad in $dir vor dem foreach() mal ausgeben. Der sollte nicht absolut sein, um o.g. Dateizugriffs-Regeln (Stichwort open_basedir) zu bewahren.


Duddle
 

CanTk

Nicht mehr ganz neu hier

AW: PHP, alle bilder eines Ordners ausgeben foreach erzeugt fehler.

Das echo sieht wie folgt aus:


Und das ist auch genau das wo die Bilder liegen.
Eigentlich hätte ich ja einfach den "wp-content/themes/themename/headerdiashow/"-Pfad als dir nehmen können, auf einer Unterseite klappt das allerdings nicht und sobald ich ein ein / vor das wp-content mache erscheint wieder der Fehler.
Bin in PHP nicht so der freak...^^ Danke für deine schnelle antwort.
Gruß can
 
Zuletzt bearbeitet:

mwxx

Nicht mehr ganz neu hier

AW: PHP, alle bilder eines Ordners ausgeben foreach erzeugt fehler.

Hast Du mal versucht, in einem Extraschritt vor foreach den Ausdruck glob($dir."*.jpg") zuerst in ein Array einzulesen und dann mit diesem die foreach-Schleife zu durchlaufen ?!
Das hätte den zusätzlichen Vorteil, dass Du vor dem Durchlaufen prüfen kannst, ob wirklich ein Array vorliegt und nur im Positivfall die Schleife durchläufst
 

Duddle

Posting-Frequenz: 14µHz

AW: PHP, alle bilder eines Ordners ausgeben foreach erzeugt fehler.

Das echo sieht wie folgt aus:

Und genau da liegt der Fehler. Du kannst schlecht auf die Dateien irgendeiner URL zugreifen. Das wäre eine recht große Sicherheitslücke. Ergo musst du entweder einen relativen Pfad angeben, oder eine Funktion suchen, die dir den richtigen lokalen Pfad gibt.


Duddle
 

CanTk

Nicht mehr ganz neu hier

AW: PHP, alle bilder eines Ordners ausgeben foreach erzeugt fehler.

Und genau da liegt der Fehler. Du kannst schlecht auf die Dateien irgendeiner URL zugreifen. Das wäre eine recht große Sicherheitslücke. Ergo musst du entweder einen relativen Pfad angeben, oder eine Funktion suchen, die dir den richtigen lokalen Pfad gibt.


Duddle

Klingt logisch ich beginne zu verstehen.
Dachte PHP würde es 'merken' wenn es sich bei der url um den eigenen Server handelt. Denkfehler.


Mit dem relativen Pfad klappt das einlesen sogar. Aber die Ausgabe haut ja nicht mehr hin. Hier müsste ich ja wieder die url nehmen.
Die definiere ich dann im $path

Code:
<?
$dir =   get_stylesheet_directory() . "/headerdiashow/";
$path = get_stylesheet_directory_uri();

foreach (glob($dir."*.jpg") as $filename){
    echo '<img src="'.$filename.'" width="" height="" alt="" >';
} 

?>

Also er soll im $dir nach den Bildern suchen sie aber mit dem Pfad von $path ausgeben. Das übersteigt meine mickrigen PHP Kenntnisse. Und ich wüsste nun auch nicht mehr nach was ich da Googlen muss.
Hättest du eine Idee ?

Gruß Can
 

Duddle

Posting-Frequenz: 14µHz

AW: PHP, alle bilder eines Ordners ausgeben foreach erzeugt fehler.

Falls ich das richtig verstehe, steht in $path irgendwas mit http://.. drin und in $dir der relative Pfad zu den Dateien, ja? Dann sollten ja die Pfade in $filename auch mit dem relativen Zeug beginnen. Falls das so ist, könntest du den Dateinamen ermitteln und dann den absoluten Pfad als Präfix hinzufügen:
PHP:
<?
$dir =   get_stylesheet_directory() . "/headerdiashow/";
$uriprefix = get_stylesheet_directory_uri()."/headerdiashow/";

foreach (glob($dir."*.jpg") as $filename){
    $base = basename($filename); // gibt für "/foo/headerdiashow/bar.jpg" nur bar.jpg zurück

    echo '<img src="'.$uriprefix.$base.'" width="" height="" alt="" >';
} 

?>

Dann steht in src der volle Pfad drin. Das "/headerdiashow/" könntest du dann auch parametrisieren, damit du es nicht wiederholen musst. Der obige Code funktioniert aber nur, falls die Bilder alle im gleichen Unterverzeichnis sind.


Duddle
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Keine Mitglieder online.

Statistik des Forums

Themen
175.158
Beiträge
2.581.869
Mitglieder
67.223
Neuestes Mitglied
Desiree
Oben