Übergabe Dateinummer der Audio im Link/Text an Arrey oder Variable für Wiedergabe der Audiodatei

romacasa

Grünschnabel
Hallo.
Ich arbeite an einer Webseite. in dieser Audiodateien gelistet werden (sehr viele - derweilen an die 300). Der Besucher soll im Inhaltsverzeichnis nachschauen, was er hören will. Ein klick - auf Button? auf Link? - soll eine Seite aufrufen, in der man die Audiodatei anhören und ebenso downloaden kann. (Ja, ich weiss Jeder Browser kann dies von Haus aus, ohne dass ich eine Webseite erstelle, aber schön ist diese Lösung nicht gerade. Zumal soll später andere Funktion(en) ergänzt werden - dies nur nebenbei.)

Meine Vorstellung ist: Benutzer klickt; die Dateinummer der Audiodatei (Beispiel 321_01.mp3) wird in eine Variable übergeben. Dann wird die Wiedergabe-Webseite aufgerufen, Variable ausgelesen und dem Player und dem Downloadlink übergeben. Falls ich ein Auslesen des Audioverzeichnis für die Überprüfung der vorhandene oder nichtvorhandene Datei brauche, dies habe ich bewerkstelligt. Nun stehe ich auf dem Schlauch, wie ich das andere umsetzen soll. Wäre ein Vorteil, wenn später noch was dazu kommt. Anfänglich hatte ich für JEDE Audiodatei eine eigene Wiedergabe-WEBSEITE geplant. Aber dies muss einfacher möglich sein. Ein Multiplayer geht nicht, da die Audios KEINE Infos IN SICH TRAGEN, wie bei mp3 normalerweise der Fall ist. Der Besucher würde nur die Nummer sehen. Die Zeit habe ich auch nicht, alles anzuhören und zu katalogisieren.... Schön wäre auch ein Overlayout (Modal).

Meine Kenntnisse sind Anfängerbereich. Ich kann ein Formular programieren, was schon mein grösstes Projekt war - inkl. Schutz.


Herzlichen Dank
Mit freundlichen Grüßen
Romano Casnaova
 

m.scatello

Erfahrenes Mitglied
So etwas ähnliches habe ich vor nicht allzu langer Zeit mal gebastelt, hier die Quick&Dirty-Version:

index.php
PHP:
<!DOCTYPE html>
<html>
  <head>
    <title>MP3-Files</title>
  </head>
  <body>
  <h2>Liste vorhandener MP3-Files:</h2>
  <table>
<?php
   $files = glob("mp3/*.mp3");
  
   sort($files);
  
   foreach ($files as $file)
     echo "<tr>
            <td>" . basename($file) . "</td>
            <td><a href='more.php?file=" . urlencode(basename($file)) . "'>Mehr...</td>
           </tr>\n";
?>
  </table> 
  </body>
</html>
more.php
PHP:
<?php

   $file = urldecode($_GET['file']);
?>
<!DOCTYPE html>
<html>
  <head>
    <title><?php echo $file; ?></title>
  </head>
  <body>
  <h2><?php echo $file; ?></h2>
  <audio controls>
    <source src="mp3/<?php echo $file; ?>" type="audio/mpeg">
    Your browser does not support the audio element.
  </audio>
  Download: <a href="download.php?file=<?php echo urlencode(basename($file)); ?>">Klick mich</a>
 </body>
</html>
download.php
PHP:
<?php
    $file = urldecode($_GET['file']);
    
    header("Content-Type: audio/mpeg");
    header("Content-Disposition: attachment; filename=\"mp3/$file\"");
    readfile($file);
?>

Verschönern und weitere Funktionen einbauen muss du selber machen, denn meine Vollversion poste ich hier nicht, wäre auch zu lang.
 

romacasa

Grünschnabel
So etwas ähnliches habe ich vor nicht allzu langer Zeit mal gebastelt, hier die Quick&Dirty-Version:

index.php
PHP:
<!DOCTYPE html>
<html>
  <head>
    <title>MP3-Files</title>
  </head>
  <body>
  <h2>Liste vorhandener MP3-Files:</h2>
  <table>
<?php
   $files = glob("mp3/*.mp3");
 
   sort($files);
 
   foreach ($files as $file)
     echo "<tr>
            <td>" . basename($file) . "</td>
            <td><a href='more.php?file=" . urlencode(basename($file)) . "'>Mehr...</td>
           </tr>\n";
?>
  </table>
  </body>
</html>
more.php
PHP:
<?php

   $file = urldecode($_GET['file']);
?>
<!DOCTYPE html>
<html>
  <head>
    <title><?php echo $file; ?></title>
  </head>
  <body>
  <h2><?php echo $file; ?></h2>
  <audio controls>
    <source src="mp3/<?php echo $file; ?>" type="audio/mpeg">
    Your browser does not support the audio element.
  </audio>
  Download: <a href="download.php?file=<?php echo urlencode(basename($file)); ?>">Klick mich</a>
</body>
</html>
download.php
PHP:
<?php
    $file = urldecode($_GET['file']);
   
    header("Content-Type: audio/mpeg");
    header("Content-Disposition: attachment; filename=\"mp3/$file\"");
    readfile($file);
?>

Verschönern und weitere Funktionen einbauen muss du selber machen, denn meine Vollversion poste ich hier nicht, wäre auch zu lang.
Ja, danke. Würde sonst nichts lernen, wenn ich alles vorgekaut bekommen täte, oder? Werde es nun m,al versuchen.....
 

m.scatello

Erfahrenes Mitglied

romacasa

Grünschnabel
Herzlichen Dank für eure hilfe.

@m.scatello hier habe ich nun meinen Code. Du siehst, hab mich bemüht. Der Code liesst das Audioverzeichnis aus, bereinigt, vergleicht dessen Inhalt mit dem Inhaltsverzeichnis und bildet anhand der Anzahl von mp3 Dateien im Audioverzeichnis das Inhaltsverzeichnis für den Benutzer, als link umgewandelt.

Wass ich aber noch möchte ist, dass 1. Wenn im Audio-Verzeichnis eine Datei da ist, die nicht im Inhaltsverzeichnis ist, dass eine Datei erstellt wird, in dieser die Nummer der mp3 notiert wird. Damit weiss der Admin, dass man hier eine Datei hat, die zu ergänzen ist. Ebenso 2. wenn im Inhaltsverzeichnis einen Eintrag steht, der NICHT im Audioverzeichnis ist. Funktioniert dies ähnlich, wie ich es bereits gemacht habe? Was ich gerade lerne ist, Datei anlegen, und schreiben....

Das wichtigste ist: Schutz gegen Manipulation und Hack. Reicht dies so, oder muss ich hier noch was beachten?
HTML folgt noch......

Danke und ein gutes neues Jahr allen.
PHP:
<?php
// arrays und variablen def mit inhalt oder leer
    $ordner = 'audios';
    $ergebnis = array();
  
  
// Ordner auslesen und inhalt in Variable speichern

    $audio = scandir($ordner);  

// ordnerangaben (..) und (.), (.mp3) entfernen
    $audio = array_diff($audio, array('..', '.',));
  
    foreach ($audio as $naudio) {
        $audios = substr($naudio, 0, -4);
        $audionew[] = $audios;
    }
  
  
// Einlesen des Inhaltsverzeichnisses und sortieren

    $inhverz = file("inh.txt");
    sort($inhverz, SORT_NATURAL);
  
// Abgleich mit Ordner und erstellung Inhaltsverzeichnis

    if (!empty($audio)) {

            foreach ($inhverz as $gueltig) {
                foreach ($audionew as $wert) {
              
                    if (strpos( $gueltig , $wert)){

                        echo "<a href='more.php?file=" . urlencode($wert) . "'>" . basename($gueltig) . "</a><br/>";      
                    }
                }
      
            }  
      
    }     else {
        echo "Die Audiodateien scheinen nicht vorhanden zu sein!";
    }
?>
 

m.scatello

Erfahrenes Mitglied
Deine beiden foreach-Schleifen kann man optimieren, man braucht nur eine Schleife. Siehe dazu PHP: in_array - Manual dann brauchst du die innere Schleife nicht mehr.

Die Audio-Dateien kann du auf zwei Wegen Schützen:
Das Verzeichnis mit einem Passwort-Schutz versehen
Das Verzeichnis außerhalb von Document-Root ablegen, damit man nicht per http an die Dateien kommt
 
Zuletzt bearbeitet:

romacasa

Grünschnabel
@m.scatello Danke. Habe das mit dem in_array angeschaut und im Prinzip (so, wie auf php.de beschrieben) auch verstanden. Doch bei mir hängt irgendwas in der Umsetzung. Bekomme nur eine weisse Seite und Err_Reports einschalten bring auch nur eine weisse Seite (leeren Browser).

Noch eine Frage zu der Bearbeitung von Arrays, die danach in ein in ein neues array gespeichert werden. Ich habe den Code folgendermassen geändert:

PHP:
if (strpos( $gueltig , $wert)){

    $ausgabe[] = array("<a href='more.php?file=" . urlencode($wert) . "'>" . basename($gueltig) . "</a><br/>");           
}
Dies soll deswegen sein, dass nicht das ganze HTML im Code, sondern nur die php-Ausgabe im HTML-Bereich stehen soll - der besseren Übersicht wegen - so nebenbei. Die Ausgabe des array mittels print_r ergibt:

PHP:
Array
(
    [0] => Array
        (
            [0] => <a href='more.php?file=331_01'>text Inhaltzverzeichnis...
</a><br/>
        )

    [1] => Array
        (
            [0] => <a href='more.php?file=324_02'>text Inhaltzverzeichnis...
</a><br/>
        )
etc.

Wenn ich dies richtig sehe, dann ist dies ein Array innerhalb eines Array, also multidimensional.

Was mache ich bei der Übergabe falsch? Oder: mache ich was falsch?

Danke der Hilfe.


Mit freundlichen Grüßen Romano
 

romacasa

Grünschnabel
@m.scatello Ok.... Ich denke........ Hmmmmmm......:unsure:



hier, was im inh.txt steht:

Begegnung verwandelt -- Nr. 449_02 - Donnerstag 16.05.2002 - Ort: Eisenstadt/Bründlfeld
Begegnung verwandelt -- Nr. 465_03 - Freitag 13.12.2002 - Ort: Pfarre Herz Maria
Bereitet dem Herrn den Weg -- Nr. 413_02 - Sonntag 10.12.2000 - Ort: Maria Neustift
Bereit für die Begegnung mit Jesus -- Nr. 334_01 - Sonntag 09.08.1998 - Ort: Haus des Friedens, Katzelsdorf
 
Zuletzt bearbeitet:

Neue Beiträge