我正在使用CURL來創建一個轉發多部分表單的PHP代理。
表單有一個輸入類型=「文件」。
代理收到以下數據:
array
'foo' =>
array
'name' => string 'wt.jpg' (length=6)
'type' => string 'image/jpeg' (length=10)
'tmp_name' => string '/tmp/phpoIvraK' (length=14)
'error' => int 0
'size' => int 7427
所以我期待網頁在年底接收相同的陣列(除tmp_name的值) 現在我收到此:
'foo' =>
array
'name' => 'phpoIvraK'
'type' => 'image/jpeg'
'tmp_name' => '/tmp/php5ZhCwy'
'error' => 0
'size' => 7427
正如您所見,名稱現在是代理正在接收的tmp_name,因此原始文件名會丟失。
這裏的PHP代碼:
$arrFields = $_POST;
foreach($_FILES as $k => $file)
$arrFields[$k] = '@' . $file['tmp_name'] . ';type=' . $file['type'];
curl_setopt($ressource, CURLOPT_POSTFIELDS, $arrFields);
詩:我知道我可以做一個新的變量,但這裏的目標是要尊重可變格式,使代理的使用盡可能透明爲將使用它的人。
難道是我還是唯一的解決方案是在重新發送之前重命名/ tmp中的tmp文件?這看起來有點傻,我...
$arrFields = $_POST;
foreach($_FILES as $k => $file){
move_uploaded_file($file['tmp_name'], $file['name']);
$arrFields[$k] = '@' . $file['name'] . ';type=' . $file['type'];
}
curl_setopt($ressource, CURLOPT_POSTFIELDS, $arrFields);
好te點是它是一個代理。在執行時,我在$ _FILES數組之前完成了嚴格的處理。 因此,基本上,您確認我應該將tmp_name中的tmp文件夾中的所有文件重命名爲名稱? – FMaz008 2011-02-23 21:43:30
嗯,是的,直到你實際上用tmp_uploaded_file從tmp文件夾中移動文件,這個文件實際上就是它所說的那樣...一個臨時文件,在$ _FILES數組中有真實名稱。 – ChrisR 2011-02-23 21:46:27
那麼,在你看來,最好的辦法就是像我最後一個問題的最後一個例子那樣做? – FMaz008 2011-02-23 21:54:01