upload une vidéo en php

Eléphant du PHP | 417 Messages

03 juin 2013, 19:35

Bonjour à tous le monde,

je veux faire un script pour uploader une vidéo. J'ai récupérer mon code pour uploader une image donc j'ai changé les extension biensur ^^

et au lieu de contrôler la largeur et hauteur de l'image j'aimerai contrôler la taille de la vidéo (ne dépasse pas 30s ) est ce que c'est possible ?

Eléphant du PHP | 417 Messages

03 juin 2013, 21:13

voici le script que j'utilise pour les photos est ça fonction très bien (que pour les jpg parceque a la base ce script je le veux pour des vidèo)
par contre pour les video ça ne fonction pas, ce qui est bizard c'est qu'il rentre pas dans ma condition if(isset($_POST['Upload'])) (dans le cas d'une video ça m'affiche le echo 'noooooooo' tt en bas ) alors que si c'est une image il rentre bien et la photo est bien uploader :s
<form action="" method="POST" enctype="multipart/form-data">

Video file directory path: <input type="file" name="video"><br/>

<input type="submit" name="Upload" value="Upload">

</form>

<?php
	//This function reads the extension of the file to ensure that it is an video file

	function getExtension($str) {
		$i = strrpos($str,".");
		if (!$i)
			return "";
		$l = strlen($str) - $i;
		$ext = substr($str,$i+1,$l);
		return $ext;
	}

	//This variable handles an error and won't upload the file if there is a problem with it

	$errors=0;

	//checks if the form has been submitted

	if(isset($_POST['Upload']))
	{

		//récuperer le nom du fichier
		$file = $_FILES['video']['name'];
		print_r($_FILES);
		
		//si c'est pas vide
		if ($file)
		{
			
			$video_filename = stripslashes($file); // maVideo.avi
			$video_extension = getExtension($video_filename); // Avi

			//vérification de l'extension
			$extension_valide = array('mpeg','avi','jpg','mp4','mov');
			if (!in_array(strtolower($video_extension), $extension_valide)) // faux
			{
				echo '<h1>Unknown extension!</h1>';
				$errors=1;
			}
			else // bon
			{
				//récupérer la size de la video 
				$video_size= filesize($_FILES['video']['tmp_name']);
				//compare the size with the maxim size we defined and print error if bigger
				if ($video_size > 110000000)
				{
					echo '<h1>You have exceeded the size limit!</h1>';
					$errors=1;
				}

				//give the video a unique name in case a video already exists with the name on the server
				$video_name =time().'.'.$video_extension;
				
				//assign a folder to save the video to on your server
				$newname="videos/".$video_name;
				
				//verify that the video has been loaded
				if ($errors == 0){
					if (move_uploaded_file($_FILES['video']['tmp_name'], $newname) == 1) 
						echo "<h1>File Uploaded Successfully! Try again!</h1>";
					else
						echo "erreur lors de téléchargement";
				}
			}
		}
	}else
		echo 'noooooooooooooooo';

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

03 juin 2013, 23:27

salut,

ajoute un var_dump($_POST); avec le message histoire de voir un peu mieux la chose.



Attention en général vidéo égale gros fichier = tu dépasse la taille max fichier (à vérifier sur un phpinfo() ;) )


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 417 Messages

03 juin 2013, 23:56

salut,

ajoute un var_dump($_POST); avec le message histoire de voir un peu mieux la chose.
pour
echo var_dump($_POST); 
ça donne

array
empty
Attention en général vidéo égale gros fichier = tu dépasse la taille max fichier (à vérifier sur un phpinfo() ;) )
@+
j'ai bien mis dans php.ini upload_max_filesize = 110M et dans mon code j'ai mis la taille max à 110000000 = 110Mo

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

04 juin 2013, 09:23

pas besoin de echo avec var_dump (cf la doc).

ton tableau $_POST est vide, donc, a priori il n'y a pas de soumission du formulaire.
Ce qui est forcément vrai au premier affichage du formulaire vu que tu n'a pas cliqué sur le bouton submit.

par contre lorsque tu tu clique dessus ça doit aller.

dans ce cas le else est à évité ;)


pour ce qui est du du champs caché indiquant la taille max, c'est du flan vu que c'est coté client tu ne peux pas en tenir compte.
et de toute façon si le fichier dépasse les limites de php tu ne pourra pas l'utiliser.

pour if ($file), c'est inutile tu déclare la variable au dessus et abuse du transtypage.
tu devrais plutot tester que $_FILES['video']['error'] existe et est égale à zéro (ou à la constante UPLOAD_ERR_OK).


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 417 Messages

04 juin 2013, 13:02

pas besoin de echo avec var_dump (cf la doc).

ton tableau $_POST est vide, donc, a priori il n'y a pas de soumission du formulaire.
Ce qui est forcément vrai au premier affichage du formulaire vu que tu n'a pas cliqué sur le bouton submit.

par contre lorsque tu tu clique dessus ça doit aller.
mais si quand je valide le formulaire avec une vidéo que le var_dump($_POST) = array empty
par contre avec une photo j'ai array
'Upload' => string 'Upload' (length=6)

PS la video fait 60 Mo et dans mon fichier php.ini j'ai mis le max a 100M donc


pour ce qui est du du champs caché indiquant la taille max, c'est du flan vu que c'est coté client tu ne peux pas en tenir compte.
et de toute façon si le fichier dépasse les limites de php tu ne pourra pas l'utiliser.
quel champs caché ? je n'ai utilisé aucun hidden
pour if ($file), c'est inutile tu déclare la variable au dessus et abuse du transtypage.
tu devrais plutot tester que $_FILES['video']['error'] existe et est égale à zéro (ou à la constante UPLOAD_ERR_OK).
@+
Oui c'est vrai

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

04 juin 2013, 14:32

pour ce qui est du travail sur la vidéo tu peux te tourner vers http://ffmpeg-php.sourceforge.net/. (seulement si tu a un dédié, il y a peux de chance que cela soit rependus sur du mutualisé).

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 417 Messages

04 juin 2013, 15:14

pour ce qui est du travail sur la vidéo tu peux te tourner vers http://ffmpeg-php.sourceforge.net/. (seulement si tu a un dédié, il y a peux de chance que cela soit rependus sur du mutualisé).

@+
je suis pas en dédié malheureusement ..

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

04 juin 2013, 17:42

pas de bol ;)

Regarde quand même si ton hébergeur propose quelque chose.

@+
Il en faut peu pour être heureux ......

ViPHP
AB
ViPHP | 5818 Messages

04 juin 2013, 23:07

Si la configuration serveur post_max_size est dépassée alors les superglobales $_POST et $_FILES seront vides. Et si tu es sur un mutualisé il est probable que le serveur ne tienne pas compte de tes indications avec php.ini, et il y a fort à parier que cela ne fonctionnera pas mieux en essayant depuis un .htaccess.

Pour gérer les erreurs il y a cette classe d'upload qui t'indiquera clairement les erreurs et si tu utilise l'exemple avec la barre de progression il n'y aura pas besoin d'attendre 100 plombes avant de savoir que le fichier est trop gros. Mais bon cela gère l'erreur mais ne te donne pas pour autant une solution et il n'y en a pas avec php tant que tu ne peux pas configurer ton serveur.

Eléphant du PHP | 417 Messages

11 juin 2013, 22:13

Merci pour les liens AB ta classe m'as beaucoup aidée :)

maintenant mon upload fonction parfaitement en local sauf que quand j'ai mis mon projet chez mon hébergeur ça fonction plus, en fait le problème viens de la valeur des deux variable de serveur upload_max_filesize et post_max_size et je veux savoir comment faire pour les modifier ? y a moyen de le faire moi même dans mon code ? si oui ou le mettre exactement ? ou bien si mon hébergeur qu'il faut que je contact pour le modifier ?

Merci d'avance

ViPHP
AB
ViPHP | 5818 Messages

12 juin 2013, 16:19

Comme déjà dit, pour modifier ces valeurs, Il faut pouvoir modifier la configuration du serveur (et cela n'a rien à voir avec le code de l'upload lui-même).

Cela se fait soit avec ini_set, soit par l'intermédiaire un fichier .htaccess, soit dans le php.ini, mais il est très peu probable que ce soit possible sur un serveur mutualisé. Demande à ton hébergeur la marche à suivre.

Eléphant du PHP | 417 Messages

12 juin 2013, 18:12

Comme déjà dit, pour modifier ces valeurs, Il faut pouvoir modifier la configuration du serveur (et cela n'a rien à voir avec le code de l'upload lui-même).

Cela se fait soit avec ini_set, soit par l'intermédiaire un fichier .htaccess, soit dans le php.ini, mais il est très peu probable que ce soit possible sur un serveur mutualisé. Demande à ton hébergeur la marche à suivre.

Malheureusement avec mon hébergeur ne peut pas augmenter pour un serveur mutualisé :s qu'il est la solution dans ce cas ? (a part bien sur un serveur dédier )
la valeur des deux variable est de 20Mo et moi j'ai besoin au minimum a 60Mo (il s'agit des vidéos de 30s donc en générale c'est > 40Mo)

vous connaissez des hébergeur qui pourrai augmenter même dans mutualisé ?

ViPHP
AB
ViPHP | 5818 Messages

12 juin 2013, 23:41

Chez OVH ces deux valeurs sont actuellement de 60 Mo sur un mutualisé...
Mais :
Le problème est qu'il y a un autre réglage serveur qui est le timeout apache et qui est le temps d'attente maximum du serveur pour recevoir un post. Ce réglage est fixé par défaut (sans possibilité de modification sur un mutualisé) à 5 min soit 300 secondes, ce qui veut dire que le maximum de téléchargement possible dépendra donc aussi de la vitesse ascendante (de l'ordinateur vers le serveur) de la connexion internet.
Par exemple avec une connexion ascendante de 1024 Kbits/s on pourra télécharger un maximum d'environ 30 Mo en 5 minutes, il faudra donc une connexion ascendante de 2048 Kbit/s pour pouvoir télécharger 60 Mo en 5 minutes.

Eléphant du PHP | 417 Messages

14 juin 2013, 22:07

Alors maintenant j'ai reussi a augmentée la valeur de upload_max_filesize et post_max_size mais il me reste problème de timeout quel variable faut changer au niveau de serveur ?
chez moi une video de 60Mo mis 30min :'( et a la fin c'est une erreur de serveur (le timeout)