欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PHP CURL post數(shù)據(jù)報(bào)錯(cuò) failed creating formpost data

 更新時(shí)間:2016年10月16日 12:23:33   投稿:hebedich  
我們有時(shí)候用curl上傳文件遇到failed creating formpost data的錯(cuò)誤,那具體是如何產(chǎn)生,又如何進(jìn)行處理解決呢,下面我們就來(lái)探討下

在做微信卡券使用curl上傳logo圖片時(shí),發(fā)現(xiàn)一個(gè)報(bào)錯(cuò):

failed creating formpost data

代碼中數(shù)組如下:

$data = array('buffer' => '@test.jpg');


結(jié)合微信給的文檔,檢查語(yǔ)法,貌似并沒(méi)有發(fā)現(xiàn)什么錯(cuò)誤...

經(jīng)過(guò)上網(wǎng)查詢和驗(yàn)證,最終發(fā)現(xiàn),問(wèn)題出現(xiàn)在 @ 這里,如果在 @ 前面加一個(gè) \ 轉(zhuǎn)義下就可以了,在php官方的bugs.php.net中也有提到(本文最后提供網(wǎng)址)

最終代碼:

$data = array('buffer' => '\\@test.jpg');

問(wèn)題解決。

bugs地址參考:https://bugs.php.net/bug.php?id=50060

我們?cè)賮?lái)看一個(gè)實(shí)例:

之前寫過(guò)一個(gè)php使用curl上傳文件的代碼,今天暴出了一個(gè)bug,curl錯(cuò)誤信息為"failed creating formpost data"

先說(shuō)一下curl上傳文件的過(guò)程吧

$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); 

這里有兩個(gè)地方需要注意:

1、$file必須是數(shù)組

2、上傳文件的路徑前面加@

3、路徑必須使用決定路徑

現(xiàn)在分析出現(xiàn)"failed creating formpost data" 錯(cuò)誤原因

首先很快就定位到出現(xiàn)該問(wèn)題的原因是路徑問(wèn)題,分析了程序代碼也沒(méi)發(fā)現(xiàn)什么問(wèn)題,始終不得解

最后通過(guò)錯(cuò)誤日志查得這個(gè)原因是因?yàn)閏url post提交的數(shù)據(jù)參數(shù)中有一個(gè)參數(shù)內(nèi)容是以@符號(hào)開(kāi)頭的,

比如說(shuō)要上傳/tmp/tmp.jpg,同時(shí)提交簡(jiǎn)介,這樣參數(shù)值就是 path='/tmp/tmp.jpg', 輸入簡(jiǎn)介desc='@test haha';

根據(jù)手冊(cè)上說(shuō)curl post提交數(shù)據(jù)有兩種方式

1.curl($ch, CURLOPT_POSTFIELD, array('pic'=>'@/tmp/tmp.jpg', 'filename'=>'tmp'); 
 
2.curl($ch, CURLOPT_POSTFIELD, 'pic=@/tmp/tmp.jpg&filename=tmp') 

在有上傳文件的情況下必須使用第一種方式

curl($ch, CURLOPT_POSTFIELD, array('pic'=>'@/tmp/tmp.jpg', 'filename'=>'tmp'); 

這樣如果第一字符是@符后面的內(nèi)容均會(huì)被解析成地址,如果地址不存在就會(huì)拋出該錯(cuò)誤,就想簡(jiǎn)介desc @test 這個(gè)路徑是不存在的

第二種方式只會(huì)將其當(dāng)作普通字符串處理

相關(guān)文章

最新評(píng)論