Soyez le premier à donner votre avis sur cette source.
Vue 31 893 fois - Téléchargée 3 345 fois
<?php //=================================== //on fixe les variables de php.ini : //=================================== $res_ini = @ini_set ("MAX_INPUT_TIME", 1200); @set_time_limit (1200); //=================================== //obtention de l'extension //=================================== function getextension($fichier) { $bouts = explode(".", $fichier); $extension = array_pop($bouts); $extension = strtoupper ($extension); return $extension; }//getextension () //================================================== //supression de l'extension dans le nom d'un fichier //================================================== function supprextension ($fichier) { $fichier= substr ( $fichier, 0, strrpos($fichier, ".")); return $fichier; }//supprextension () //===================================== //initialisation des vars et tableaux //===================================== $traitable = false; $is_ext_ok = false; $path_ffmpeg = "ffmpeg/ffmpeg"; $ext_admise = array ("MOV", "AVI", "MWV", "DV", "MPG", "MPEG", "FLV", "DIVX"); $taille = false; for ($i=0; $i<3; $i++) { echo "<br>$i<br>"; $fichier = "fichier".($i+1); $source = $_FILES[$fichier]["tmp_name"]; $nom_fic = $_FILES[$fichier]["name"]; $size = $_FILES[$fichier]["size"]; $destination = "./tmp2/".$nom_fic; //dossier destination $nom_final = supprextension ($nom_fic); if ($size < 25000000) { echo "<br>taille : $taille<br>size : $size<br>"; $taille = true; }//if () //sortie des qu'il n'y a plus de fichier dans la file d'attente. if (!file_exists($source)) { echo "<br>sortie<br>"; continue; }//if () //================================= //initialisation des fichiers logs //================================= $nomlogerror = "./log/logerror".$nom_final.".txt"; $nomlogconnect ="./log/logconnect".$nom_final.".txt"; $logerrorpt = @fopen ($nomlogerror, "at"); $logconnectpt = @fopen ($nomlogconnect, "at"); if (is_writable($nomlogerror)) { if (!$logerrorpt) { echo "<br>impossible d'ouvrir le fichier logerror<br>"; exit ; }//if () else { $res_write = fwrite ($logerrorpt, "erreurs apparues lors de l'upload et du traitement :\r\n" ); }//else }//if else { echo "<br>fichier non accessible<br>"; }//else if (is_writable($nomlogconnect)) { if (!$logconnectpt) { $res_write = fwrite ($logerrorpt, "Impossible d'ouvrir $nomlogconnect\r\n"); exit; }//if else { if (!$res_write = fwrite ($logconnectpt, "compte rendu de l'upload et du traitement de la vidéo\r\n\r\n")) { $res_write = fwrite ($logerrorpt, "\r\nImpossible d'ecrire dans $nomlogconnect\r\n"); }//if () }//else } else { $res_write = fwrite ($logerrorpt, "fichier $nomlogconnect non accessible\r\n"); }//else //========================================= //vérification de l'existence de la vidéo //========================================= if (file_exists ("./film_flv/".$nom_final.".flv")) { $res_write = fwrite ($logerrorpt, "\r\nla vidéo $nom_fic a déjà été uploadée et traitée, arret de l'upload\r\n"); $res_write = fwrite ($logconnectpt, "\r\nla vidéo $nom_fic a déjà été uploadée et traitée, arret de l'upload\r\n"); continue; }//if () //================== //test de la vidéo //================== $extension = getextension ($nom_fic); echo "<br>extension: $extension<br>"; $res_write = fwrite ($logconnectpt, "dossier source : $source \r\n "); $res_write = fwrite ($logconnectpt, "nom du fichier : $nom_fic\r\n"); $res_write = fwrite ($logconnectpt, "nom du fichier destination : $destination\r\n"); $res_write = fwrite ($logconnectpt, "extension : $extension \r\n"); $res_write = fwrite ($logconnectpt, "taille : $size\r\n"); if (!in_array ($extension, $ext_admise)) { echo "<br>Attention, le fichier que vous venez de sélectionner n'est pas une vidéo au format valide.<br>"; echo "Les formats utilisables sont : AVI, MPEG, DIVX, MOV, FLV, DV, WMV merci de compresser votre vidéo au format voulu.<br>"; $res_write = fwrite ($logerrorpt, "\r\nformat vidéo non adapté, extension de la vidéo : $extension, upload arrété \r\n"); }//if () else { $res_write = fwrite ($logconnectpt, "\r\nextension de la vidéo ok, poursuite de l'upload \r\n"); if (/*$size> 26214400*/!$taille) { echo "<br>Impossible de charger $nom_fic, cette vidéo fait plus de 25Mo, merci de réduire la taille de votre vidéo<br>" ; $res_write = fwrite ($logerrorpt, "\r\nla taille de la vidéo $nom_fic est de $size et supérieure à 25Mo, arret de l'upload\r\n"); continue; }//if () else { $res_write = fwrite ($logconnectpt, "\r\ntaille de la vidéo ok, poursuite de l'upload \r\n"); $is_ext_ok = true; }//else }//else //================== //Début de l'upload //================== if ($is_ext_ok) { $res_write = fwrite ($logconnectpt, "\r\ndebut de l'upload de la vidéo \r\n"); $result = move_uploaded_file( $source, $destination); $res_write = fwrite ($logconnectpt, "\r\nresultat de move_upload_file = $result\r\n"); $erreur = $_FILES[$fichier]['error']; echo "<br>erreur : $erreur<br>"; if (!$result) { $res_write = fwrite ($logerrorpt, "erreur lors de l'upload : "); switch ($erreur) { case 1: // UPLOAD_ERR_INI_SIZE $res_write = fwrite ($logerrorpt, "UPLOAD_ERR_INI_SIZE\r\n"); echo "Attention le fichier dépasse la taille autorisée par le serveur<br>"; break; case 2: //UPLOAD_ERR_FORM_SIZE $res_write = fwrite ($logerrorpt, "UPLOAD_ERR_FORM_SIZE\r\n"); echo "Attention le fichier dépasse la taille autorisée par le formulaire<br>"; break; case 3: //UPLOAD_ERR_PARTIAL $res_write = fwrite ($logerrorpt, "UPLOAD_ERR_PARTIAL\r\n"); echo "Attention, l'upload du fichier a été interrompu<br>"; break; case 4: // UPLOAD_ERR_NO_FILE $res_write = fwrite ($logerrorpt, "UPLOAD_ERR_NO_FILE\r\n"); echo "Attention, le fichier envoyé à une taille nulle<br>"; break; }//switch () $res_write = fwrite ($logconnectpt, "\r\nune erreur est survenue lors de l'upload de $nom_fic, consultez le log erreur\r\n"); continue; } else { $traitable = true; $res_write = fwrite ($logconnectpt, "\r\nfichier uploadé, début du traitement de la vidéo\r\n"); } }//if () //=================================== //Phase de traitement de la vidéo //=================================== if ($traitable&&$is_ext_ok) { $res_write = fwrite ($logconnectpt, "\r\ndebut du traitement de la vidéo\r\n"); $mod=chmod ($destination, 0770); //vérification, si le son doit être inclu if ($_POST['son1'] == 1) { $res_write = fwrite ($logconnectpt, "\r\nson sélectionné\r\n"); $commande = "$path_ffmpeg -y -i $destination -t 00:00:40 -vcodec flv -s 350x250 -acodec mp3 ./film_flv/".$nom_final.".flv"; } else { $res_write = fwrite ($logconnectpt, "son non sélectionné\r\n"); $commande = "./ffmpeg/ffmpeg -y -i $destination -t 00:00:40 -f flv -an -vcodec flv -s 350x250 ./film_flv/".$nom_final.".flv"; }//else $res = system ($commande, $res_var); $res_write = fwrite ($logconnectpt, "\r\ncommande à executer : $commande \r\n\r\n"); if ($res_var == 0) { $res_write = fwrite ($logconnectpt, "\r\nla vidéo $nom_fic a bien été traitée\r\ndébut de la suppression de la vidéo uploadée\r\n"); $bool = unlink ($destination); if ($bool) { $res_write = fwrite ($logconnectpt, "\r\n$destination supprimée avec succés\r\n"); }//if () else { $res_write = fwrite ($logerrorpt, "\r\n$destination non supprimée\r\n"); }//else }//if () else { $res_write = fwrite ($logerrorpt, "\r\nerreur lors de l'encodage... vidéo $destination non supprimée\r\n"); exit; }//else $bool = unlink($nomlogerror); if ($bool) { $res_write = fwrite ($logconnectpt, "\r\nle fichier $nomlogerror a été supprimé avec succès\r\n"); }//if () }//if () }//for ?>
20 juil. 2010 à 13:35
Bon j'apporte des lumières si elles peuvent être utile.
Donc la commande systeme na l'aire de fonctionné qu'avec des .exe dans le même dossier que se trouve le fichier dans lequel fout executé system. Donc
Test_upload.php-
ffmpeg.exe_|
tmp2(dossier)_|
flv_film(dossier)_|
dans le code il faut donc modifier la variable path_ffmpeg et dans commande mettre "ffmpeg.exe ..." au lieu de "./ffmmpeg/ffmpeg"
Une fois ces étapes faites aucuns problème ne devrait etre trouvée mis à part lors de la supression ou de la réupload de la même vidéo.
Pour cela il faut bien sur faire des controle sur le nom vidéo et modifier en conséquence quand à la supression voire du coté des droits utilisateurs.
20 juil. 2010 à 10:38
Merci pour ce taf car il n'existe pas beaucoups d'exemple d'utilisation de ffmpeg et de php
bon ba comme tout le monde je galère!
bon alors pour les erreurs "Notice: Undefined index: fichier1" vous avez mal lancer votre formulaire (par exemple chargé la page html dans votre navigateur directement et non par votre server) pour moi c'était le cas.
Ensuite j'ai eu aussi "Warning: fwrite(): supplied argument is not a valid" vous devez créez plusieurs dossier à l'endroit du test_upload.php nommé : "log" "tmp2" "film_flv"
Ensuite je suis bloqué, l'execution de la commande system ne fonctionne pas chez moi. Je pense fortement que mon installation de ffmpeg n'est pas complète. c'est pourquoi Yaug il aurait était cool que tu nous mettes un petit descriptif de l'install de ffmpeg.
Pour ma part de ce que j'ai vus sur le net :
Plusieurs versions de ffmpeg :
en open source et l'officiel ce sont les sources non compilées et beaucoups de fichiers incompréhensibles. Impossibles de trouvés un tuto pour compilé sous windows ou cygwin. A précisé qu'aucune dll n'est fournies dans le pack.
Des versions précompilées avec plus ou moin de dll et un .exe
Certaines personnes parle d'ajouté les codecs au servers, oui je veux bien faut il encore me dire comment? et comment savoir si on ne les possède pas déjà?
Ensuite certains parle d'activer une extension sous php pour utiliser directement ffmpeg comme une classe, cette méthode n'a donné aucuns résultats pour ma part, je n'arrive même pas à charger l'extension.
SI QUELQU'UN CONNAIT UN BON TUTO JE SUIS PRENEUR!
14 févr. 2010 à 21:43
Je lis dans le formulaire que la vidéo ne doit pas faire plus de 2 minutes...peut-on augmenter cette limite ? Je ne trouve pas ce paramètre dans ton code...ça viens de FFMPEG ?
Merci
1 févr. 2008 à 00:22
J'essais d'installer FFMPEG depuis plus d'une semaine... J'ai cherché partout sur google, et rien de ce que j'ai trouvé n'a fonctionné. J'ai un server/passerelle avec SME SERVER qui tourne.
Je suis débutant et je comprends pas encore tout.
L'idée, si j'ai bien compris c'est de copier la library dans un dossier sur le server ? Mais lequel ? Et j'ai trouvé plusieurs versions de FFMPEG laquelle est ce que je dois utiliser ? J'ai trouvé plein de lignes de commande sur le net, mais rien n'a fonctionner... Quelqu'un peut m'aider ?
Merci à tous !
3 janv. 2008 à 21:56
Pour la voir c'est ici : http://www.phpcs.com/codes/CLASSE-FFMPEG-GESTION-VIDEOS_45279.aspx
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.