8791 sujets

Développement web côté serveur, CMS

Bonjour à vous ,

Je reviens vous voir comme je ram vraiment pour créer un Upload vidéo avec création d'une miniature.

mon début de code en PHP qui marche pour la Upload video .

$dossier = 'galleries/';
$fichier = basename($_FILES['uploaded']['name']);
$extensions = array('.flv');
$extension = strrchr($_FILES['uploaded']['name'], '.'); 
//Début des vérifications de sécurité...
if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
{
     $erreur = 'Vous devez uploader un fichier de type flv .';
}
if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
{
     //On formate le nom du fichier ici...
     $fichier = strtr($fichier, 
          'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
          'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
     $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
     if(move_uploaded_file($_FILES['uploaded']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
     {
          echo 'Upload effectué avec succès !';
     }
     else //Sinon (la fonction renvoie FALSE).
     {
          echo 'Echec de l\'upload !';
     }
}
else
{
     echo $erreur;
}


Actuellement il se bloque a environ 2MO (serai t'il possible de supprimer la limite)
et comment faire pour créer une capture de la vidéo.

Merci d'avance de votre aide Smiley smile
Modifié par Heyoan (20 Aug 2010 - 22:56)
Salut SNXEurope

Il faudrait que tu enlève « = php » à la balise code s.v.p.
Nous ne voyons pas ton code. Il y a un bug je crois. Merci.

++
Salut,

zardoz a écrit :
Il faudrait que tu enlève « = php » à la balise code s.v.p.
Nous ne voyons pas ton code. Il y a un bug je crois. Merci.
C'est effectivement un bug de chili. Smiley cligne

@SNXeurope > on peut faire une miniature d'un .flv avec ffmpeg. Encore faut-il l'avoir à disposition (selon l'hébergement). Sinon ce serait bien plus simple de demander directement d'uploader l'image qui servira de miniature.

Pour la limite c'est dans le php.ini (directive upload_max_filesize) donc si tu es sur un mutualisé tu ne peux pas la modifier.
Tout d'abord merci de vos réponse .


Heyoan je suis sur mon propre PC donc , je vais modifier la config de php.ini .

"@SNXeurope > on peut faire une miniature d'un .flv avec ffmpeg."
Je vais Installer ffmpeg sur Wamp5

"serait bien plus simple de demander directement d'uploader l'image"
Oui mais j'aurai plus un visuel de la vidéo :s

Je vous tien au courent Smiley smile

Edit:
Actuellement je l'ai mi a 20 Mo le temps des teste Smiley langue
Modifié par SNXeurope (21 Aug 2010 - 11:42)
Le "problème" de ffmpeg c'est qu'il va générer la vignette automatiquement... et que du coup ça ne sera pas forcément génial.

Sinon comme le disait paolo il faut également modifier la valeur de post_max_size (et pendant que tu y seras modifier les 8M par défaut de memory_limit et les passer à 64M : ça risque d'être juste sinon).

Pour finir il faut prévoir le cas où la taille d'un fichier va dépasser la valeur de post_max_size car alors rien ne sera transmis ($_FILES sera vide). Pour cela tu peux faire quelque chose comme :
if($_SERVER['REQUEST_METHOD']=='POST') {
	if(empty($_FILES)) {
		$erreurs[] = 'Le fichier ne doit pas dépasser '.ini_get('post_max_size').' !';
	}
}


Edit: il sera éventuellement nécessaire de modifier également max_execution_time.
Modifié par Heyoan (05 Sep 2010 - 08:53)
Pour le memory_limit : 128Mo par défaut.
max_execution_time : 30 Par défaut, Valeur actuelle 60 Sec.

pour post_max_size je l'ai mise a 67000000
page envoi (html)
<form method="post" action="teste1.php" enctype="multipart/form-data">
	Fichier .FLV 
	<br>
	<input type="file" name="upload" />
	<input type="hidden" name="MAX_FILE_SIZE" value="900000">
	<input type="submit" />
</form>

Nouvelle Version de Upload video (php)

$dossier = 'galleries/';
$fichier = basename($_FILES['upload']['name']);
$taille_maxi = 900000;
$taille = filesize($_FILES['upload']['tmp_name']);
$extensions = array('.flv');
$extension = strrchr($_FILES['upload']['name'], '.'); 

	    /** Extention FLV **/
		if(!in_array($extension, $extensions))
			{
			$erreur = 'Vous devez uploader un fichier de type FLV.';
			}
		/** Poids 900Ko **/	
		if($taille>$taille_maxi)
			{
			$erreur = 'Le fichier est trop gros'.ini_get('post_max_size').'.';
			}
			
		if(!isset($erreur))
			{
			
				/** Anti bug nom **/
				$fichier = strtr($fichier, 
				'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
				'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
				$fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
				
			/** Envoi des Donner **/
			if(move_uploaded_file($_FILES['upload']['tmp_name'], $dossier . $fichier)) 
				{
				echo 'Upload effectué avec succès !';
				}
				else
				{
				echo 'Echec de l\'upload !';
				}
			}
			else
			{
				echo $erreur;
			}


Remarque:
quand j'envoie un fichier supérieux a 900ko (valeur pour les teste) il me dit :
Vous devez uploader un fichier de type FLV.
au lieux de :
Le fichier est trop gros.

cela viens t'il du temps d'upload trop cour ?

Sinon pour les miniature en ffmpeg sa se fais a l'upload ou quand on active les code ?
Alors dans l'ordre :
* le champ hidden MAX_FILE_SIZE doit se trouver avant l'INPUT file.
* ce champ n'est pas fiable (puisqu'on peut utiliser CURL en post) et il faut donc toujours revérifier la taille réelle côté PHP.
* si la taille du fichier dépasse la valeur de MAX_FILE_SIZE le fichier n'est pas du tout uploadé et cela génère une erreur 2.
* tu ne devrais logiquement effectuer tes tests qu'après avoir testé la valeur de $_FILES['upload']['error'] :
if($_FILES['upload']['error']==0) {
  // tests
} else {
  // on gère l'erreur
} 
* pourquoi faire $taille = filesize au lieu d'utiliser $_FILES['upload']['size'] ?

Pour ffmpeg je ne sais plus comment ça fonctionne (et j'ai un peu la flemme de le réinstaller juste pour te répondre Smiley cligne ).
Modifié par Heyoan (05 Sep 2010 - 08:53)