Problème header php (Content-type)

Fermé
psy4_60 - 27 déc. 2009 à 01:56
psy4_60 Messages postés 2 Date d'inscription dimanche 27 décembre 2009 Statut Membre Dernière intervention 27 décembre 2009 - 27 déc. 2009 à 19:08
Bonjour, j'ai une base de donnée mysql avec une table contenant des liens vers des video .wmv . avi . mpg, aux quels sont associés des id.
j'aimerai faire un script php qui envoie la video qui a l'id passé en $_GET si une session est en place, lisez le code c'est plus parlant ^^ :

Code :

<?php
session_start();

ini_set("display_errors",1);
error_reporting(E_ALL);

if((isset($_SESSION["pseudo"]))and(isset($_SESSION["pwd"])))
{
mysql_connect('xx','xx','xx');
mysql_select_db("xx");
if(isset($_GET['id']))
{
$id=mysql_escape_string($_GET["id"]); // récupération du liens dans la base de donnée
$req=mysql_query("SELECT * FROM vid WHERE id='$id'");
$lien=mysql_fetch_array($req);
$lien=$lien["lien"];

if(preg_match("#.wmv$#",$lien)) //mise en place des headers
{
header("Content-type: video/x-ms-wmv");
header('Content-Disposition: inline; filename="movie.wmv"');
}
elseif(preg_match("#.mpg$#",$lien))
{
header("Content-typefile: video/mpeg");
header('Content-Disposition: inline; name="movie.mpg"');
}
elseif(preg_match("#.avi$#",$lien))
{
header("Content-type: video/avi");
header('Content-Disposition: inline; filename="movie.avi"');
}
readfile($lien); //lecture du fichier
}
}
?>



lorsque que je me rend sur la page http://somedomain/phpsript.php?id=1, (il existe bien un lien valide avec un id = 1 dans la base), le lecteur windows media se met bien en place, ca affiche connexion en cour et là firefox plante (je n'ai pas essayer d'autre explorer, le site sera visualisé uniquement sous ff).

si quelqu'un connait la cause du problème j'aimerais qu'il me dise ce qu'il ne va pas : ) merci
            
                
A voir également:

2 réponses

psy4_60 Messages postés 2 Date d'inscription dimanche 27 décembre 2009 Statut Membre Dernière intervention 27 décembre 2009
27 déc. 2009 à 17:24
bon maintenant ca marche mais sans le session_start(), j'ai été voir sur le net et j'ai trouver ca sur la fonction session_start():

Note: Cette fonction va émettre plusieurs entêtes HTTP, en fonction de la configuration. Voyez session_cache_limiter() pour personnaliser ces entêtes.

session_cache_limiter() :

En mode private , l'en-tête Expire envoyé au client peut poser des problèmes à certains navigateurs, comme, notamment, Mozilla . Vous pouvez éviter ce problème avec le mode private_no_expire . L'en-tête Expire n'est jamais envoyé au navigateur pour ce mode.

je vais tester ca :)

EDIT :ca ne fonctionne ni avec private_no_expire ni avec none;
il y a toujours le problème de header.

un truc qui me parait bizarre, c'est que j'avais fait le même script pour l'affichage d'image ( c'est presque un copier collé) avec un session_start(); et un header('Content-type: image/jpeg'); et ca fonctionnait.

J'utilisais gd2 pour les images et la fonction imagejpeg(); pour afficher les images,
peut etre que c'est ca qui fesait que ca marche, mais la il y a pas de librairie pour les vidéo donc il va falloir trouver une alternative,
j'ai ma petite idée, mais j'aimerais bien savoir si il y a moyen de faire quelque chose.
0
psy4_60 Messages postés 2 Date d'inscription dimanche 27 décembre 2009 Statut Membre Dernière intervention 27 décembre 2009
27 déc. 2009 à 19:08
bon j'ai modifier le code, plus de plantage de firefox, mais toujours pas de video :

[code]if(isset($_GET['id']))
{
$id=mysql_escape_string(htmlspecialchars($_GET["id"]));
$req=mysql_query("SELECT * FROM vid WHERE id='$id'");
$lien=mysql_fetch_array($req);
$lien=$lien["lien"];
if(preg_match("#.wmv$#",$lien))
{
header("Content-type: video/x-ms-wmv");
header('Content-Disposition: inline; filename="movie.mpg"');
}
elseif(preg_match("#.mpg$#",$lien))
{
header("Content-type: video/mpeg");
header('Content-Disposition: inline; filename="movie.mpg"');
}
elseif(preg_match("#.avi$#",$lien))
{
header("Content-type: video/avi");
header('Content-Disposition: inline; filename="movie.avi"');
}
header('Content-Length: '.filesize($lien));
session_start();
if((isset($_SESSION["pseudo"]))and(isset($_SESSION["pwd"])))
{
readfile($lien);
}
}/code
0