Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/10/2006, 20h56   #1
Membre expérimenté
 
Avatar de jc_cornic
 
Inscription : octobre 2006
Messages : 624
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : octobre 2006
Messages : 624
Points : 588
Points : 588
Envoyer un message via MSN à jc_cornic
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 :
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 :
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
jc_cornic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/10/2006, 01h32   #2
Inactif
 
Avatar de Kerod
 
Inscription : septembre 2004
Messages : 11 753
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 11 753
Points : 14 585
Points : 14 585
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.
Kerod est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/10/2006, 18h32   #3
Membre expérimenté
 
Avatar de jc_cornic
 
Inscription : octobre 2006
Messages : 624
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : octobre 2006
Messages : 624
Points : 588
Points : 588
Envoyer un message via MSN à jc_cornic
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
jc_cornic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/10/2006, 23h50   #4
Inactif
 
Avatar de Kerod
 
Inscription : septembre 2004
Messages : 11 753
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 11 753
Points : 14 585
Points : 14 585
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 )
Kerod est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2006, 03h28   #5
Expert Confirmé
 
Avatar de Sub0
 
Homme
Inscription : décembre 2002
Messages : 3 468
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 39

Informations forums :
Inscription : décembre 2002
Messages : 3 468
Points : 3 115
Points : 3 115
Envoyer un message via MSN à Sub0 Envoyer un message via Skype™ à Sub0
Je peux te proposer ce code d'exemple :
Code php :
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>';
 
 
//===============================================================================
?>
Sub0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2006, 13h54   #6
Membre expérimenté
 
Avatar de jc_cornic
 
Inscription : octobre 2006
Messages : 624
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : octobre 2006
Messages : 624
Points : 588
Points : 588
Envoyer un message via MSN à jc_cornic
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 :
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
jc_cornic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2006, 14h41   #7
Membre expérimenté
 
Avatar de jc_cornic
 
Inscription : octobre 2006
Messages : 624
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : octobre 2006
Messages : 624
Points : 588
Points : 588
Envoyer un message via MSN à jc_cornic
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
jc_cornic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/07/2010, 17h33   #8
Invité de passage
 
Inscription : mars 2008
Messages : 19
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 19
Points : 4
Points : 4
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
Macfplus est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h26.


 
 
 
 
Partenaires

Hébergement Web