Zufallslinkliste mit PHP oder SSI
Stefan Einspender
- programmiertechnik
Hallo ForumsleserInnen,
wie kann ich so etwas wie auf der SELFHTML Downloadseite realisieren,
siehe http://aktuell.de.selfhtml.org/extras/download.shtml#a1, aller-
dings habe ich nur PHP und SSI zur Verfügung. Kann mir da jemand
einen Tipp geben, wie ich dieses Ziel erreiche?
Viele Grüße,
Stefan
PS: Wer es nicht weiß, auf der Downloadseite werden aus einer Text-
datei nach dem Zufallsprinzip zehn Links ausgewählt und dem Be-
sucher als Downloadadressen für SELFHTML angezeigt.
Hallo Stefan,
wie kann ich so etwas wie auf der SELFHTML Downloadseite realisieren,
siehe http://aktuell.de.selfhtml.org/extras/download.shtml#a1, aller-
dings habe ich nur PHP und SSI zur Verfügung. Kann mir da jemand
einen Tipp geben, wie ich dieses Ziel erreiche?
Damit sollte es klappen:
<?php
// lese Dateien aus
$dateien = file ('dateiliste.txt');
$anz_dateien = count ($dateien);
// anzahl an gewollten Dateien
$anz_gewollt = 5;
// zu wenig dateien verfügbar?
if ($anz_gewollt >= $anz_dateien) {
// einfach alle dateien nehmen
for ($i = 0; $i < $anz_dateien; $i++) {
// gut - "zufallszahlen" passt hier nicht
$zufallszahlen[] = $i;
}
} else {
$zufallszahlen = array ();
// solange wir noch nicht alle zufallszahlen haben
while (count ($zufallszahlen) < $anz_gewollt) {
// schleife zum erzeugen einer eindeutigen zufallszahl
do {
$zahl = mt_rand (0, $anz_dateien-1);
} while (in_array ($zahl, $zufallszahlen));
// eindeutige zufallszahl hinzufügen
$zufallszahlen[] = $zahl;
}
}
// Ausgabe
foreach ($zufallszahlen as $zahl) {
// trim entfernt das Neuezeile-Zeichen am Ende des Dateinamens,
// das mit file() reinkommt
echo trim ($dateien[$zahl]).'<br>';
}
?>
Die Datei dateiliste.txt sollte am Ende genau _einen_ Umbruch, aber _keine_ Leerzeile enthalten.
Statt Dateien kannst Du natürlich auch URLs oder sonstwas verwenden, das ist nur ein Beispiel.
Ob das auch mit SSI geht, weiß ich allerdings nicht.
Viele Grüße,
Christian
Huhu Christian
das kann man noch etwas kürzer machen
<?php
// lese Dateien aus
$dateien = file ('dateiliste.txt');
// anzahl an gewollten Dateien
$anz_gewollt = 5;
shuffle($dateien);
$part = array_slice ($dateien, 0, $anz_gewollt);
foreach ($part as $p) {
echo trim ($p). '<br>';
}
?>
Viele Grüße
lulu
Hallo lulu,
das kann man noch etwas kürzer machen
Ich muss zu meiner Verteidigung gestehen, dass ich shuffle nicht kannte. ;-)
Viele Grüße,
Christian
Hallo lulu & Christian,
...
danke schonmal für die beiden Vorschläge, schaue ich mir morgen mal
genauer an. Nur mit SSI habe ich ohnehin vermutet, keine Lösung zu
finden, die wirklich praktikabel ist.
Viele Grüße,
Stefan