Valider une extention

Bonjour,
bon suite a mes differents soucis avec mon module d'upload j'en ai refait un autre qui fonctionne a merveil au niveau des images,
j'en est donc refait un pour uploader des videos mais je ne pense pas que mes autorisation d'ext soit bonnes

$valid_ext = array('avi','swf', 'mpeg4','mp4');

et pour la taille maxi accepter :

$taille_max = 3500000000; pour 35 mo

le soucis c'est qu il ne veut pas d'un fichier mp4.. pourquoi y a t il une erreur quelque part dans mes extentions valide ?

merci
Configuration: Windows XP
Firefox 2.0.0.11

22 réponses

  1. Contributeur
    salut,

    vu !
    -;o)

    est-ce que ça fonctionne avec les autres extensions ?

    est-ce que tu convertis la casse de l'extension du fichier avant de tester ?
    $ext = strtolower( $ext);

    1. oui avec un swf c'est ok pas avec un mp4

      et pour : est-ce que tu convertis la casse de l'extension du fichier avant de tester ?

      $ext = strtolower( $ext);

      je voit pas de quoi tu parle (novice en php)
      1. Contributeur
        tu dois faire un test pour savoir si l'extension du fichier est dans le tableau des extensions autorisées.

        et tu dois faire le test avec la fonction 'in_array()'.

        et le manuel PHP dit :
        bool in_array ( mixed $needle, array $haystack [, bool $strict] )
        
        in_array() recherche needle dans haystack et retourne TRUE s'il s'y trouve, ou FALSE sinon. 
        
        Le troisième paramètre strict est optionnel. S'il vaut TRUE alors in_array() vérifiera aussi que le type du paramètre needle correspond au type de la valeur trouvée dans haystack. 
        
        Note: Si needle est une chaîne, la comparaison est faite en tenant compte de la casse. 
        
        Note: Dans les versions antérieure à 4.2.0, needle ne pouvait pas être un tableau. 
        

        donc si tu cherches 'MP4' dans le tableau tu ne le trouveras pas, si tu cherches 'mp4' tu le trouveras.

        alors avant de tester, tu mets ton extension en minuscules ('strtolower()'), comme ça pas de problème de casse.

        (si c'est le terme 'casse' qui t'tracasse (je vais aller me coucher, moi !) c'est le fait pour une lettre d'être majuscule ou minuscule)

        voili, voila, mais ça ne réglera pas forcement ton problème.

        faudra penser à nous mettre le code de test un d'ces quatre !
        -;o)
        1. j'ai refait un test en ajoutant wmv et mpg car mp4 n'existe pas
          le wmv ok /le avi ok /le swf ok /le mpg non

          il n'y a que le mpg qui ne passe pas..

          $valid_ext = array('avi','swf','mpg','wmv','mkv','mov','mpeg4');

          le je ne comprend plus le mpg ne fait que 6.30 mo et ma limite est de 35mo donc vu que l'ext est valid pourquoi
          il ne me la prend pas ??????

          voir extentions http://www.commentcamarche.net/systemes/format.php3
          1. Contributeur
            tu as une gestion d'erreurs ?
            le serveur ne te répond rien ?

            montre nous le bout de code qui traite l'upload lui même (test extensions et poids).
            1. si le message d'erreur apres l'upload est "veuillez inserer un fichier de type mpg, avi, swf, wmv ne depassant pas 35mo"

              $repedest = "video/";
              $valid_ext = array('avi','swf','mpg','wmv','mkv','mov','mpeg4');
              $taille_max = 35000000000;
              if ((!in_array( substr(strrchr($fichier_name, '.'), 1), $valid_ext ) )  ||  filesize($fichier) > $taille_max) {
              echo "<big>Veuillez s&eacute;lectionner un fichier de type mpg, avi, swf, mpeg4 de moins de 35mo !</big>";
              1. Contributeur
                et oui mais tu gères les deux erreurs avec la même condition.

                j'utilise un test comme ça pour mes
                upload
                :
                <?php
                $extension = strtolower( strrchr( $_FILES['img']['name'], '.' ) );
                $valid_ext = array( '.avi', '.swf', '.mpg', '.wmv', '.mkv', '.mov', '.mpeg4' );
                try
                {
                	if( !in_array( $extension, array( '.avi','.swf','.mpg','.wmv','.mkv','.mov','.mpeg4' ) ) )
                	{
                		throw new Exception( 'Vous devez uploader un fichier de type '.implode( ', ', $valid_ext).'.' );
                	}
                	if( filesize( $_FILES['img']['tmp_name'] ) > IMAGE_MAX_SIZE )
                	{
                		throw new Exception( 'Le fichier est trop volumineux.');
                	}
                }
                catch( Exception $e )
                {
                	echo( "<p>".$e->getMessage()."</p>\n" );
                }
                ?>
                1. regarde je vient d uploader cette video mpg DJ Crazy Frog - Popcorn (ext mpg)

                  http://acr02.fr/membres/srv2/video/DJ Crazy Frog - Popcorn.mpg

                  voila le lien de restitution http://acr02.fr/membres/srv2/video/DJ

                  il ne prend pas en compte les espace et certain signe comme les . les espaces et les -

                  la video est bien sur le serveur mais le lien n'est pas bon
                  1. Contributeur
                    on progresse, on progresse !
                    -;o)

                    et bas y a qu'a lui donner de fichier correct !
                    avec PHP 5 on a des filtres !!!

                    appliques ça à ton nom de fichier de destination avant d'
                    uploader
                    .
                    $url = filter_var( $url, FILTER_SANITIZE_URL );
                    
                    1. a quel endroit

                      <html>
                      <body>
                      <center>
                      <?php
                      // Repertoire de stockage des images
                      
                      $repedest = "video/";
                      $valid_ext = array('avi','swf','mpg','wmv','mkv','mov','mpeg4');
                      $taille_max = 35000000000;
                      if ((!in_array( substr(strrchr($fichier_name, '.'), 1), $valid_ext ) )  ||  filesize($fichier) > $taille_max) {
                      echo "<big>Veuillez s&eacute;lectionner un fichier de type mpg, avi, swf, mpeg4 de moins de 35mo !</big>";
                      } else {
                      
                      
                      
                      if ( file_exists($repedest.$fichier_name) ) {
                      echo "<big>Le fichier ".$fichier_name." existe déjà !!</big>";
                      } else {
                      if ( !file_exists($fichier) ) {
                      echo "<big>Erreur d'upload...</big>";
                      } else { // ici on déplace le fichier ou on veut
                      if ( !@copy($fichier,$repedest.$fichier_name) ) {
                      echo "<big>Erreur, contactez l'administrateur...</big>";
                      } else {
                      echo "<big>Fichier ".$fichier_name." ajouté</big>";
                      echo "<br><br>Pour afficher votre video dans une page, inserez le code suivant : <b><a href =http://acr02.fr/membres/srv2/video/".$fichier_name.">http://acr02.fr/membres/srv2/video/".$fichier_name."</a></b>";
                      }
                      }
                      }
                      }
                      ?>
                      <br>
                      <br>
                      <a href=upload.html>[Retour a l'accueil]</a>
                      <a href=upload.html>[Charger une nouvelle video]</a>
                      </center>
                      </body>
                      </html>
                      1. Contributeur
                        fouillouillou ce bazard !
                        -;o)
                        <html>
                        <body>
                        <center>
                        <?php
                        // Repertoire de stockage des images
                        
                        $repedest = "video/";
                        $valid_ext = array('avi','swf','mpg','wmv','mkv','mov','mpeg4');
                        $taille_max = 35000000000;
                        if ((!in_array( substr(strrchr($fichier_name, '.'), 1), $valid_ext ) )  ||  filesize($fichier) > $taille_max) {
                        echo "<big>Veuillez s&eacute;lectionner un fichier de type mpg, avi, swf, mpeg4 de moins de 35mo !</big>";
                        } else {
                        
                        
                        
                        if ( file_exists($repedest.$fichier_name) ) {
                        echo "<big>Le fichier ".$fichier_name." existe déjà !!</big>";
                        } else {
                        if ( !file_exists($fichier) ) {
                        echo "<big>Erreur d'upload...</big>";
                        } else { // ici on déplace le fichier ou on veut
                        if ( !@copy( $fichier,filter_var( $repedest.$fichier_name, FILTER_SANITIZE_URL  ) ) ) {
                        echo "<big>Erreur, contactez l'administrateur...</big>";
                        } else {
                        echo "<big>Fichier ".$fichier_name." ajouté</big>";
                        echo "<br><br>Pour afficher votre video dans une page, inserez le code suivant : <b><a href =http://acr02.fr/membres/srv2/video/".$fichier_name.">http://acr02.fr/membres
                        /srv2/video/".$fichier_name."</a></b>";
                        }
                        }
                        }
                        }
                        ?>
                        <br>
                        <br>
                        <a href=upload.html>[Retour a l'accueil]</a>
                        <a href=upload.html>[Charger une nouvelle video]</a>
                        </center>
                        </body>
                        </html>

                        il voudra peut être que tu intercales une variable.
                        et ton code est pas des plus orthodoxes, il utilise pas 'move_uploaded_file()' qui est pourtant faite pour !
                        1. comme je te l'ai deja dit je suis novice en php si tu peut m'explique clairement voir avec un exemple
                          que ce post me serve a avancer car la je nage complet
                          merci d'avance
                          en plus j'aimerais que le lien me donne le lien diret plu le lien avec lecteur

                          <OBJECT
                             classid="CLSID:22D6F312-B0F6-11D0-94AB-0080C74C7E95"
                             codebase="http://activex.microsoft.com/activex/
                             controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701" Name="MediaPlayer" ID="MediaPlayer"
                             style="BACKGROUND-IMAGE: images/sons/beuzaf.com.jpg; background-position: center center;">
                                    <param name="AutoStart" value="True">
                                    <param name="AutoSize" value="false"200" height="200"">
                                    <param name="DisplaySize" value="0">
                                    <param name="EnableContextMenu" value="False">
                                    <param name='src' value='http://acr02.fr/membres/srv2/titre.wmv'.<embed src='http://beuzaf.com/clip/clips/le-parking_consequence.wmv' type='audio/x-pn-realaudio-plugin' console='Clip1' controls='ImageWindow'          <param name="ShowControls" value="False">
                          
                                    <param name="ShowStatusBar" value="True">
                          </object>
                          1. Contributeur
                            regarde ce source.
                            il y a une gestion complète des erreurs, je t'ai ajouté des commentaires. dans ce cas c'était pour des images.
                            <?php
                            define( 'IMAGE_MAX_SIZE', 35000000000 ); // la valeur est fixe donc une constante plutôt qu'une variable, en général on mets les constantes en début de document, comme ça on peut modifier les paramètres sans avoir à chercher dans le code.
                            define( 'REP_DEST', 'video/' ); 
                            
                            try // un bloc Try..Catch, toutes les erreurs qui se produisent dans Try sont gérées par toi dans le Catch
                            {
                            	// et c'est parti !
                            	if( !isset( $_FILES['img'] ) ) //on vérifie qu'il y ait bien un fichier de chargé, sinon on lève une erreur qui sera gérée par le Catch (on l'affichera en fait)
                            	{
                            		throw new Exception( 'Aucun fichier &agrave; t&eacute;l&eacute;charger.');
                            	}
                            
                            	$extension = strtolower( strrchr( $_FILES['img']['name'], '.' ) ); // on récupère l'extension du fichier en minuscules
                            
                            	if( !in_array( $extension, array( '.gif', '.jpg', '.jpeg', '.png' ) ) ) // on vérifie que l'extension soit autorisée, sinon : erreur !
                            	{
                            		throw new Exception( 'Vous devez uploader un fichier de type gif, jpg, jpeg.');
                            	}
                            	
                            	if( filesize( $_FILES['img']['tmp_name'] ) > IMAGE_MAX_SIZE ) // on vérifie que la taille du fichier soit inférieure au max, sinon...
                            	{
                            		throw new Exception( 'Le fichier est trop volumineux.');
                            	}
                            
                            	$fileName = filter_var( $_FILES['img']['name'], FILTER_SANITIZE_URL ); // on crée le nom du fichier sur le serveur, en fait on nettoie le nom du fichier qui a été envoyé (pas d'espaces, de caractères spéciaux...)
                            
                            	if( move_uploaded_file( $_FILES['img']['tmp_name'], REP_DEST.$fileName ) ) // on tente de transférer le fichier du dossier temporaire jusqu'au dossier que tu as choisi.
                            	{
                            		echo( "<p>Transfert r&eacute;ussi.</p>\n" ) // si c'est ok, on dit "Bravo !"
                            	}
                            	else
                            	{
                            		throw new Exception( 'Echec de l\'upload.'); // sinon on lève une erreur
                            	}
                            }
                            Catch ( Exception $e )
                            {
                            	echo( "<p>".$e->getMessage()."</p>\n" ); // quand une erreur est levée, elle attérie là et est affichée.
                            }		
                            ?>
                            1. desole mais je pige pas ....

                              ca me soule tout marche sauf que les esoace et les points ne sont pas pris en charge ce qui fait que le lien final n'est pas bon malgre que le fichier soit bien uploader sur le serveur..
                              1. Contributeur
                                t'as essayé ce que je t ai mis en <11> ?
                                c'est souligné au milieu du code
                                if ( !@copy( $fichier,filter_var( $repedest.$fichier_name, FILTER_SANITIZE_URL  ) ) ) {
                                1. tester et non apres l'upload le module disparait et je n'est plus le lien
                                  1. et avec un tru comme ca ca pourrais pas coller

                                    
                                    $dest_fichier = strtr($dest_fichier,
                                    
                                    'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
                                    
                                    'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
                                    
                                    // remplacer les caracteres autres que lettres, chiffres et point par _
                                    
                                    $dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier);


                                    ou

                                    {
                                    				$nom_img = preg_replace("/\.([a-zA-Z]{3,4})$/i", "_".time().".\\1", $nom_img);
                                    			}
                                    1. Contributeur
                                      ba si !
                                      c'est la même chose !

                                      prend le premier, le deuxième a joute l'horodatage.
                                      1. Contributeur
                                        <html>
                                        <body>
                                        <center>
                                        <?php
                                        // Repertoire de stockage des images
                                        
                                        $repedest = "video/";
                                        $valid_ext = array('avi','swf','mpg','wmv','mkv','mov','mpeg4');
                                        $taille_max = 35000000000;
                                        if ((!in_array( substr(strrchr($fichier_name, '.'), 1), $valid_ext ) )  ||  filesize($fichier) > $taille_max) {
                                        echo "<big>Veuillez s&eacute;lectionner un fichier de type mpg, avi, swf, mpeg4 de moins de 35mo !</big>";
                                        } else {
                                        
                                        
                                        
                                        if ( file_exists($repedest.$fichier_name) ) {
                                        echo "<big>Le fichier ".$fichier_name." existe déjà !!</big>";
                                        } else {
                                        if ( !file_exists($fichier) ) {
                                        echo "<big>Erreur d'upload...</big>";
                                        } else { // ici on déplace le fichier ou on veut
                                        
                                        $dest_fichier = $repedest.$fichier_name;
                                        
                                        $dest_fichier = strtr($dest_fichier,'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
                                        
                                        $dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier);
                                        
                                        
                                        if ( !@copy( $fichier, $dest_fichier ) ) {
                                        echo "<big>Erreur, contactez l'administrateur...</big>";
                                        } else {
                                        echo "<big>Fichier ".$fichier_name." ajouté</big>";
                                        echo "<br><br>Pour afficher votre video dans une page, inserez le code suivant : <b><a href =http://acr02.fr/membres/srv2/video/".$fichier_name.">http://acr02.fr/membres
                                        
                                        /srv2/video/".$fichier_name."</a></b>";
                                        }
                                        }
                                        }
                                        }
                                        ?>
                                        <br>
                                        <br>
                                        <a href=upload.html>[Retour a l'accueil]</a>
                                        <a href=upload.html>[Charger une nouvelle video]</a>
                                        </center>
                                        </body>
                                        </html>
                                        • 1
                                        • 2