Multipart encoder for PHP
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.

PHP Multipart Encoder

This library will build a Multipart-encoded string suitable for use in HTTP requests.


Requiring from composer.json:

  "p3k/multipart": "*"
// Using composer...

// ...or requiring directly

// Create a new Multipart object
$multipart = new p3k\Multipart();

// Example POST data
$params = [
  'category' => [
  'name' => 'test',
  'nested' => [
    'foo' => [
    'bar' => 'foo'

// Add the params to the request

// You can add files too!
$multipart->addFile('photo', '/tmp/example.jpg', 'image/jpeg');

// Set up curl
$ch = curl_init('http://localhost:8000/server.php');
curl_setopt($ch, CURLOPT_POST, true);

// Set the POSTFIELDS to the result of this object
curl_setopt($ch, CURLOPT_POSTFIELDS, $multipart->data());

// You'll also need to set the Content-Type header
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  'Content-type: ' . $multipart->contentType()



The built-in cURL library does not properly encode values that are arrays when it builds a multipart request. For example, this request results in a "Notice: Array to string conversion" and the value of the parameter is "Array":

$params = array(
  'category' => [

$ch = curl_init('http://localhost:8000/server.php');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);

See PHP Bugs:

This library can be used in place of cURL's built-in encoding.


You can test receiving this payload with the PHP and Ruby servers provided in this project.

To run the PHP server:

cd servers
php -S localhost:8000

This will run the built-in PHP web server listening on port 8000. Run the example code above and you will see the $_POST variable populated with the request.

To run the Ruby server, make sure you bundle install sinatra, then:

cd servers
ruby server.rb

Then you can post to http://localhost:4567/upload and you will see the JSON representation of the object that is posted.