Stefan Einspender: Zufallslinkliste mit PHP oder SSI

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.

  1. 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

    --
    Ich bin ein Bandbreitenverschwender. Meine Signatur tut mir leid. Ehrlich!
    1. 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

      --
      bythewaythewebsuxgoofflineandenjoytheday
      1. 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

        --
        Ich bin ein Bandbreitenverschwender. Meine Signatur tut mir leid. Ehrlich!
        1. 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