Несколько загрузок файлов с помощью cURL

Я использую 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[] изображений upload[] в массив почтовых полей, но я не знаю, как это сделать. Я пытаюсь подражать этому:

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

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

вот ваша ошибка в вызове 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' ); 

Сам код выглядит нормально, но я не знаю о вашем целевом каталоге 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]; } 

(Я разделяю эхо на несколько строк для удобочитаемости).