PHP Curl post上传图片文件失败问题

PHP使用cURL post 上传文件支持通过在数组数据中,使用“@+文件全路径”的语法附加文件,但是PHP从5.5开始引入了新的CURLFile类用来指向文件PHP推荐使用CURLFile替代旧的@语法。@语法在5.5已经被打了deprecated,在5.6中就直接被删除了。

<?php
$filepath='20170613114102-8016.jpg';

if (class_exists('\CURLFile')) {
    // php 5.5 以后使用
    $field = new \CURLFile(realpath($filepath));
} else {
    //php 5.5前使用
    $field = '@' . realpath($filepath);
}

$data=array(
        'type'=>'recognize',
        'image_path'=>$field,
        'soft_id'=>'2540',
        'soft_key'=>'10a1fda668b0a7d5eb59635483bf86c1',
        'user_name'=>'test123',
        'password'=>'test123',
        'pic_type'=>'0004',
        'timeout'=>60,
        'remark'=>'',
        'log'=>1
    );

$url = 'http://www.zhima365.com/zmdemo_php/http_api.php';
$result=curlPost($url,$data);

var_dump($result);

function curlPost($uri, $data) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $uri);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_TIMEOUT, 10);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        $return = curl_exec($ch);
        curl_close($ch);
        return $return;
}
?>

参考资料:
1.考虑 PHP 5.0~5.6 各版本兼容性的 cURL 文件上传
https://segmentfault.com/a/1190000000725185

2.Send file via cURL from form POST in PHP
https://stackoverflow.com/questions/4223977/send-file-via-curl-from-form-post-in-php

3.The CURLFile class
http://php.net/manual/en/class.curlfile.php

CURLOPT_SSL_VERIFYHOST no longer accepts the value 1, value 2 will be used instead 问题解决

php 使用CURL时出现下面的错误提示
CURLOPT_SSL_VERIFYHOST no longer accepts the value 1, value 2 will be used instead

解决方案:

它是说value 1不再被接受,value 2将被取代,尝试把它改成
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);

原因是 CURL >= 7.28.1 以后的版本都不支持CURLOPT_SSL_VERIFYHOST为1

php 使用 curl_multi 方法批量获取网页内容

<?php
/*
php 使用 curl_multi 方法批量获取网页内容
*/
function curl_multi_get($urls = array()){
    $mh = curl_multi_init();
    foreach ($urls as $i => $url) {
        $conn[$i] = curl_init($url);
        curl_setopt($conn[$i], CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)");
        curl_setopt($conn[$i], CURLOPT_HEADER ,0);
        curl_setopt($conn[$i], CURLOPT_CONNECTTIMEOUT,60);
        curl_setopt($conn[$i], CURLOPT_RETURNTRANSFER,true);
        curl_multi_add_handle ($mh,$conn[$i]);
    }
    do {
        curl_multi_exec($mh,$active);
    } while ($active);

    foreach ($urls as $i => $url) {
        $data[$i] = curl_multi_getcontent($conn[$i]);
        curl_multi_remove_handle($mh,$conn[$i]);
        curl_close($conn[$i]);
    }
    curl_multi_close($mh);
    return $data;
}

$urls=array();
$urls[]='http://www.baidu.com';
$urls[]='http://www.php100.com';
$urls[]='http://www.163.com/';
$data=curl_multi_get($urls);

var_dump($data);