Re:
...Nachdem ich aber die 'teaserrandom.php' in die 'index.php' eingebunden hatte, musste ich mit Erstaunen feststellen, dass 'teaserrandom.php' nicht einmal mehr die Bilder im eigenen Verzeichnis finden konnte. Hatte dafür das Verzeichnis einnmal mit
$handler = opendir('.');
und testweise mit$handler = opendir(__DIR__);
angegeben. Selbst der Cookie, der ja ursprünglich nur für das Verzeichnis 'media' gelten sollte, verlor seinen Sinn. Das gültige Verzeichnis für ihn war, nach dem include, nicht mehr '/media', sondern '/'. Also war meine Überlegung: Wenn alles nach dem include vom Hauptverzeichnis ausgeht, kann ich meine Struktur gleich so ändern:/
|
|-- php
| |
| |- teaserrandom.php
|- andere "PHP-Geschichten" (z.B. formmailer) | |-- media | | | |- 0.jpg | |- 1.jpg | |- 2.jpg |
- usw.
|
`- index.phpHatte dann für
opendir()
folgendes verwendet:$handler = opendir($_SERVER['DOCUMENT_ROOT']. '/media');
. So funktioniert es. Wobei mir Deine Ideen bezügl. der 'teaserrandom.php' (im gleichen Verzeichnis wie die Bilder) und des Cookies (nur für Verzeichnis '/media' gültig) absolut sympathisch sind.
Na dann machen wir jetzt mal Nägel mit Köpfen:
Ich hatte Dir ein völlig anderes Konzept, da ja Dein Lieblingswort Effizienz ist, vorgeschlagen, was jetzt umgesetzt wird. (Punkt) Vergiss include()!
Aus der index.php wird, soweit nicht andere Verarbeitungen mittels PHP vorzunehmen sind, ein ganz normals HTML-Dokument Namens index.xhtml. In dieser wird der Verweis im Objekt hart codiert:
<object data="php/teaserrandom.php" type="image/svg+xml" id="footerbg">
<param name="src" value="php/teaserrandom.php" />
</object>
Wobei wir eh nur von JPEG-Bildern reden, also reicht ein einfaches <img src="php/teaserrandom.php" alt="Zufallsbild"/>
.
teaserrandom.php könnte nunmehr seine Kekse fürs Verzeichnis /php verteilen, was aber genauso effizient wie auch nebensächlich ist. Dein o. g. Gliederung des Webs ist nicht auf diese spezifische Aufgabe, cookies effizient zu setzen, ausgerichtet. (Das ließe sich bspw. mit mod_rewrite gerade rücken. Aber alles zu seiner Zeit.)
Seinerseits wird in teaserrandom.php das Verzeichnis /media dann so ausgelesen und die Bilder direkt ausgeben:
# Header vorangesetzt
header('Content-Type: image/jpeg');
$handler=opendir('../media');
while (($dateien = readdir($handler))!==false) {
if(in_array(substr($dateien,-4),array('.jpg','jpeg','.jpe'))){
$array[] = $dateien;
}
}
closedir($handler);
# Weiter geht es dann mit
$zufall=array_rand($auswahl, 1);
if(!isset($_COOKIE['teaser'])){
setcookie('teaser', $zufall, 0);
$file='../media/'.$auswahl[$zufall];
}
else{
$file='../media/'.$auswahl[$_COOKIE['teaser']];
}
# Größe noch dem Browser mitgeteilt
header('Content-Length: '.filesize($file));
# Inhalt ausgeben
readfile($file);
Mehr ist es letztendlich gar nicht. Wenn Du es soweit zum laufen gebracht hast, können wir uns dann nochmals um die Effizienz der Kekse kümmern.
Gruß aus Berlin!
eddi