2010-03-13 67 views
-4

var_dump($_FILES)給出如下:?如何在PHP中處理<input type =「file」name =「test1 [f]」/>?

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 

爲什麼HTTP這樣設計我怎樣纔能有效地處理陣列(有時也指無循環?),所以我可以通過$_FILES['test1']['f']得到的文件?

回答

1

似乎是相當簡單:

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

我想用fileinput字段並不意味着與陣列像名稱中使用。 使用

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

,而不是與$_FILES['test1_f']訪問。

否則,無法循環訪問文件的單個屬性。

也許您可以向我們展示如何創建輸入元素以及如何處理$_FILES陣列以提供更好的解決方案。

更新:
我必須重新繪製我的聲明部分。 As described here,PHP也支持HTML array feature文件。但重點在於,服務器端的文件應該作爲一個整體進行處理。
他們還提供了一個很好的例子,如何過處理,也許它可以幫助你:

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"); 
    } 
} 

如果你想訪問一個文件,那麼你只需要使用錯誤的做法。

+0

+1你能以某種方式重新洗牌的數組,但我想這個建議去 - 比較容易的方式。 – 2010-03-13 15:50:03

+0

是的,所以你可以foreach $ _FILES。非常便利 – 2010-03-13 16:40:51

-4

這裏是解決方案:

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; 
    } 
相關問題