Я использую 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]; }
(Я разделяю эхо на несколько строк для удобочитаемости).