Edit report at http://bugs.php.net/bug.php?id=50060&edit=1

 ID:               50060
 Comment by:       guille at nianoniano dot com
 Reported by:      bugs dot php dot net at sgerrand dot com
 Summary:          "failed creating formpost data" if post array value
                   starts with '@'
 Status:           Bogus
 Type:             Bug
 Package:          cURL related
 Operating System: Linux (Ubuntu x86_64 2.6.31-14)
 PHP Version:      5.2.11

 New Comment:

We should have to be able to tell wheter a POST field is intended to be
interpreted as a path for a file submission or simply as text not just
by adding a '@' character at the begining of a POST parameter's value.



Firstly because the curl lets it and PHP's implementation of this
functions are actually diminishing this feature.



And secondly because it brings some operational problems that makes us
to produce worse code: the need to convert the POST payload array of
parameters to a string.



A good example for this need is a Twitter library that i'm currently
working on. It a very common case to have a POST parameter starting with
the '@' character and i'm forced to convert the array into a string and
then deal with other derivative problems like handling the presence of
characters like '&' in the value of a parameter. This wastes processing
time, resources and makes worse source code.


Previous Comments:
------------------------------------------------------------------------
[2009-11-03 21:37:08] bugs dot php dot net at sgerrand dot com

Regardless, if the existing functionality for constructing form data 

with the CURLOPT_POSTFIELDS option will not be changed, can the 

documentation for curl_setopt() be altered to more explicitly indicate 

that *any* array value that starts with '@' will be treated as a file 

for upload.

------------------------------------------------------------------------
[2009-11-03 11:58:30] [email protected]

-d is for the whole data, what we really have here is -F for formdata.



curl -F 'k...@value' http://www.php.net/

------------------------------------------------------------------------
[2009-11-03 10:44:13] bugs dot php dot net at sgerrand dot com

Please refer to the documentation for curl_setopt() - 

http://php.net/curl_setopt



CURLOPT_POSTFIELDS       The full data to post in a HTTP "POST" 

operation. To post a file, prepend a filename with @ and use the full 

path. This can either be passed as a urlencoded string like 

'para1=val1&para2=val2&...' or as an array with the field name as key 

and field data as value. If value is an array, the Content-Type header 

will be set to multipart/form-data.



The case I have logged is when data to be posted using this option is 

an array which happens to have a value that starts with '@', as per 

the example. This edge case is being caused by the function used to 

create the form data to pass to cURL.



I would note that the cURL command line client on any POSIX system can 

perform this without issue - i.e.: 



curl -d 'k...@value' http://www.php.net/

------------------------------------------------------------------------
[2009-11-03 10:18:06] [email protected]

@ has a special meaning with cURL and takes the contents of the file.

------------------------------------------------------------------------
[2009-11-03 07:29:36] bugs dot php dot net at sgerrand dot com

Description:
------------
PHP's cURL library dies returning the error message "failed creating 

formpost data" when trying to use an array that contains a value 

starting with '@'. 



If the array is changed to a string in URL encoded like format, the 

problem does not occur.

Reproduce code:
---------------
<?php



$url = 'http://www.php.net';

$postData = array('key' => '@value');

$ch = curl_init();



curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_POST, true);

curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);



if (! curl_exec($ch) ) print 'cURL error: ' . curl_error($ch);

else print "cURL success";



curl_close($ch);



?>

Expected result:
----------------
cURL success

Actual result:
--------------
cURL error: failed creating formpost data


------------------------------------------------------------------------



-- 
Edit this bug report at http://bugs.php.net/bug.php?id=50060&edit=1

Reply via email to