Jump to content

Recommended Posts

This is a bit complicated, I'm just hoping someone else has run into this and knows how to do it a different way or make it work.

 

When sending a file as part of form information included in a cURL request, it appears you can not include a query string in the file name. Take a look at my example to see what I'm talking about.

 

//This creates an example image with some text from $_GET['img'] you can try calling this directly to see what the output looks like
if(isset($_GET['img'])){
$im = imagecreatetruecolor(120, 20);
$text_color = imagecolorallocate($im, 255, 255, 255);
imagestring($im, 3, 3, 3, $_GET['img'], $text_color);
header('Content-type: image/jpeg');
imagejpeg($im);
imagedestroy($im);
exit;
}

//Show what was sent to the $_POST and $_FILES variables
if(isset($_POST['showpost'])){
echo '<pre>';
print_r($_POST);
print_r($_FILES);
exit;
}

//Here's the part where we get in trouble...
//This works
//$imgURL = '@'.$_SERVER['SCRIPT_FILENAME'];

//This doesn't work
$imgURL = '@'.$_SERVER['SCRIPT_FILENAME'].'?img=true';

$data = array('showpost' => 'true', 'file' => $imgURL);

//Now do the cURL request to show information about the file that was sent
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://'.$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_exec($ch);
if(curl_errno($ch))
echo curl_error($ch);
curl_close($ch);

 

When using the section that says "This doesn't work" you'll get the cURL error "failed creating formpost data".

 

Any suggestions?

Link to comment
https://forums.phpfreaks.com/topic/183766-curl-sending-file-as-post/
Share on other sites

abazoskib: something like this... "@/path/file.php?img=true"

 

I just tried using sessions so I wouldn't have to pass the variable through GET, but it's not possible because something about starting the session makes declaring a content type (image/jpeg) not work.

The path needs to be a path to an actual file on disk, not an URL, for cURL to find and pass along with the request.

 

lococobra, unless the information is particularly sensitive it would be advisable to post your solution in public.

You basically said the answer I came up with. Trying to do the entire operation in one step by using a url instead of a real file will not work. Instead this is what I did.

 

Rather than try to load the url directly in to cURL as a file, run a cURL operation that calls the isset($_GET['img']) section of the code. Then instead of just displaying the image, save it wherever. At that point you'll have a real physical file you can pass to cURL. After that you can delete the file if you want. I've already changed the code a lot but it's not all that hard to figure out, it's just not as nice as if you could load a url like I was trying to do.

 

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.