Несколько загрузок файлов с помощью cURL - PullRequest
5 голосов
/ 10 августа 2011

Я использую cURL для передачи файлов изображений с одного сервера на другой, используя PHP.Это мой код cURL:

// Transfer the original image and thumbnail to our storage server
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_VERBOSE, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, 'http://' . $server_data['hostname'] . '.localhost/transfer.php');
curl_setopt($ch, CURLOPT_POST, true);
$post = array(
    'upload[]' => '@' . $tmp_uploads . $filename,
    'upload[]' => '@' . $tmp_uploads . $thumbname,
    'salt' => 'q8;EmT(Vx*Aa`fkHX:up^WD^^b#<Lm:Q'
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post); 
$resp = curl_exec($ch);

Это код в файле Transfer.php на сервере, на который я загружаю:

if($_FILES && $_POST['salt'] == 'q8;EmT(Vx*Aa`fkHX:up^WD^^b#<Lm:Q')
{
    // Save the files
    foreach($_FILES['upload']['error'] as $key => $error)
    {
        if ($error == UPLOAD_ERR_OK)
        {
            move_uploaded_file($_FILES['upload']['tmp_name'][$key], $_FILES['upload']['name'][$key]);
        }
    }
}

Кажется, все работает, кроме одного маленькогологическая ошибкаТолько один файл сохраняется на сервере, на который я передаю.Вероятно, это связано с тем, что я вызываю оба изображения upload[] в своем массиве полей записей, но я не знаю, как еще это сделать.Я пытаюсь имитировать это:

<input type="file" name="upload[]" />
<input type="file" name="upload[]" />

Кто-нибудь знает, как я могу заставить это работать?Спасибо!

Ответы [ 2 ]

3 голосов
/ 10 августа 2011

вот ваша ошибка в вызове curl ...

var_dump($post)

вы засоряете записи массива вашего массива $ post, поскольку строки ключей идентичны ...

внести изменения

$post = array(
    'upload[0]' => '@' . $tmp_uploads . $filename,
    'upload[1]' => '@' . $tmp_uploads . $thumbname,
    'salt' => 'q8;EmT(Vx*Aa`fkHX:up^WD^^b#<Lm:Q'
);
0 голосов
/ 10 августа 2011

Сам код выглядит нормально, но я не знаю о вашей целевой директории move (). Вы используете необработанное имя файла, предоставленное клиентом (это ваш скрипт curl). Вы используете исходное загруженное имя файла (как указано в сценарии curl) в качестве цели перемещения, без проверки перезаписи и данных пути. Если два загруженных файла имеют одно и то же имя файла, вы будете перезаписывать первое обработанное изображение тем, которое было обработано вторым PHP.

Попробуйте отладить команду move ():

if (!move_uploaded_file($_FILES['upload']['tmp_name'][$key], $_FILES['upload']['name'][$key])) {
   echo "Unable to move $key/";
   echo $_FILES['upload']['tmp_name'][$key];
   echo ' to ';
   echo $_FILES['upload']['name'][$key];
}

(я разложил эхо на несколько строк для разборчивости).

...