2009-06-23 14 views
0

Voici le code que j'utilise. Je n'arrive pas à voir où le problème est - il est destiné à télécharger plusieurs fichiers sur ceux qui sortent. La chose amusante est que parfois, il télécharge un seul fichier, puis ne télécharge rien.Problème de téléchargement de plusieurs fichiers

Quelqu'un peut-il aider à me regarder dans ce s'il vous plaît ..

<pre><code> 
<?php 

/*** the upload directory ***/ 
$upload_dir= './uploads'; 

/*** numver of files to upload ***/ 
$num_uploads = 5; 

/*** maximum filesize allowed in bytes ***/ 
$max_file_size = 999999951200; 

/*** the maximum filesize from php.ini ***/ 
$ini_max = str_replace('M', '', ini_get('upload_max_filesize')); 
$upload_max = $ini_max * 99999991024; 

/*** a message for users ***/ 
$msg = 'Please select files for uploading'; 

/*** an array to hold messages ***/ 
$messages = array(); 

/*** check if a file has been submitted ***/ 
if(isset($_FILES['userfile']['tmp_name'])) 
{ 
    /** loop through the array of files ***/ 
    for($i=0; $i < count($_FILES['userfile']['tmp_name']);$i++) 
    { 
     // check if there is a file in the array 
     if(!is_uploaded_file($_FILES['userfile']['tmp_name'][$i])) 
     { 
      $messages[] = 'No file uploaded'; 
     } 
     /*** check if the file is less then the max php.ini size ***/ 
     elseif($_FILES['userfile']['size'][$i] > $upload_max) 
     { 
      $messages[] = "File size exceeds $upload_max php.ini limit"; 
     } 
     // check the file is less than the maximum file size 
     elseif($_FILES['userfile']['size'][$i] > $max_file_size) 
     { 
      $messages[] = "File size exceeds $max_file_size limit"; 
     } 
     else 
     { 
      // copy the file to the specified dir 
      if(@copy($_FILES['userfile']['tmp_name'][$i],$upload_dir.'/'.$_FILES['userfile']['name'][$i])) 
      { 
       /*** give praise and thanks to the php gods ***/ 
       $messages[] = $_FILES['userfile']['name'][$i].' uploaded'; 
      } 
      else 
      { 
       /*** an error message ***/ 
       $messages[] = 'Uploading '.$_FILES['userfile']['name'][$i].' Failed'; 
      } 
     } 
    } 
} 
?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
<title>Multiple File Upload</title> 
</head> 

<body> 

<h3><?php echo $msg; ?></h3> 

<p> 
<?php 
if(sizeof($messages) != 0) 
{ 
    foreach($messages as $err) 
    { 
     echo $err.'<br />'; 
    } 
} 
?> 
</p> 

<form enctype="multipart/form-data" action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post"> 
<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $upload_max; ?>" /> 
<?php 
$num = 0; 
while($num < $num_uploads) 
{ 
    echo '<div><input name="userfile[]" type="file" /></div>'; 
    $num++; 
} 
?> 
<input type="submit" value="Upload" /> 
</form> 

</body> 
</html> 

</code></pre> 
+0

Vous traitez vos champs d'entrée [fichier] sous forme de tableau? par exemple. . – anddoutoi

+0

Oui, je le traite comme un tableau, je ne sais pas ce qui ne s'affiche pas correctement sur ce site :(Je vais essayer de reformater le code ... –

+0

Ahh, c'était le format du code qui m'a eu = P désolé – anddoutoi

Répondre

1

tout d'abord ne pas utiliser la copie() pour déplacer les fichiers. Il y a une fonction appelée move_uploaded_file() Cette fonction vérifie si le fichier a vraiment été téléchargé et empêche le déplacement de fichiers qui ne sont pas censés être déplacés.

2ème. Regardez la valeur d'erreur de chaque fichier téléchargé, car vous pourriez être en train de déclencher des erreurs sur le téléchargement.

Mise à jour.

Essayez de couper votre solution jusqu'à ses os nus. Passer le rapport d'erreur jusqu'à ce que vous l'ayez fonctionné. Cela vous aidera à savoir quelle est la viande et les pommes de terre exactes du code et vous aidera à bien faire fonctionner cette partie avant de contourner les erreurs possibles.

2e mise à jour.

Voici une version réduite de votre code. Ça marche pour moi.

http://cznp.com/1032712.phps

Ce que je devais faire est aussi faire le dossier que je vous écris pour faire inscriptible mon serveur web.

+0

Merci Olafur, il n'y a pas d'erreur signalée.Il me fait vraiment énervé :(Je déteste quand le code ne fonctionne pas et pas d'erreurs –

+0

Aweeeeeeseeome stuff :) :) Vous êtes un épargnant de vie. Quel était le problème avec mon code? –

+0

Vous n'utilisiez pas move_uploaded_file, c'est ce que je pense. Le repos était à peu près le même. –

Questions connexes