У меня есть проблемы с регистрацией многомерного массива с загрузками файла с помощью PHP и ЗАВИХРЕНИЯ.
Многомерный массив, например:
$post['question'] = 'Are you human?';
$post['answers'] = array('yes', 'no', 'maybe');
$post['file'] = '@/path/to/file';
// Output:
Array(
'question' => Are you human?,
'answers' => Array(
'0' => yes,
'1' => no,
'2' => maybe
),
'file' => @/path/to/file
)
Существует несколько вещей, почему это не работало бы, если Вы просто пытаетесь отправить это с CURLOPT_POSTFIELDS в ЗАВИХРЕНИИ как это:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://example.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$response = curl_exec($ch);
В первую очередь, в официальном описании PHP CURLOPT_POSTFIELDS говорится:
Полные данные для регистрации в операции "POST" HTTP. Для регистрации файла предварительно ожидайте имя файла с и используйте полный путь. Это может или быть передано как строка urlencoded как 'para1=val1¶2=val2&...' или как массив с именем поля, столь же ключевым и полевые данные как значение. Если значение будет массивом, то заголовок Типа контента будет установлен на multipart/form-data.
Это кажется, что можно передать какой-либо вид массива к праву POSTFIELDS? Неправильно. POSTFIELDS только принимает нескалярные величины и будет дросселировать с a Array to string conversion
ошибка при передаче многомерных массивов. Так, единственная другая опция, которую Вы имеете, к http_build_query()
Ваш массив, чтобы смочь передать многомерные массивы, которые не дросселируют.
Но.. поскольку можно читать в примечании на странице PHP:
Примечание: Передача массива к CURLOPT_POSTFIELDS закодирует данные multipart/form-data, в то время как передача закодированной URL строки закодирует данные application/x-www-form-urlencoded.
Сообщение не будет multipart/form-data, закодированным при передаче строки urlencoded POSTFIELDS, заставляя загрузку файла перестать работать.
Таким образом, кажется почти невозможным объединить два с ЗАВИХРЕНИЕМ, в то время как это не была бы проблема при использовании регулярной HTML-формы.
Мой вопрос: действительно ли возможно обойти эту странную причуду ЗАВИХРЕНИЯ, чтобы смочь отправить загрузки файла и многомерные массивы?