2010-03-13 4 views
-4

var_dump($_FILES) donne ce qui suit:Comment traiter <input type = "fichier" name = "test1 [f]" /> en PHP?

array 
    'test1' => 
    array 
     'name' => 
     array 
      'f' => string 'ntuser.dat.LOG' (length=14) 
     'type' => 
     array 
      'f' => string 'application/octet-stream' (length=24) 
     'tmp_name' => 
     array 
      'f' => string 'D:\wamp\tmp\php223.tmp' (length=22) 
     'error' => 
     array 
      'f' => int 0 
     'size' => 
     array 
      'f' => int 0 

Pourquoi http conçu de cette façon Comment puis-je traiter efficacement le tableau (ce qui signifie parfois pas looping?) Donc je peux obtenir le fichier par $_FILES['test1']['f']?

Répondre

1

semble être assez simple:

$filepath = $_FILES["test1"]["tmp_name"]["f"]; 
4

Je suppose que input champs de type file ne sont pas destinés à être utilisés avec tableau comme noms. Utilisez

<input type="file" name="test1_f" /> 

à la place et l'accès à $_FILES['test1_f'].

Sinon, vous ne pouvez pas accéder aux attributs uniques du fichier sans boucler. Vous pouvez peut-être nous montrer comment vous créez les éléments d'entrée et comment vous voulez traiter la matrice $_FILES afin de fournir une meilleure solution.

Mise à jour:
Je dois redessiner en partie ma déclaration. As described here, PHP prend en charge HTML array feature également pour les fichiers. Mais le point avec ceci est que les fichiers du côté du serveur doivent être traités dans leur ensemble.
Ils fournissent également un bel exemple comment traiter aussi, peut-être vous aide:

foreach ($_FILES["pictures"]["error"] as $key => $error) { 
    if ($error == UPLOAD_ERR_OK) { 
     $tmp_name = $_FILES["pictures"]["tmp_name"][$key]; 
     $name = $_FILES["pictures"]["name"][$key]; 
     move_uploaded_file($tmp_name, "data/$name"); 
    } 
} 

Si vous voulez avoir accès à un seul fichier, vous utilisez simplement la mauvaise approche.

+0

+1 Vous pouvez rebattre le tableau en quelque sorte, mais je voudrais aller avec cette suggestion - plus facile. –

+0

oui, donc on peut juste foreach $ _FILES. très utile –

-4

Voici la solution:

static public function convertFileInformation(array $taintedFiles) 
    { 
    $files = array(); 
    foreach ($taintedFiles as $key => $data) 
    { 
     $files[$key] = self::fixPhpFilesArray($data); 
    } 
    return $files; 
    } 
    static protected function fixPhpFilesArray($data) 
    { 
    $fileKeys = array('error', 'name', 'size', 'tmp_name', 'type'); 
    $keys = array_keys($data); 
    sort($keys); 
    if ($fileKeys != $keys || !isset($data['name']) || !is_array($data['name'])) 
    { 
     return $data; 
    } 
    $files = $data; 
    foreach ($fileKeys as $k) 
    { 
     unset($files[$k]); 
    } 
    foreach (array_keys($data['name']) as $key) 
    { 
     $files[$key] = self::fixPhpFilesArray(array(
     'error' => $data['error'][$key], 
     'name'  => $data['name'][$key], 
     'type'  => $data['type'][$key], 
     'tmp_name' => $data['tmp_name'][$key], 
     'size'  => $data['size'][$key], 
    )); 
    } 
    return $files; 
    }