PHP注意:使用CURL在远程服务器上发布数据时,数组到字符串转换

时间:2016-04-03 06:22:56

标签: php curl postdata

这是我要发布到远程服务器的数据数组。

Array
(
    [petTitle] => test
    [petType] => 2
    [breedtype] => dsfsdf
    [dateOfBirth] => 14 Apr 2016
    [postcode] => 390015
    [isPriceNegotiable] => False
    [price] => test
    [isPublished] => 1
    [petQualities] => 2
    [petDescription] => test
    [username] => XXXX@gmail.com
    [file] => Array
        (
            [0] => Array
                (
                    [name] => Desert.jpg
                    [type] => image/jpeg
                    [tmp_name] => D:\xampp\tmp\php1F32.tmp
                    [error] => 0
                    [size] => 845941
                )

            [1] => Array
                (
                    [name] => Koala.jpg
                    [type] => image/jpeg
                    [tmp_name] => D:\xampp\tmp\php1F62.tmp
                    [error] => 0
                    [size] => 780831
                )

        )

)

我正在使用cURL。然而,当我使用CURLOPT_POSTFIELDS发送此数组时。它会生成一个通知“PHP注意:数组转换为字符串”

我这样使用:CURLOPT_POSTFIELDS => $data。请参考下面的卷曲请求:

$headers = array("Content-Type:multipart/form-data");
$curl = curl_init();
curl_setopt_array($curl, array(
    CURLOPT_URL => self::url,
    CURLOPT_HEADER => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_ENCODING => "",
    CURLOPT_TIMEOUT => 30,
    CURLOPT_POST => 1,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_POSTFIELDS => $data,
));
$response = curl_exec($curl);

通过此请求,我可以发布文本数据。但不知何故,我无法上传图像并在数据库中添加条目。

对此的任何帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

通知被触发,因为您传递给CURLOPT_POSTFIELDS的数组格式不正确。您放入file的多级数组是原因。

但您放入file的数组并不能帮助您上传任何文件。这是关于上传文件的信息在目标PHP脚本上的样子,但在源端看起来不同。

file的值替换为:

$data = array(
    // ... all the text fields here
    'file1' => new CURLFile('... path .../Desert.jpg', 'image/jpeg'),
    'file2' => new CURLFile('... path .../Koala.jpg', 'image/jpeg'),
);

将上面代码中的... path ...替换为相应文件的路径。