Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Php Curl send File AND array data

I want to send complex Post data with Curl.

The data i try to send:

Array
(
    [test] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )

    [file] => CURLFile Object
        (
            [name] => H:\wwwroot\curl/upload.txt
            [mime] => 
            [postname] => 
        )

)

I need to use the variables in the post-side as $_POST["test"] and $_FILES["file"] But i can not realize that. For the (sometimes multidimensional) array-data i need http_build_query but that breaks the file. If i don`t use http_build_query my array gives an "array to string conversion" error.

How can i get this to work? Code:

Index.php

$curl = curl_init();

$postValues = Array("test" => Array(1,2,3));
$postValues["file"] = new CurlFile(dirname(__FILE__). "/upload.txt");

curl_setopt($curl, CURLOPT_URL, "localhost/curl/post.php");
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $postValues);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);

$curlResult = curl_exec($curl);
$curlStatus = curl_getinfo($curl);

echo $curlResult;

post.php

print_r($_REQUEST);
print_r($_FILES);
like image 575
Wim te Groen Avatar asked Mar 01 '16 19:03

Wim te Groen


1 Answers

After very long research to manage the same problem, I think that a simpler solution could be:

$postValues = Array("test[0]" => 1, "test[1]" => 2, "test[2]" => 3);

this is the right way to emulate what happen on browsers

<input type="hidden" name="test[0]" value="1">
<input type="hidden" name="test[1]" value="2">
...

The result is:

Array
(
    [test] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )

)
Array
(
    [file] => Array
        (
            [name] => upload.txt
            [type] => application/octet-stream
            [tmp_name] => /tmp/phprRGsPU
            [error] => 0
            [size] => 30
        )

)
like image 50
Andrej Pandovich Avatar answered Oct 14 '22 16:10

Andrej Pandovich