Php, problème de header(Content-type: video/x-ms-wmv)

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 ^^ :


<?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-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"');
		}
		readfile($lien); //lecture du fichier
	}
}
?>

lorsque que je me rend sur la page somedomain… (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

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 :slight_smile:

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.
Edité le 27/12/2009 à 17:59

bon j’ai modifier le code, plus de plantage de firefox, mais toujours pas de video :

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);
	}
}

Le probleme vient peut etre de FF. Personnellement je n’ai jamais reussi a lire une video avec FF. Soit sa ne démarai pas soit sa plantai apres quelque secondes.

si, si tu as une video en .wmv toute simple ca marche avec la balise object si ta le lecteur windows media, j’ai trouver une autre facon de faire, je verrai avec mon prof de web si il sait comment faire a la rentrée