Intereting Posts
Отправить письмо в php с прикрепленным файлом, который создается из базы данных CodeIgniter Active Record несколько операторов «где» и «или» ReCaptcha неправильно работает на iPhone Лучший подход к декодированию сигнатуры шифрования Youtube с использованием PHP или JS Как написать PHP-код для вывода JSON из сканирования каталога? PHP: создание экземпляра класса из переменной нечетно не выполняется Отправить форму без обновления после выбора из выпадающего списка Лучший способ перенаправления мобильных устройств Как добавить ajax в тему WordPress Как получить предыдущий месяц и год относительно сегодняшнего дня, используя strtotime и дату? Отправка формы из разных <div> HTML Поток событий: шаблон PHP MVC Диагностика утечек памяти. Допустимый размер памяти в # байт. Перенаправление, когда поисковый запрос является точным заголовком в WordPress Открытие SQLite3 как READONLY с PDO?

Как разобрать необработанные данные POST в массив?

У меня есть исходные данные формы, которые выглядят так:

------------V2ymHFg03ehbqgZCaKO6jy Content-Disposition: form-data; name="intro" O ------------V2ymHFg03ehbqgZCaKO6jy Content-Disposition: form-data; name="title" T ------------V2ymHFg03ehbqgZCaKO6jy Content-Disposition: form-data; name="apiKey" 98d32fdsa ------------V2ymHFg03ehbqgZCaKO6jy Content-Disposition: form-data; name="method" /media/add ------------V2ymHFg03ehbqgZCaKO6jy Content-Disposition: form-data; name="upload_field"; filename="original_filename.png" Content-Type: image/png ------------V2ymHFg03ehbqgZCaKO6jy-- 

(Вместо второй строки upload_field есть данные этого файла (невидимые здесь). Поэтому мой вопрос:

Как анализировать данные выше, чтобы иметь таблицу:

 $result['intro'] 

и так далее с данными внутри?

 $boundary = "------------V2ymHFg03ehbqgZCaKO6jy"; // take this from content-type $rawfields = explode($boundary,$data); array_pop($rawfields); // drop the last -- piece foreach ( $rawfields as $id=>$block ) { list($mime,$content) = explode("\r\n\r\n",$block,2); // I think it's <cr><lf> by standards, maybe check! if ( preg_match('/name="([^"]*)"/i',$mime,$match) ) { $result[$match[1]] = $content; // todo: do funky stuff with other fields } else { $result[] = $content; // just in case... } } 

вуаля.

отредактируйте: вы также должны обрезать новую rtrim из каждого блока контента, но rtrim будет нарезать несколько rtrim новой строки, поэтому вам нужно сделать немного более творческим.

Тип содержимого общего документа является multipart , причем части разделяются данной границей.

Каждая часть или сообщение внутри многостраничного документа находится в стандартном формате сообщения: строки заголовка, за которым следует пустая строка, за которой следует последовательность байтов, представляющих содержимое этой части. И HTTP, и SMTP работают так.

С заголовками, такими как Content-Disposition: form-data; name="title" Content-Disposition: form-data; name="title" , вы должны быть осторожны с name потому что он может быть закодирован (подумайте о том, как представить произвольное значение, например, такое, которое содержит метку двойной кавычки или новую строку).

Я сам столкнулся с подобной проблемой и написал собственную версию кода mvds, чтобы работать с бинарными файлами. Вот ссылка для дальнейшего использования.