Задать вопрос
YardalGedal
@YardalGedal
yeah boy

Как отправить файл POST из скрипта?

Есть HTML форма, которая отправляет файл:
<form enctype="multipart/form-data" method="post">
  <p><input type="file" name="file[]" multiple required><input type="submit" name="submit"></p>
 </form>

Далее скрипт ловит этот файл через массив $_FILES и обрабатывает его.
Вопрос: Как отправить файл через PHP, чтобы он отправился именно в массиве $_FILES, а не используя $_POST['file'] = file_get_contents("file.txt");
  • Вопрос задан
  • 3340 просмотров
Подписаться 2 Оценить 2 комментария
Решения вопроса 1
valerium
@valerium
Изобретая велосипед
Судя по всему, принимающий скрипт находится вне вашей власти или вам как минимум неьзя его править. Я угадал? :-)

В документации PHP написано, что он "способен получать загруженные файлы из любого браузера, совместимого со стандартом RFC-1867". В стандарте RFC-1867, в свою очередь, введён тип кодирования "multipart/form-data". Следовательно, чтобы PHP понял, что ему передают не просто переменную в POST, а файл (и пометил его в массив $_FILES), нужно, чтобы клиент передал ему соответствующий тип. Так что можно либо внимательно изучить документ и организовать передачу самому, используя сокеты, либо внимательно изучить документацию в PHP к cURL.

В PHP 5.5 изменились правила использования cURL, таким образом, чтобы передать файл, нужно использовать объект CURLFile (кстати, в русской версии документации этой страницы нет). В коде это будет выглядеть как-то так (не проверял).

$ch = curl_init();
$curlfile = new CURLFile('/home/user/we-are-champions.mp3', 'audio/mp3', 'best-song.mp3')
curl_setopt($ch, CURLOPT_POSTFIELDS, $curlfile);
$content = curl_exec($ch);
curl_close ($ch);


Ну, или просто откатитесь на более старую версию PHP (до 5.5) и используйте тот подход, который описан в ответе выше. Но это неразумно, на мой взгляд.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы