IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

PHP, gestion de fichier : chemin relatif, url, etc..


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 29
    Par défaut PHP, gestion de fichier : chemin relatif, url, etc..
    Je tente depuis quelques jours de mettre en place un petit système PHP, me permettant de lister mes MP3s dans divers dossiers, et de les écouter en streaming via un player flash.

    Mon problème réside dans le fait que je n'arrive pas à lire des MP3 lorsque je passe le chemin complet d'un MP3 à l'objet player :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	$mp3 = "D:/Musiques/another_world.mp3";
     
    	echo '<object type="application/x-shockwave-flash" data="dewplayer.swf?mp3=' . $mp3 .'" width="200" height="20">';
    	echo '<param name="movie" value="dewplayer.swf?mp3=' . $mp3 .'" />';
    	echo '</object>';
    Pour info, lorsque je passe en paramètre le chemin d'un fichier mp3, se trouvant dans l'arborescence du site Web, cela fonctionne correctement.

    La question est donc, comment modifier la configuration apache, afin de permettre la lecture des mes fichiers qui ne font pas partie du site Web?
    Existe-t-il une solution pour contourner se problème?
    Je pense que cela doit exister, tel que le fait l'application Weezo, utilisant un serveur apache pour permettre le streaming multimédia, avec le paramètrage des dossiers conteneur de médias.

  2. #2
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 2
    Par défaut
    Bonjour
    Il n'est pas possible (simplement) d'accéder directement à des fichiers hors du document root.
    La solution est de faire pointer le lecteur flash non pas vers le mp3, mais vers un fichier php qui lui va retourner le mp3 choisi :

    header('Content-Type: audio/mpeg');
    echo file_get_contents('c:/mon_mp3.mp3');

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 29
    Par défaut
    Donc effectivement en utilisant cette méthode cela fonctionne nettement mieux. J'ai donc réalisé une nouvelle page "mp3.php" avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    	header('Content-Type: audio/mpeg');
    	$mp3 = "D:/Musiques/another_world.mp3";
    	echo file_get_contents($mp3);
    ?>
    et modifié l'appel au player de la sorte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	$mp3 = "./mp3.php";
     
    	echo '<object type="application/x-shockwave-flash" data="dewplayer.swf?mp3=' . $mp3 .'" width="200" height="20">';
    	echo '<param name="movie" value="dewplayer.swf?mp3=' . $mp3 .'" />';
    	echo '</object>';
    Maintenant, j'ai des problèmes plus liés à la compatibilité du player sur le navigateur Web de la wii, car la méthode ne fonctionne pas dessus, en lien direct c'est ok, mais par le file_get_contents, ça ne fonctionne pas dessus. Je vais essayer de trouver un player compatible.

    Merci encore.

  4. #4
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 2
    Par défaut
    Ca doit marcher, il n'y a pas de raison (enfin si le même mp3 marche en le mettant dans le document root).

    C'est peut être un problème de headers. Dans Weezo il y a ça en plus :

    header('X-Powered-By:'); (sert à retirer le header php)
    header('Content-Description: file transfert');
    header('Content-Disposition: inline; filename="nom_du_mp3.mp3');
    header('Content-Length: '.filesize($fichier));

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 29
    Par défaut
    Vous aviez raison Nicobru, ça devait marcher. Bon après pas mal d'essais.. en fait, après avoir tout recleané mon code lié à la gestion des variables de sessions, qui est une usine à gaz répondant à mes attentes, j'ai pu lire sur la Wii avec le dewplayer les musiques de mon arborescence serveur. Avec juste le code que j'avais précédemment posté.

    Maintenant, il faut que je trouve le moyen d'utiliser la version multi-dewplayer, afin de gérer une liste de lecture. L'utilisation de base, étant la liste des fichiers mp3 accessibles par le web séparer par le caractère '|'.

    Laissez moi chercher un petit moment, je pense avoir toutes les données nécessaires pour faire cette manipulation.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 29
    Par défaut
    Je m'excuse tout d'abord pour le double post, mais je tombe sur un os nécessitant un up du sujet pour que les personnes de passages puissent voir le problème.
    Tout d'abord, j'arrive bien a faire fonctionner la version multi de dewplayer avec la liste de lecture, aucun soucis.

    Le problème vient du nom de certain fichier ou dossier, qui n'arrivent pas à être ouvert par file_get_contents, comme par exemple "D:\\Musiques\\test+\\11%20-%20Rammstein.mp3"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [Thu Dec 18 00:13:47 2008] [error] [client 192.168.0.2] PHP Warning:  filesize() [<a href='function.filesize'>function.filesize</a>]: stat failed for D:\\Musiques\\test \\11 - Rammstein.mp3 in D:\\Program Files\\EasyPHP 2.0b1\\www\\playlist\\mp3.php on line 21, referer: http://192.168.0.2/playlist/dewplayer-multi.swf?mp3=./mp3.php?titre=D:\\Musiques\\test+\\11%20-%20Rammstein.mp3&autostart=1&showtime=1
    [Thu Dec 18 00:13:47 2008] [error] [client 192.168.0.2] PHP Warning:  file_get_contents(D:\\Musiques\\test \\11 - Rammstein.mp3) [<a href='function.file-get-contents'>function.file-get-contents</a>]: failed to open stream: No such file or directory in D:\\Program Files\\EasyPHP 2.0b1\\www\\playlist\\mp3.php on line 27, referer: http://192.168.0.2/playlist/dewplayer-multi.swf?mp3=./mp3.php?titre=D:\\Musiques\\test+\\11%20-%20Rammstein.mp3&autostart=1&showtime=1
    ou bien D:\\DATA\\MEDIAS\\Musiques\\A%20texte\\Benabar\\B%E9nabar\\01%20-%20Bon%20Anniversaire.mp3 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [Thu Dec 18 09:36:52 2008] [error] [client 192.168.0.2] PHP Warning:  filesize() [<a href='function.filesize'>function.filesize</a>]: stat failed for D:\\DATA\\MEDIAS\\Musiques\\A texte\\Benabar\\B?bar\\01 - Bon Anniversaire.mp3 in D:\\Program Files\\EasyPHP 2.0b1\\www\\mp3.php on line 21, referer: http://192.168.0.1/dewplayer-multi.swf?mp3=./mp3.php?titre=D:\\DATA\\MEDIAS\\Musiques\\A%20texte\\Benabar\\B%E9nabar\\01%20-%20Bon%20Anniversaire.mp3&autostart=1&showtime=1
    [Thu Dec 18 09:36:52 2008] [error] [client 192.168.0.2] PHP Warning:  file_get_contents(D:\\DATA\\MEDIAS\\Musiques\\A texte\\Benabar\\B?bar\\01 - Bon Anniversaire.mp3) [<a href='function.file-get-contents'>function.file-get-contents</a>]: failed to open stream: Invalid argument in D:\\Program Files\\EasyPHP 2.0b1\\www\\mp3.php on line 27, referer: http://192.168.0.1/dewplayer-multi.swf?mp3=./mp3.php?titre=D:\\DATA\\MEDIAS\\Musiques\\A%20texte\\Benabar\\B%E9nabar\\01%20-%20Bon%20Anniversaire.mp3&autostart=1&showtime=1
    On voit bien qu'il manque le plus lors de l'appel à file_get_contents :
    file_get_contents(D:\\Musiques\\test \\11 - Rammstein.mp3)

    et voici le contenu de mon fichier mp3.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    	if( isset($_GET["titre"]))
    	{
    		$mp3 = $_GET["titre"];
    	}
     
    	header('X-Powered-By:'); //(sert à retirer le header php)
    	header('Content-Description: file transfert');
    	header('Content-Disposition: inline; filename=' .$mp3);
    	header('Content-Length: '.filesize($mp3));
    	header('Content-Type: audio/mpeg');
     
    	echo file_get_contents($mp3);
    ?>
    Oui, j'ai remis les autres headers, car sur la Wii, une fois qu'une musique était partie, une fois chargé, je ne pouvais plus en changer.

    sachant que j'utilise la fonction urlencode, pour passer mes chemins. Si quelqu'un a une idée, je suis preneur??

    ---------------------

    Edit :

    C'est bon, tout fonctionne, j'ai passé les chemins des fichiers dans un tableau stocké en tant que variable de session que je récupère dans mp3.php.

    Merci encore Nicobru.

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 67
    Par défaut
    Citation Envoyé par nicobru Voir le message
    Bonjour
    Il n'est pas possible (simplement) d'accéder directement à des fichiers hors du document root.
    La solution est de faire pointer le lecteur flash non pas vers le mp3, mais vers un fichier php qui lui va retourner le mp3 choisi :

    header('Content-Type: audio/mpeg');
    echo file_get_contents('c:/mon_mp3.mp3');
    je crois que c'est possible
    j'ai deja fait ça sur une distrib fedora
    suffit de mettre un lien symbolique dans le root qui pointe vers ton fichier
    par contre, c'est affreux, rien que de le dire ça me pique
    je te conseil plutot de securisé ton apache pour eviter ça

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 16/11/2007, 15h31
  2. ecriture fichier - chemin relatif
    Par gamel dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 20/07/2006, 16h15
  3. [PHP-JS] ouverture fichier - chemin UNC
    Par charlene44 dans le forum Langage
    Réponses: 12
    Dernier message: 22/06/2006, 12h14
  4. Recherche d'application web (PHP) :: Gestion de fichiers
    Par KissCoolMan dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 08/01/2006, 15h43
  5. [tomcat][struts]comment acceder fichier chemin relatif ?
    Par v1nc3kr0 dans le forum Struts 1
    Réponses: 8
    Dernier message: 28/07/2005, 14h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo