Я использую 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);