PHP Curl with attachment ( CurlFile)

Sender PHP Code

<form method="post" action="<?=$_SERVER["PHP_SELF"] ?>" enctype="multipart/form-data">
    <input name="file" type="file" />
    <input type="submit" value="Upload" />
</form>

<?php
if(!empty($_FILES)){
    $target="https://juliusgoh.life/tut/attachment-receiver.php";

    echo "<pre>";
    print_r($_FILES);   
    echo "</pre>";
    # http://php.net/manual/en/curlfile.construct.php

    // Create a CURLFile object / procedural method 
    $cfile = curl_file_create($_FILES["file"]["tmp_name"],$_FILES["file"]["type"],$_FILES["file"]["name"]); // try adding 

    // Create a CURLFile object / oop method 
    #$cfile = new CURLFile("resource/test.png","image/png","testpic"); // uncomment and use if the upper procedural method is not working.

    // Assign POST data
    $imgdata = array("file" => $cfile);

    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $target);
    #curl_setopt($curl, CURLOPT_USERAGENT,"Opera/9.80 (Windows NT 6.2; Win64; x64) Presto/2.12.388 Version/12.15");
    curl_setopt($curl, CURLOPT_HTTPHEADER,array("Content-Type: multipart/form-data"));
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // stop verifying certificate
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($curl, CURLOPT_POST, true); // enable posting
    curl_setopt($curl, CURLOPT_POSTFIELDS, $imgdata); // post images 
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); // if any redirection after upload
    $r = curl_exec($curl); 
    curl_close($curl);

    echo "<h1>Result</h1>";
    echo "<pre>";
    print_r($r);
    echo "</pre>";
}
?>

Receiver PHP Code

<?php

$uploaddir = realpath("./") . "/";
$uploadfile = $uploaddir . basename($_FILES["file"]["name"]);
if (move_uploaded_file($_FILES["file"]["tmp_name"], $uploadfile)) {
    echo "File is valid, and was successfully uploaded.\n";
} else {
    echo "Possible file upload attack!\n";
}

echo "<pre>";
echo "Here is some more debugging info:";
print_r($_FILES);
echo "\n<hr />\n";
print_r($_POST);
echo "</pre>";
?>

Ref : https://www.php.net/manual/en/class.curlfile.php

You may also like...