1. 程式人生 > >PHP7 cURL上傳檔案

PHP7 cURL上傳檔案

在做微信上傳素材檔案時出了點問題,伺服器提示media缺失,原上傳程式碼如下:

function https_request($url,array $data = null) {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
        if ($data){
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        }
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($curl);
        curl_close($curl);
        return $output;
    }
將上傳檔案宣告為
$data['media'] = @.'file.path';
於是就得到了上訴的錯誤。

在網上找了一堆資料之後,有人的建議是在設定fields之前關閉安全上傳操作,程式碼如下

curl_setopt ( $curl, CURLOPT_SAFE_UPLOAD, false);
但是到執行時會出現以下錯誤:curl_setopt(): Disabling safe uploads is no longer supported

意思時該設定項已經不被支援。

之後在官方文件上找到:

CURLOPT_SAFE_UPLOADTRUEto disable support for the@prefix for uploading files inCURLOPT_POSTFIELDS
, which means that values starting with@can be safely passed as fields.CURLFilemay be used for uploads instead.
於是嘗試使用CURLFile(PHP5.5以上開始支援),

具體程式碼如下:

function postFile($url,$path,$others=null){
        $ch = curl_init($url);
        $cfile = new \CURLFile($path);

        $others or $others = [];
        $others['media'] = $cfile;
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($ch, CURLOPT_POST,1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $others);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

        $output = curl_exec($ch);
        curl_close($ch);
        return $output;
    }
最終成功將檔案上傳至伺服器

相關推薦

PHP7 cURL檔案

在做微信上傳素材檔案時出了點問題,伺服器提示media缺失,原上傳程式碼如下:function https_request($url,array $data = null) { $curl = curl_init(); curl_setopt(

php7 curl檔案

php7使用curl上傳檔案返回錯誤碼26;程式碼如下: $size = filesize($path);//檔案大小 $ch = curl_init($url);

使用CURL檔案curl_formadd的一個例子

 /***************************************************************************** *                                  _   _ ____  _      *  P

php中curl檔案

    $ch=curl_init('http://localhost/post.php');         curl_setopt($ch, CURLOPT_HEADER, 0);     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);     // l

php如何CURL 檔案到其他伺服器

今天想用php curl上傳檔案到別的伺服器,百度了下找到一個方法, $ch = curl_init(); $data = array('name' => 'Foo', 'file' => '@/home/vagrant/test.png'); curl

php curl檔案

PHP5.6之前實現Example #2 上傳檔案 <?php /* http://localhost/upload.php: print_r($_POST); print_r($_FILES

php curl檔案$_FILES為空問題

php使用curl上傳檔案,程式碼如下: 傳送的程式碼(完全是官方的示例) <?php /* http://localhost/upload.php:print_r($_POST);print_r($_FILES);*/ $ch = curl_init(); $data

curl檔案的用法

用curl下載網頁估計大家都會,但是模擬 multipart/form-data 形式的 form 上傳檔案則稍稍複雜些。命令列如下: curl -F "[email protected]/home/test/file.tar.gz" http://localhost/action.php 如

curl傳送請求檔案(multipart file upload)

折騰一下午的問題 第三方介面需要我們傳multipart 上傳檔案 curl一直各種試不成功,用Restlet Client工具總是能成功! 對比傳送的頭,發現工具在Content-Type: multipart/form-data;後面多了個這個boundary 然後去查了下

curl post表單檔案(C++)

最近測試如何上傳檔案到伺服器。原來傳照片一致通過binary 形式傳檔案,或者把圖片base64編碼傳圖片。一致沒有用form-data 表單形式傳送資料,今天嘗試下如何使用libcurl提供的API上傳檔案。 Sample code: #include <

PHP使用CURL向Python,Golang傳送檔案表單檔案[HTTP協議下Api]

PHP傳送方程式碼段: <?php /** * htppCurl表單上傳檔案 * @param $file FILE_ADDR * @param string $url uri * @param string $key key * @return bool|mixed *

PHP:curl模擬form表單檔案

<form action="" method="post" enctype="multipart/form-data"> <input type="file" name="upload"> <buttion>submit</button> </f

關於curl模擬檔案

在用curl模擬上傳的時候遇到一個小問題,所以記錄下來: 在 curl 中設定表單,包括檔案上傳網上很多都是這樣的 $post_data = array( "file" => "@" . "檔案所在路徑" ); $

Shell 程式設計用CURL 模擬POST 檔案 解決417 Expectation

話不多說直接拋程式碼 curl -H "Expect:" -F "passport=monitor_134" -F "[email protected]/root/monitor/result/mid_1_rule_1.txt" http://192.168.1

使用CURL模擬表單檔案

有時需要使用PHP程式上傳檔案,其實使用PHP上傳檔案有多種方式,如果能完全模擬出HTML表單的效果這樣伺服器端就不用做任何程式碼的改動了,使用CURL完全可以實現,在PHP5.5之前使用的方式和PHP7.x、PHP5.6x中使用了新的方式,下面是程式碼示例:

curl post檔案的“failed creating formpost data“錯誤

之前寫過一個php使用curl上傳檔案的程式碼,今天暴出了一個bug,curl錯誤資訊為"failed creating formpost data" 先說一下curl上傳檔案的過程吧 $file =array("upimg"=>"@/tmp/tmp.jpg");

Curl 模擬get、 post、put 請求以及檔案

1,Curl 模擬GET請求 //初始化 $ch = curl_init(); //設定請求地址L curl_setopt($ch, CURLOPT_URL, "http://www.nettuts.com"); //設定響應不直接輸出到頁面,1為不

PHP CURL 模擬POST請求 提交資料或檔案

$file = '/doucment/Readme.txt';$ch = curl_init();$post_data = array(     'loginfield' => 'username',     'username' => 'ybb',     'password' => '1

CURL模擬表單post提交及相關常用引數的使用(包括提交表單同時檔案

<form action="doLogin" method="post"> <input type="text" name="username" value="admin"/> <input type="password" nam

php5.6關於curl以@方式檔案的變化及解決七牛時報file is not specified in multipart的問題

$ch = curl_init (); $fields = $params;         $fields ['file'] = '@' . $file;   curl_setopt ( $ch, CURLOPT_URL, $u