Задача такая: из формы (обычная html) нужно загрузить к себе на сервер текстовые поля и файлы (несколько) через ajax. Затем отправить эти данные из формы на другой сервер. Вот форма: HTML: <form method="post" enctype="multipart/form-data"> <input type="text" name="name" required /> <input type="text" name="email" required /> <input type="file" name="request[]" accept="image" multiple required /> </form> JS пропущу, там на сервер отправляется форма и приходит она отлично: $_POST и $_FILES (такой структуры) формируются как надо. Дальше возникает проблема. Нужно, чтобы оба этих массива оказались на другом сервере. Что я делал: PHP: $name = $_POST['name']; $email = $_POST['email']; $url = 'toOtherServer.com'; $response = [ 'name' => $name, 'email' => $email ]; $boundary = "--------------------------" . microtime(true); $data = ""; foreach ($response as $key => $value) { // add some POST fields to the request too: $_POST['foo'] = 'bar' $data .= "--{$boundary}\r\n"; $data .= "Content-Disposition: form-data; name=\"{$key}\"\r\n\r\n{$value}\r\n"; } if (isset($_FILES['request'])) { $uploadDir = 'myDir'; // директория для загрузки for ($i = 0; $i < count($_FILES['request']['name']); $i++) { if ($_FILES['request']['error'][$i] == UPLOAD_ERR_OK) { $fullPath = "{$uploadDir}/{$_FILES['request']['name'][$i]}"; // полный путь с новым именем и расширением if (move_uploaded_file($_FILES['request']['tmp_name'][$i], $fullPath)) { $fileContents = file_get_contents($fullPath); $filename = basename($fullPath); $data .= "--{$boundary}\r\n"; $data .= "Content-Disposition: form-data; name=\"request\"; filename=\"{$filename}\"\r\n"; $data .= "Content-Type: {$_FILES['request']['type'][$i]}\r\n"; $data .= "{$fileContents}\r\n"; } } } } $data .= "--{$boundary}--\r\n"; $opts = ['http' => [ 'method' => 'POST', 'timeout' => 60, 'header' => ' 'Referer: MySite\r\n' . 'Content-type:multipart/form-data; boundary=' . $boundary . '\r\n' . 'Content-Transfer-Encoding: binary\r\n' . 'User-Agent: ' . $_SERVER['HTTP_USER_AGENT'] . '\r\n', 'content' => $data ] ]; echo json_encode([file_get_contents ( $url, false, stream_context_create($opts) )]); Код упростил, оставил саму суть. Искомого результата получить не смог. Видимо я что-то упускаю и/или знаний не хватает. В чем проблема?
даже не спрашивай в чем проблема.... типа чуть ли в двоичных кодах отправлять .. .можно - но долго, геморойно и очень нужно знать много используйте curl для отправки любых данных и все
нет, дело не в этом. Сейчас у меня получилось это сделать, например, но без заголовка User-agent'a. Дайте пжл ссылку, где и файлы можно curl'ом отправить
Оба сервера Ваши? Если да, то первый сервер говорит второму, что вот тут у меня лежат файлы для тебя (передает список имен), а второй сервер их тупо забирает. Не?
PHP: $postData['image'] = '@' . __DIR__ . DIRECTORY_SEPARATOR . '1.png'; $postData['data'] = 'any text'; $ch = curl_init('http://test.local/post.php'); curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_VERBOSE, true); $response = curl_exec($ch); echo $response; отправка локального файла с помощью curl