IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Upload] upload de plusieurs fichiers


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Avatar de jc_cornic
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    623
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 623
    Points : 823
    Points
    823
    Par défaut [Upload] upload de plusieurs fichiers
    Bonsoir, j'ai un site familial avec des diaporamas, des vidéos de ma famille visible uniquement par ma famille (j'espere) car log/passwd necessaires

    Bref, je voudrais faire l'upload par le site et pas par un ftp quelconque...
    Pour l'instant, j'y arrive mais les fichiers un par un.

    Mon code se trouve dans deux fichiers
    indexPrive.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    		echo"
    		<form enctype=\"multipart/form-data\" action=\"./upload.php?dir=$dir&diapoSelected=$nbDiapo&ajoutImage=1\" method=\"post\">
    		    <input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"400000\" >
    		    Choose a file to upload: <input name=\"userfile\" type=\"file\" >
    		    <input type=\"submit\" value=\"Upload File\" >
    		</form>
    		";

    Et upload.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadFile))
    {
     
    	if ($image != 0)
    	{
    		if ( ($tab[$index] != "jpg") && ($tab[$index] != "JPG") )
    		{
    			unlink($uploadFile);
    			$msg = "Vous ne pouvez ajouter ici que des fichiers de type file.jpg";
    			header ("location: ./index1024.php?id=200&diapo=0&diapoSelected=$nbDiapo&msg=$msg");
    		}
     
    		else if ($size > 200000)
    		{
    			unlink($uploadFile);
    			$msg = "La taille de votre fichiers ne doit pas excéder 200 Ko";
    			header ("location: ./index1024.php?id=200&diapo=0&diapoSelected=$nbDiapo&msg=$msg");
    		}
     
    		else 
    		{
    			createGoodImages($uploadFile);
    				unlink($uploadFile);
    			header ("location: ./index1024.php?id=200&diapo=0&diapoSelected=$nbDiapo&imageSelected=$nbImages");
    		}
    	}
    En gros, createGoodImage est une fonction qui genere a partir d'un fichier image, une vignette et une grande image...


    Bon, ce code fonctionne mais je ne peux envoyer les fichiers que un par un...

    2 solutions:
    - soit on peut selectionner plusieurs fichiers dans le "parcourir..."
    - soit j'upload un zip que je dezippe avec php

    POur la deuxieme soluce, AIDE !!!! comment on dezippe ?

    ++
    JC
    VELOMASTER, idée cadeau ? un jeu de plateau

    Hummmmm, des donuts !!!!

    Merci de penser à , et et aussi

  2. #2
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Le seul problème avec ta solution c'est qu'à ma connaissance on ne peut pas faire du multi select dans un input file. DOnc pour faire ton zip c'est un peu rater sur ce coup. Mais il existe la solution du plusieurs input. Voici un exemple concret : Comment envoyer un fichier depuis le navigateur sur le serveur à travers un formulaire HTML ?

    Pour infos tu peux générer plusieurs input file juste avec un select ou avec un bouton qui ajoutera les fichiers un peu à la méthode de hotmail.

  3. #3
    Membre éclairé
    Avatar de jc_cornic
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    623
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 623
    Points : 823
    Points
    823
    Par défaut
    ok merci, c'est la solution que je vais utiliser, le multi input...
    Par contre, un doute m'habite... Les deux contraintes, 30 secondes de timeout et le 2Mo max par fichier uploadé par mon hébergeur.

    Si j'ai 10 input, il va tenter d'uploader mes 10 fichiers en 30 secondes ou il va faire les fichiers un par un... ???

    Merci d'avance...
    JC
    VELOMASTER, idée cadeau ? un jeu de plateau

    Hummmmm, des donuts !!!!

    Merci de penser à , et et aussi

  4. #4
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    SI tu utilises un foreach chaque fichier aura son propre temps d'upload. demême avec un for. DOnc tu as aucun soucis dans le cas d'un multi-upload. Il aura pu en avoir un si tu faisais un zip de tous les fichiers et que tu l'uploadais. La taille sera peut etre dépassé .

    En gros vas-y cette méthode fonctionnera sans te poser de problème (enfin je crois , et surtout tout dépend du code )

  5. #5
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Je peux te proposer ce code d'exemple :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    <?php
    //===============================================================================
    //
    //  UPLOAD HTTP - Sub0 - 08/07/05
    //
    //===============================================================================
    $maxfiles = 3;
    $maxsize = 2000000;
    $finaldir = 'upload';
     
     
    //===============================================================================
    //  TRAITEMENT DU FORMULAIRE
    //===============================================================================
    if(isset($_POST['valider'])){
     
      //=============================================================================
      //  TEST DU NOMBRE DE FICHIERS POSTES
      //=============================================================================
      $nbr=0;
      for($x=0;$x<$maxfiles;$x++) 
        if(!empty($_FILES['userfile']['name'][$x])) $nbr++;
      if($nbr<=0) die("Aucun fichier spécifié !<br/>"); 
     
      //=============================================================================
      //  CREATION DE L'ARBORESCENCE POUR LE DOSSIER DESTINATION
      //=============================================================================
      if(!empty($finaldir)) { 
         if(substr($finaldir,strlen($finaldir)-1,1)=='/') $finaldir.='/'; 
         $dir=explode('/',$finaldir); 
         $finaldir=''; 
         for($x=0;$x<count($dir);$x++) { 
            $finaldir.=$dir[$x].'/'; 
            if(!@is_dir($finaldir)) @mkdir($finaldir,0777); 
         } 
         if(!@is_dir($finaldir)) die("Le dossier $finaldir est invalide !<br/>"); 
      } 
     
      //=============================================================================
      //  TELECHARGEMENT DES FICHIERS
      //=============================================================================
      for($x=1;$x<=$maxfiles;$x++) {
        $errorhttp=$_FILES['userfile']['error'][$x-1];
        $filenamehttp=$_FILES['userfile']['name'][$x-1];
        $typehttp=$_FILES['userfile']['type'][$x-1]; 
        $sizehttp=$_FILES['userfile']['size'][$x-1];
        $tmpfilehttp=$_FILES['userfile']['tmp_name'][$x-1];
        if (($errorhttp)and(!empty($filenamehttp))) { 
          switch ($errorhttp){ 
            case 1: echo "Erreur : Le fichier n°$x est trop grand !<br/>";break; 
            case 2: echo "Erreur : Le fichier n°$x est trop grand !<br/>";break; 
            case 3: echo "Erreur : Transfert du fichier n°$x interrompu !<br/>";break; 
            case 4: echo "Erreur : Le fichier n°$x est vide !<br/>";break; 
          } 
        } else {      
          if((!empty($filenamehttp))and($sizehttp>0)) {
            if($sizehttp<=$maxsize){
              if(@is_uploaded_file($tmpfilehttp)) { 
                 if(@eregi('.php',$filenamehttp)) $filenamehttp.='.txt'; 
                 if(filesize($tmpfilehttp)==$sizehttp) {
                   if(@move_uploaded_file($tmpfilehttp,$finaldir.$filenamehttp)) { 
                      @chmod($filenamehttp,0777); 
                      echo "Fichier n°$x uploadé : ".basename($filenamehttp).
                           " (".round(max($sizehttp,1024)/1024)." ko)<br/>";
                   } else echo "Erreur de téléchargement du fichier n°$x !<br/>"; 
                 } else echo "Erreur de téléchargement du fichier n°$x !<br/>";
              } else echo "Erreur de téléchargement du fichier n°$x !<br/>"; 
            } else echo "Erreur : Le fichier n°$x est trop grand !<br/>"; 
          } // else echo "Le fichier n°$x est introuvable ou vide !<br/>";
        }
      }
     
      die ("Opération terminée.<br/>");
    }
     
    //===============================================================================
    //  FORMULAIRE HTML
    //===============================================================================
    echo '<form method="post" enctype="multipart/form-data"'.
         ' onSubmit="document.getElementById(\'valider\').style.visibility=\'hidden\';">'. 
         '<input type="hidden" name="MAX_FILE_SIZE" value="'.$maxsize.'"/>';
    for($x=1;$x<=max($maxfiles,1);$x++)
      echo ' Fichier n°'.$x.' : <input type="file" name="userfile[]" size="20"/><br/>';
    echo '<br/><input type="submit" name="valider" value="Envoyer..."/>'.
         '</form>';
     
     
    //===============================================================================
    ?>
    De retour parmis vous après 10 ans!!

  6. #6
    Membre éclairé
    Avatar de jc_cornic
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    623
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 623
    Points : 823
    Points
    823
    Par défaut
    le for doit etre uniquement pour le traitement des fichiers, pas forcément pour la déclaration des inputs ???

    est-ce que code m'évitera les problèmes de timeout ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    for ($i=0 ; $i<count($_FILES['userfile']['tmp_name']) ; $i++)
    {
    	$uploadFile = $uploadDir . $_FILES['userfile']['name'][$i];
    	$size = $_FILES['userfile']['size'][$i];
    	$tab = explode(".", $uploadFile);
    	$index = count($tab)-1;
     
    	if (move_uploaded_file($_FILES['userfile']['tmp_name'][$i], $uploadFile))
    	{
    		if ( ($tab[$index] != "jpg") && ($tab[$index] != "JPG") )
    		{
    		             unlink($uploadFile);
    			$msg = "Vous ne pouvez ajouter ici que des fichiers de type file.jpg";
    			if ($i==count($_FILES['userfile']['tmp_name'])-1)
    			         header ("location: ./blablabla");
    		}
    		else if ($size > 200000)
    		{
    			unlink($uploadFile);
    			$msg = "La taille de votre fichiers ne doit pas excéder 200 Ko";
                        		if ($i==count($_FILES['userfile']['tmp_name'])-1)
    				header ("location: ./blabla");
    		}
    		else 
    		{
    			createGoodImages($uploadFile);
    			unlink($uploadFile);
    			if ($i==count($_FILES['userfile']['tmp_name'])-1)
    				header ("location: ./blabla");
    		}
    	}
    	else
    	{
    		//myAlert("Vous ne pouvez ajouter ici que des fichiers de type file.jpg");
    		$msg = "impossible d'uploader votre fichier...";
    		header ("location: ./blabla");
    	}
    }
    Le code marche, c juste pour une vérif au niveau de l'utilisation du for...

    Merci encore pour vos réponses

    ++
    JC
    VELOMASTER, idée cadeau ? un jeu de plateau

    Hummmmm, des donuts !!!!

    Merci de penser à , et et aussi

  7. #7
    Membre éclairé
    Avatar de jc_cornic
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    623
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 623
    Points : 823
    Points
    823
    Par défaut
    OK, je viens de tester, 4 photos de 300 Ko chacune, un traitement pour creer une vignette et une grande image, les renommer et effacer la photo uploader, ca dépasse 30 secondes et ca marche !!!

    Cool

    Merci les amis !!!!!

    ++
    JC
    VELOMASTER, idée cadeau ? un jeu de plateau

    Hummmmm, des donuts !!!!

    Merci de penser à , et et aussi

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 28
    Points : 14
    Points
    14
    Par défaut pb avec ce code
    bonjour,
    Désolé de revenir sur ce vieux topic

    J'essaie d'utiliser le code donnée par Sub0 mais en fait il n'upload que les 20 premiers fichiers alors que j'en autorise 60.
    il ne me donne aucun message d'erreur et me dit que tout s'est bien passé mais je n'ai que les 20 premiers... si vous pouviez m'aider ce serait génial.

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 12/11/2012, 16h05
  2. Upload parallelle de plusieurs fichiers sur même domain.
    Par Fabouney dans le forum Général Conception Web
    Réponses: 0
    Dernier message: 05/10/2009, 12h05
  3. [MySQL] Uploader un ou plusieurs fichiers
    Par BRUNO71 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 13/05/2009, 22h56
  4. [Upload] Upload d'un gros fichier + barre de progression
    Par Night_owl dans le forum Langage
    Réponses: 4
    Dernier message: 27/03/2008, 15h14
  5. [Upload] Upload de beaucoup de fichier sur 1&1
    Par stilobique dans le forum Langage
    Réponses: 4
    Dernier message: 07/09/2007, 13h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo