Antworten auf deine Fragen:
Neues Thema erstellen

Reihenfolge durcheinanderwürfeln

Duddle

Posting-Frequenz: 14µHz

AW: Reihenfolge durcheinanderwürfeln

Wenn du als Pfad eine URL angibst, will er die URL abgreifen. Natürlich kannst du nicht in jeder beliebigen URL die Unterordnerinhalte anzeigen lassen, ergo ist das der falsche Weg.

Du musst entweder relativ zum ausführenden Script eine Ebene runter gehen (d.h. glob("../bilder/usw"), aber das führt wieder zu Fehlern falls du das Script verschiebst) oder den absoluten Pfad auf dem Dateisystem des Servers angeben. Letzteren kannst du mit $_SERVER['DOCUMENT_ROOT'] ausgeben lassen, dort steht sozusagen der Basis-Pfad deiner Website. Konkret:

PHP:
$bilder = glob($_SERVER['DOCUMENT_ROOT']."/bilder/test/zufaelligebilderausgabe/*.jpg");
Das sollte funktionieren.


Duddle
 

odomanie

Noch nicht viel geschrieben

AW: Reihenfolge durcheinanderwürfeln

Vielen dank für die Hilfe. Leider funktioniert es noch nicht.

Ich habe den Code wie von die beschrieben abgeändert und nun lautet er wie folgt:

PHP:
<?php  

    $bilder = glob($_SERVER['DOCUMENT_ROOT']."/bilder/test/zufaelligebilderausgabe/*.jpg"); 
    $bild = array_rand($bilder, 2); 
    shuffle($bild); 
    foreach ($bild as $zufallsbild) 
        { 
            $bildinfo = getimagesize ($bilder[$zufallsbild]); 
            echo '<img src="' .$bilder[$zufallsbild]. '" ' .$bildinfo[3]. '" />' . "\n"; 
        } 
?>


Das Ergebnis ist unverändert, siehe HIER.

Die Bildinformationen werden ausgelesen, allerdings wird im falschen Verzeichnis nach den Bilder gesucht.

Jetzt sucht er die Bilder in:

PHP:
http://www.messer-portal.com/www/htdocs/w0082e85/bilder/test/zufaelligebilderausgabe/3.jpg

Hm. Schwierig schwierig.
 
Zuletzt bearbeitet:

cebito

undefined

AW: Reihenfolge durcheinanderwürfeln

Du benutzt Wordpress, dann nutze auch die Funktionen von Wordpress! Könnte dann so aussehen
PHP:
<?php glob(bloginfo( 'template_url' )."/bilder/test/zufaelligebilderausgabe/*.jpg"); ?>
 

odomanie

Noch nicht viel geschrieben

AW: Reihenfolge durcheinanderwürfeln

Hey cebito :)

danke für deine Hilfe!

Ich habe deine Codezeile eingesetzt und dabei ist folgendes herausgekommen.

PHP:
<?php  

    $bilder = glob(bloginfo( 'template_url' )."/bilder/test/zufaelligebilderausgabe/*.jpg"); 
    $bild = array_rand($bilder, 2); 
    shuffle($bild); 
    foreach ($bild as $zufallsbild) 
        { 
            $bildinfo = getimagesize ($bilder[$zufallsbild]); 
            echo '<img src="' .$bilder[$zufallsbild]. '" ' .$bildinfo[3]. '" />' . "\n"; 
        } 
?>

Ergebnis ist folgende Fehlermeldung:

Code:
http://www.messer-portal.com/wp-content/themes/complexity-2
Warning: array_rand() [function.array-rand]: First argument has to be an array in /www/htdocs/ ... /includes/runtime.php(42) : eval()’d code on line 6
Warning: shuffle() expects parameter 1 to be array, null given in /www/htdocs/ ... /includes/runtime.php(42) : eval()’d code on line 7
Warning: Invalid argument supplied for foreach() in /www/htdocs/ ... /includes/runtime.php(42) : eval()’d code on line 8



Müsste es nicht auch mit dem vorher verwendeten Code funktionieren?! egal ob es Wordpress ist oder nicht?
 

Duddle

Posting-Frequenz: 14µHz

AW: Reihenfolge durcheinanderwürfeln

Scheinbar hast du irgendwas aktiviert, dass URLs generell umschreibt (also http://www.. vorn anhängt). Zumindest sehe ich auf der Seite keinen relativen Link. Er findet ja die Bilder in meinem Code-Vorschlag, nur baut er dann noch die Domain an den Anfang.

Ich kenne mich mit Wordpress nicht genug aus, um dir die richtige Einstellung vorzuschlagen, deshalb kann ich nur eine gefrickelte, ungetestete Lösung anbieten:

PHP:
<?php  

    $bilderpfad = "bilder/test/zufaelligebilderausgabe/";
    $bilder = glob($_SERVER['DOCUMENT_ROOT']."/".$bilderpfad."*.jpg"); 
//$bilder enthält hier dann den absoluten Pfad zu den Dateien, bspw. /www/foo/.../bar/$bilderpfad/1.jpg
    $bild = array_rand($bilder, 2); 
    shuffle($bild); 
    foreach ($bild as $zufallsbild) 
        { 
            $bildinfo = getimagesize ($bilder[$zufallsbild]); 
//$bild-Dateinamen ermitteln, dort steht dann bspw. 1.jpg
	    $dateiname = basename($bilder[$zufallsbild]);
//relativen Pfad zusammenbauen
            $pfadZumBild = $bilderpfad.$dateiname;
            echo '<img src="' .$pfadZumBild. '" ' .$bildinfo[3]. '" />' . "\n"; 
        } 
?>

Es kann sein, dass du in $pfadZumBild vorn noch ein / anhängen musst, aber du wirst ja sehen was für Pfade Wordpress rauswirft.


Duddle
 

odomanie

Noch nicht viel geschrieben

AW: Reihenfolge durcheinanderwürfeln

Jechuuuu :)

du hast es geschafft! Danke!! :lol:

wie du schon vermutet hast fehlte in deinem code noch ein /, hier nun der vollständige & funktionierender code:

PHP:
<?php  

    $bilderpfad = "/bilder/test/zufaelligebilderausgabe/";
    $bilder = glob($_SERVER['DOCUMENT_ROOT']."/".$bilderpfad."*.jpg"); 
    $bild = array_rand($bilder, 2); 
    shuffle($bild); 
    foreach ($bild as $zufallsbild) 
        { 
            $bildinfo = getimagesize ($bilder[$zufallsbild]); 
//$bild-Dateinamen ermitteln, dort steht dann bspw. 1.jpg
        $dateiname = basename($bilder[$zufallsbild]);
//relativen Pfad zusammenbauen
            $pfadZumBild = $bilderpfad.$dateiname;
            echo '<img src="' .$pfadZumBild. '" ' .$bildinfo[3]. '" />' . "\n"; 
        } 
?>


Könnte man den jeweils zugehörigen Dateinamen (ohne Pfad und Dateiendung) mit ausgeben?

Vielleicht sowas in die Richtung?

name: bild2
bild2.jpg


name: bild3
bild3.jpg



vielleicht mittels:
PHP:
$filename = basename($filename); 
$filename = substr($filename, 0, strpos($filename, '.')); 
echo $filename;
 
Zuletzt bearbeitet:

Duddle

Posting-Frequenz: 14µHz

AW: Reihenfolge durcheinanderwürfeln

Siehe Kommentare zu basename():
Here is a quick way of fetching only the filename (without extension) regardless of what suffix the file has.

PHP:
<?php

// your file
$file = 'image.jpg';

$info = pathinfo($file);
$file_name =  basename($file,'.'.$info['extension']);

echo $file_name; // outputs 'image'

?>

Falls es immer .jpg-Dateien sind, kannst du das auch mit dem zweiten Argument von basename() machen.


Duddle
 

odomanie

Noch nicht viel geschrieben

AW: Reihenfolge durcheinanderwürfeln

Ok!

Für $file = 'image.jpg'; muss ich noch etwas anderes schreiben, oder? Bisher gibt er mir natürlich nur "image" als name aus :) dabei wäre es besser, wenn eben zu einem bild direkt davor der entsprechende name der datei steht. dies scheint mir schwierig zu sein, da man ja die bilder mischt.

PHP:
<?php  
    $file = 'image.jpg';
    $info = pathinfo($file);
    $file_name =  basename($file,'.'.$info['extension']);

    $bilderpfad = "/bilder/test/zufaelligebilderausgabe/";
    $bilder = glob($_SERVER['DOCUMENT_ROOT']."/".$bilderpfad."*.jpg"); 
    $bild = array_rand($bilder, 2); 
    shuffle($bild); 
    foreach ($bild as $zufallsbild) 
        { 
            $bildinfo = getimagesize ($bilder[$zufallsbild]); 
//$bild-Dateinamen ermitteln, dort steht dann bspw. 1.jpg
        $dateiname = basename($bilder[$zufallsbild]);
//relativen Pfad zusammenbauen
            $pfadZumBild = $bilderpfad.$dateiname;
            
            echo $file_name;
            echo '<img src="' .$pfadZumBild. '" ' .$bildinfo[3]. '" />' . "\n"; 
        } 
?>

Hier das ERGEBNIS.
 
Zuletzt bearbeitet:

odomanie

Noch nicht viel geschrieben

AW: Reihenfolge durcheinanderwürfeln

Jetzt habe ich es mir einfacher gemacht und nur echo $dateiname; beim auslesen ergänzt. Jetzt habe ich aber trotzdem noch das Problem, dass die Dateiendung dran hängt, also sieht es bisher wie folgt aus:

bild2.jpg
bild2.jpg


bild4.jpg
bild4.jpg


Ist es jetzt nicht möglich, einfach beim auslesen immer die letzten vier Zeichen (.jpg .gif .png etc.) nicht mit auszulesen? da der dateiname ja durchaus unterschiedlich lang sein kann (bildvoneinemelefanten.jpg oder bildvoneinerbanane.gif), kann man ja auch nicht von beginn des namens x zeichen zählen und dann kürzen, da dann der dateiname verstümmelt wird. Bin auf eure Antworten gespannt!

Hier noch der jetzt beschriebene Code:

PHP:
<?php  
    $bilderpfad = "/bilder/test/zufaelligebilderausgabe/";
    $bilder = glob($_SERVER['DOCUMENT_ROOT']."/".$bilderpfad."*.jpg"); 
    $bild = array_rand($bilder, 2); 
    shuffle($bild); 
    foreach ($bild as $zufallsbild) 
        { 
            $bildinfo = getimagesize ($bilder[$zufallsbild]); 
//$bild-Dateinamen ermitteln, dort steht dann bspw. 1.jpg
        $dateiname = basename($bilder[$zufallsbild]);
//relativen Pfad zusammenbauen
            $pfadZumBild = $bilderpfad.$dateiname;
            
            echo $dateiname;
            echo '<img src="' .$pfadZumBild. '" ' .$bildinfo[3]. '" />' . "\n"; 
        } 
?>

Und hier nochmal LIVE.
 

Duddle

Posting-Frequenz: 14µHz

AW: Reihenfolge durcheinanderwürfeln

Achso, ich dachte du kannst selber etwas PHP. Natürlich war das Code-Beispiel ein allgemeiner Fall, den du anpassen musst:

PHP:
<?php  
    $bilderpfad = "/bilder/test/zufaelligebilderausgabe/";
    $bilder = glob($_SERVER['DOCUMENT_ROOT']."/".$bilderpfad."*.jpg"); 
    $bild = array_rand($bilder, 2); 
    shuffle($bild); 
    foreach ($bild as $zufallsbild) 
        {
    
            $bildinfo = getimagesize ($bilder[$zufallsbild]); 
//$bild-Dateinamen ermitteln, dort steht dann bspw. 1.jpg
        $dateiname = basename($bilder[$zufallsbild]);
//relativen Pfad zusammenbauen
        $pfadZumBild = $bilderpfad.$dateiname;
   
        $info = pathinfo($bilder[$zufallsbild]);
        $file_name =  basename($bilder[$zufallsbild],'.'.$info['extension']);
         
            echo $file_name;
            echo '<img src="' .$pfadZumBild. '" ' .$bildinfo[3]. '" />' . "\n"; 
        } 
?>

So ungefähr, auch wenn das nicht wirklich sauber ist.


Duddle
 

odomanie

Noch nicht viel geschrieben

AW: Reihenfolge durcheinanderwürfeln

Super :) Vielen Dank!! Wie du schon richtig erkannt hast bin ich doch sehr unbeholfen, was php angeht...

So sieht das ERGEBNIS dann aus :) Sehr sehr schön!

In der Zeile ...

PHP:
$bilder = glob($_SERVER['DOCUMENT_ROOT']."/".$bilderpfad."*.jpg");

... legt man ja fest, dass nur jpg's aus dem verzeichnis eingelesen werden sollen. wie könnte man die zeile erweitern, wenn man auch gif's & png's einlesen möchte?


Viele Grüße,
odomanie
 

Duddle

Posting-Frequenz: 14µHz

AW: Reihenfolge durcheinanderwürfeln

Eine Möglichkeit wäre
PHP:
 $bilder = glob($_SERVER['DOCUMENT_ROOT']."/".$bilderpfad."*.{jpg,png,gif}", GLOB_BRACE);
Das expandiert die Einträge in geschweiften Klammern als eine Art Oder-Verknüpfung. Aber das achtet auf die Groß-/Kleinschreibung, ist also nicht elegant bei beliebigen Dateinamen.
Eine zweite Möglichkeit wäre
PHP:
 $bilder = glob($_SERVER['DOCUMENT_ROOT']."/".$bilderpfad."*");
Das erwischt schlichtweg alle Dateien im angegebenen Pfad. Das ist offensichtlich problematisch bei nicht-Bilddateien, andererseits findet es aber sofort auch 1.Jpg und 2.jpEG usw.

Natürlich gibt es noch bessere Lösungen, aber dazu müsste der Code noch weiter umgeschrieben werden.


Duddle
 

odomanie

Noch nicht viel geschrieben

AW: Reihenfolge durcheinanderwürfeln

Und mal wieder spitzenmäßig!

Was würde denn ein besserer Code bedeuten? Schnellere Ladezeiten... ?!

Der Code scheint mir auch die bessere Alternative zu sein. Gerade da die Schreibweise oft unterschiedlich ist.

PHP:
$bilder = glob($_SERVER['DOCUMENT_ROOT']."/".$bilderpfad."*");

Habe testweise jeweils ein png und gif-file mit ins verzeichnis gepackt. Das Ergebnis ist wieder HIER zu sehen.

Odomanie
 

AxelM

Nicht mehr ganz neu hier

AW: Reihenfolge durcheinanderwürfeln

Um das Script noch ein wenig abzusichern könntest du noch folgendes tun:

Das
PHP:
  $file_name =  basename($bilder[$zufallsbild],'.'.$info['extension']);
    echo $file_name;
    echo '<img src="' .$pfadZumBild. '" ' .$bildinfo[3]. '" />' . "\n";
  }
mit
PHP:
  if(getimagesize($bilder[$zufallsbild]))
  {
     $file_name =  basename($bilder[$zufallsbild],'.'.$info['extension']);
       echo $file_name;
       echo '<img src="' .$pfadZumBild. '" ' .$bildinfo[3]. '" />' . "\n";
     }
  }

umschließen.
Damit sicherst du ab, dass auch wirklich nur Bilder gezeigt werden.
 

odomanie

Noch nicht viel geschrieben

AW: Reihenfolge durcheinanderwürfeln

Vielen Dank für deine Hilfe AxelM! :)

Um also nochmal zusammen zu fassen, hier der vollständige Code:

PHP:
<?php  
    $bilderpfad = "/bilder/test/zufaelligebilderausgabe/";
    $bilder = glob($_SERVER['DOCUMENT_ROOT']."/".$bilderpfad."*");
    $bild = array_rand($bilder, 2); 
    shuffle($bild); 
    foreach ($bild as $zufallsbild) 
        {
    
            $bildinfo = getimagesize ($bilder[$zufallsbild]); 
//$bild-Dateinamen ermitteln, dort steht dann bspw. 1.jpg
        $dateiname = basename($bilder[$zufallsbild]);
//relativen Pfad zusammenbauen
        $pfadZumBild = $bilderpfad.$dateiname;
   
        $info = pathinfo($bilder[$zufallsbild]);
       
if(getimagesize($bilder[$zufallsbild]))
  {
     $file_name =  basename($bilder[$zufallsbild],'.'.$info['extension']);
       echo $file_name;
       echo '<img src="' .$pfadZumBild. '" ' .$bildinfo[3]. '" />' . "\n";
     }
  }
?>

Wie könnte man die Ausgabe wie folgt auslesen?

zufallsbild1 zufallsbild2 ... zufallsbildx (also nach dem x'ten Bild einen zeilenumbruch)
zufallsbildx+1 ... (und wieder nach dem x'ten Bild einen Zeilenumbruch usw.)


Grüße aus dem Norden,
Odomanie
 
Zuletzt bearbeitet:

odomanie

Noch nicht viel geschrieben

AW: Reihenfolge durcheinanderwürfeln

Also ich bin jetzt soweit, dass man mit

PHP:
(zaehler % 4)==0

in der foreach schleife einen zähler mitlaufen lassen müsste, um zu prüfen, ob der wert durch zum beispiel 4 teilbar ist und erst dann soll ein zeilenumbruch eingeleitet werden.

Nun ist die Frage, wie ich es in den obigen code einbinden kann. hat jemand einen vorschlag?!

viele grüße,
odomanie
 

Duddle

Posting-Frequenz: 14µHz

AW: Reihenfolge durcheinanderwürfeln

Off-Topic Vorschlag: Du solltest dir die Grundlagen von PHP aneignen, wenn du regelmässig damit arbeitest. Dann musst du nicht ständig bei trivialen Problemen im Forum fragen.





Duddle
 

cebito

undefined

AW: Reihenfolge durcheinanderwürfeln

Off-Topic Vorschlag: Du solltest dir die Grundlagen von PHP aneignen, wenn du regelmässig damit arbeitest. Dann musst du nicht ständig bei trivialen Problemen im Forum fragen.





Duddle

Dito, aber davon abgesehen

Also ich bin jetzt soweit, dass man mit

PHP:
(zaehler % 4)==0
in der foreach schleife einen zähler mitlaufen lassen müsste, um zu prüfen, ob der wert durch zum beispiel 4 teilbar ist und erst dann soll ein zeilenumbruch eingeleitet werden.

Nun ist die Frage, wie ich es in den obigen code einbinden kann. hat jemand einen vorschlag?!

viele grüße,
odomanie
sollte die Darstellung mittels CSS geregelt werden :nth-child()
 

odomanie

Noch nicht viel geschrieben

AW: Reihenfolge durcheinanderwürfeln

So!

Jetzt habe ich es!!

PHP:
<?php  
    $bilderpfad = "/bilder/test/zufaelligebilderausgabe/";
    $bilder = glob($_SERVER['DOCUMENT_ROOT']."/".$bilderpfad."*");
    $bild = array_rand($bilder, 5); 
    shuffle($bild);
    $zaehler = 0;  
    foreach ($bild as $zufallsbild) 
        {
    
            $bildinfo = getimagesize ($bilder[$zufallsbild]); 
//$bild-Dateinamen ermitteln, dort steht dann bspw. 1.jpg
        $dateiname = basename($bilder[$zufallsbild]);
//relativen Pfad zusammenbauen
        $pfadZumBild = $bilderpfad.$dateiname;
   
        $info = pathinfo($bilder[$zufallsbild]);
       
if(getimagesize($bilder[$zufallsbild]))
  {
     $file_name =  basename($bilder[$zufallsbild],'.'.$info['extension']);
       echo $file_name;
       echo '<img src="' .$pfadZumBild. '" ' .$bildinfo[3]. '" />' . " ";
     $zaehler++; 
    if (($zaehler % 2) == 0) {  
        echo '<br />\n'; 
    }
} 
}  
?>


:D
 
Zuletzt bearbeitet:
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

Statistik des Forums

Themen
118.565
Beiträge
1.538.067
Mitglieder
67.488
Neuestes Mitglied
Andrew56524
Oben