php實現以post方式上傳圖片檔案的方法執行個體

來源:互聯網
上載者:User
本文主要和大家分享php實現以post方式上傳圖片檔案的方法執行個體,在調用第三方api介面時,有時會遇到通過http協議上傳圖片,以下是一個公眾平台新增永久素材的例子;

php代碼:

    /* 使用curl函數 */    $url = "https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=ACCESS_TOKEN&type=image";    $post_data = array(        'media' => '@bag03.jpg',    );    $response = curl_http($url, 'POST', $post_data);    $params = array();    $params = json_decode($response,true);    if (isset($params['errcode']))    {        echo "error:" . $params['errcode'];        echo "msg  :" . $params['errmsg'];        exit;    }    var_dump( $params );        /**     * http請求方式: 預設GET     */    function curl_http($url, $method="GET", $postfields){        $ch = curl_init();        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);        curl_setopt($ch, CURLOPT_URL, $url);        switch ($method) {            case "POST":                curl_setopt($ch, CURLOPT_POST, true);                if (!empty($postfields)) {                    $hadFile = false;                    if (is_array($postfields) && isset($postfields['media'])) {                        /* 支援檔案上傳 */                        if (class_exists('\CURLFile')) {                            curl_setopt($ch, CURLOPT_SAFE_UPLOAD, true);                            foreach ($postfields as $key => $value) {                                if (isPostHasFile($value)) {                                    $postfields[$key] = new \CURLFile(realpath(ltrim($value, '@')));                                    $hadFile = true;                                }                            }                        } elseif (defined('CURLOPT_SAFE_UPLOAD')) {                            if (isPostHasFile($value)) {                                curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);                                $hadFile = true;                            }                        }                    }                    $tmpdatastr = (!$hadFile && is_array($postfields)) ? http_build_query($postfields) : $postfields;                    curl_setopt($ch, CURLOPT_POSTFIELDS, $tmpdatastr);                }                break;            default:                curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method); /* //佈建要求方式 */                break;        }        $ssl = preg_match('/^https:\/\//i',$url) ? TRUE : FALSE;        curl_setopt($ch, CURLOPT_URL, $url);        if($ssl){            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // https請求 不驗證認證和hosts            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); // 不從認證中檢查SSL密碼編譯演算法是否存在        }        $response =  curl_exec($ch);        curl_close($ch);        if(empty($response)){            exit("錯誤請求");        }        return $response;    }        function isPostHasFile($value)    {        if (is_string($value) && strpos($value, '@') === 0 && is_file(realpath(ltrim($value, '@')))) {            return true;        }        return false;    }

也可以使用php內建的系統函數,如果使用過程中出現問題,建議查看是否啟用相應的系統函數。

使用exec系統函數:

/* 使用exec函數 */$command = 'curl -F media=@'.$filepath.' "https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=image"';$retval = array();exec($command, $retval, $status);$params = array();$params = json_decode($retval[0],true);if ($status != 0) {    $params = array(        'errcode'   => '-100',        'errmsg'    => '公眾號服務出錯,請聯絡管理員',    );}return $params;

使用system系統函數:

/* 使用system函數 */$command = 'curl -F media=@'.$filepath.' "https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=image"';$retval = 1;$last_line = system($command, $retval);$params = array();$params = json_decode($last_line,true);if ($retval != 0) {    if (isset($params['errcode'])) {        $params = array(            'errcode'   => '-100',            'errmsg'    => '公眾號服務出錯,請聯絡管理員',        );    }}return $params;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.