2010-11-14 23 views
4

Je travaille sur un plugin pour wordpress et je veux être en mesure de télécharger plusieurs photos à partir d'un formulaire. En ce moment, quand j'ai une forme de deux images et le soumettre vide, mon tableau $ _FILES ressemble à ceci:PHP - Télécharger plusieurs fichiers

Array (
    [image] => Array ( 
     [name] => Array ( 
      [1] => 
      [2] => 
     ) 
     [type] => Array ( 
      [1] => 
      [2] => 
     ) 
     [tmp_name] => Array ( 
      [1] => 
      [2] => 
     ) 
     [error] => Array ( 
      [1] => 4 
      [2] => 4 
     ) 
     [size] => Array ( 
      [1] => 0 
      [2] => 0 
     ) 
    ) 
) 

Maintenant, le problème est que je veux utiliser gestionnaire de téléchargement wordpress', wp_handle_upload. Il attend le tableau $ _FILES en tant qu'argument, mais seulement avec un fichier. Je suppose que ça ne peut être que deux réseaux, pas trois comme le mien. Je me demande donc s'il existe un moyen de soumettre les fichiers un par un à partir du tableau $ _FILES. Les fichiers ont la même clé dans chaque tableau.

EDIT: J'ai modifié le post depuis que j'ai appris que wp_handle_upload veut que le tableau $ _FILES soit utilisé comme argument.

+0

Est-ce que vos entrées de fichier portent un nom = comme 'image []'? – mario

Répondre

15

Essayez:

$files = $_FILES['image']; 
foreach ($files['name'] as $key => $value) { 
    if ($files['name'][$key]) { 
    $file = array(
     'name'  => $files['name'][$key], 
     'type'  => $files['type'][$key], 
     'tmp_name' => $files['tmp_name'][$key], 
     'error' => $files['error'][$key], 
     'size'  => $files['size'][$key] 
    ); 
    wp_handle_upload($file); 
    } 
} 
+0

Cela m'a presque tout le chemin, merci! J'ai dû changer $ key dans le tableau en $ x, parce que c'est la variable utilisée pour incrémenter. Maintenant, le seul problème est que quand je laisse un champ vide, il est toujours traité par cette boucle. – Toxid

+0

@Toxid: Voir ma mise à jour, vous pouvez juste envelopper le tout dans un 'if'. – casablanca

+0

Merci beaucoup! J'expérimentais avec ifs mais ne pouvais pas comprendre comment le faire. – Toxid

0

boucle ne pouvait pas vous à travers votre réseau de fichiers, puis appeler les upload_handlers?

par exemple.

for($i = 1; $i <= count($_FILES['image']['name']; $i++) { 
    // just cguessing on the args wp_handle_upload takes 
    wp_handle_upload($_FILES['images']['tmp'][$i], $_FILES['images']['name'][$i]); 
} 
+0

Bonne idée, j'ai aussi pensé à ça. Après avoir fait quelques recherches, je me suis rendu compte que j'avais tort dans mon premier article. Le wp_handle_upload attend le tableau $ _FILES en argument, mais seulement avec un fichier. Donc je suppose que ça ne peut être que deux tableaux de profondeur. – Toxid