《PHP編程:PHP CURL post數據報錯 failed creating formpost data》要點:
本文介紹了PHP編程:PHP CURL post數據報錯 failed creating formpost data,希望對您有用。如果有疑問,可以聯系我們。
PHP應用在做微信卡券使用curl上傳logo圖片時,發(fā)現一個報錯:
PHP應用failed creating formpost data
PHP應用代碼中數組如下:
PHP應用
$data = array('buffer' => '@test.jpg');
PHP應用結合微信給的文檔,檢查語法,貌似并沒有發(fā)現什么錯誤...
PHP應用經過上網查詢和驗證,最終發(fā)現,問題出現在 @ 這里,如果在 @ 前面加一個 \ 轉義下就可以了,在php官方的bugs.php.net中也有提到(本文最后提供網址)
PHP應用最終代碼:
PHP應用
$data = array('buffer' => '\\@test.jpg');
PHP應用問題解決.
PHP應用bugs地址參考:https://bugs.php.net/bug.php?id=50060
PHP應用我們再來看一個實例:
PHP應用之前寫過一個php使用curl上傳文件的代碼,今天暴出了一個bug,curl錯誤信息為"failed creating formpost data"
PHP應用先說一下curl上傳文件的過程吧
PHP應用
$file =array("upimg"=>"@/tmp/tmp.jpg");//文件路徑,前面要加@,表明是文件上傳.
$url = 'http://localhosts/upload.php';
$ch = curl_init();
curl_setopt($ch ,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_POSTFIELDS,$file);
curl_exec($ch);
PHP應用這里有兩個地方需要注意:
PHP應用1、$file必須是數組
PHP應用2、上傳文件的路徑前面加@
PHP應用3、路徑必須使用決定路徑
PHP應用現在分析出現"failed creating formpost data" 錯誤原因
PHP應用首先很快就定位到出現該問題的原因是路徑問題,分析了程序代碼也沒發(fā)現什么問題,始終不得解
PHP應用最后通過錯誤日志查得這個原因是因為curl post提交的數據參數中有一個參數內容是以@符號開頭的,
PHP應用比如說要上傳/tmp/tmp.jpg,同時提交簡介,這樣參數值就是 path='/tmp/tmp.jpg', 輸入簡介desc='@test haha';
PHP應用根據手冊上說curl post提交數據有兩種方式
PHP應用
1.curl($ch, CURLOPT_POSTFIELD, array('pic'=>'@/tmp/tmp.jpg', 'filename'=>'tmp');
2.curl($ch, CURLOPT_POSTFIELD, 'pic=@/tmp/tmp.jpg&filename=tmp')
PHP應用在有上傳文件的情況下必須使用第一種方式
PHP應用curl($ch, CURLOPT_POSTFIELD, array('pic'=>'@/tmp/tmp.jpg', 'filename'=>'tmp');?
PHP應用這樣如果第一字符是@符后面的內容均會被解析成地址,如果地址不存在就會拋出該錯誤,就想簡介desc @test 這個路徑是不存在的
PHP應用第二種方式只會將其當作普通字符串處理
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/3028.html