How to Send Files via POST with cURL and PHP

Sending files via POST with cURL and PHP is a common requirement in web development. Whether you want to upload user-generated content or transfer data between applications, knowing how to effectively handle file uploads is essential.

In this tutorial, we will go through the process of sending files via POST using cURL and PHP, providing you with a simple and friendly explanation.

Before diving into the code, make sure you have PHP and cURL installed on your system. You can check if cURL is installed by running the command curl --version in your terminal and to check if PHP is installed, use php -v. If either is missing, you'll need to install them before proceeding further.

Create the HTML Form

Start by creating an HTML form that allows users to select the file they want to upload. Include an input field of type file within the form tag. Whenever the user uploads a file and submits the form, we will store that using curl. Here's an example:

<!DOCTYPE html>
        <title>File Upload Demo</title>
        <h1>File Upload Demo</h1>

        <form action="upload.php" method="POST" enctype="multipart/form-data">
            <input type="file" name="fileToUpload" id="fileToUpload">
            <input type="submit" value="Upload File" name="submit">

Handle the File Upload in PHP

Next, create the PHP script that will handle the file upload. In this example, we'll call it upload.php. Start by checking if a file was selected and if any errors occurred during the upload process. Here's a simple implementation:

if(isset($_FILES['fileToUpload']) && $_FILES['fileToUpload']['error'] === UPLOAD_ERR_OK) {
  $file = $_FILES['fileToUpload']['tmp_name'];
  $filename = $_FILES['fileToUpload']['name'];
  $targetPath = 'uploads/' . $filename;

  if(move_uploaded_file($file, $targetPath)) {
    echo "File uploaded successfully!";
  } else {
    echo "Error uploading the file.";
} else {
  echo "No file selected or an error occurred.";

Sending Files via POST with cURL

To send the file to a remote server using cURL, you need to create a new cURL request and set the necessary options

Here's a simple example of how to accomplish this in PHP:

$file = 'path/to/your/file.jpg';
$url = '';

$curl = curl_init($url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, [
  'fileToUpload' => new CURLFile($file)

$response = curl_exec($curl);

echo $response;


In this tutorial, we have seen how to upload a file using cURL. The HTML form allows users to select the file, while the PHP script handles the file upload process. With cURL, you can send the file to a remote server effortlessly. Feel free to adapt and enhance these examples to suit your specific needs, and explore additional features and options available in cURL.