PHP CURL post數(shù)據(jù)報(bào)錯(cuò) failed creating formpost data
在做微信卡券使用curl上傳logo圖片時(shí),發(fā)現(xiàn)一個(gè)報(bào)錯(cuò):
failed creating formpost data
代碼中數(shù)組如下:
$data = array('buffer' => '@test.jpg');
結(jié)合微信給的文檔,檢查語法,貌似并沒有發(fā)現(xiàn)什么錯(cuò)誤...
經(jīng)過上網(wǎng)查詢和驗(yàn)證,最終發(fā)現(xiàn),問題出現(xiàn)在 @ 這里,如果在 @ 前面加一個(gè) \ 轉(zhuǎn)義下就可以了,在php官方的bugs.php.net中也有提到(本文最后提供網(wǎng)址)
最終代碼:
$data = array('buffer' => '\\@test.jpg');
問題解決。
bugs地址參考:https://bugs.php.net/bug.php?id=50060
我們?cè)賮砜匆粋€(gè)實(shí)例:
之前寫過一個(gè)php使用curl上傳文件的代碼,今天暴出了一個(gè)bug,curl錯(cuò)誤信息為"failed creating formpost data"
先說一下curl上傳文件的過程吧
$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)該問題的原因是路徑問題,分析了程序代碼也沒發(fā)現(xiàn)什么問題,始終不得解
最后通過錯(cuò)誤日志查得這個(gè)原因是因?yàn)閏url post提交的數(shù)據(jù)參數(shù)中有一個(gè)參數(shù)內(nèi)容是以@符號(hào)開頭的,
比如說要上傳/tmp/tmp.jpg,同時(shí)提交簡(jiǎn)介,這樣參數(shù)值就是 path='/tmp/tmp.jpg', 輸入簡(jiǎn)介desc='@test haha';
根據(jù)手冊(cè)上說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)作普通字符串處理
- php獲取POST數(shù)據(jù)的三種方法實(shí)例詳解
- PHP的CURL方法curl_setopt()函數(shù)案例介紹(抓取網(wǎng)頁(yè),POST數(shù)據(jù))
- PHP利用超級(jí)全局變量$_POST來接收表單數(shù)據(jù)的實(shí)例
- PHP之將POST數(shù)據(jù)轉(zhuǎn)化為字符串的實(shí)現(xiàn)代碼
- php使用CURL模擬GET與POST向微信接口提交及獲取數(shù)據(jù)的方法
- 功能強(qiáng)大的PHP POST提交數(shù)據(jù)類
- PHP模擬post提交數(shù)據(jù)方法匯總
- 利用PHP fsockopen 模擬POST/GET傳送數(shù)據(jù)的方法
- php post大量數(shù)據(jù)時(shí)發(fā)現(xiàn)數(shù)據(jù)丟失問題解決方法
- 淺談PHP接收POST數(shù)據(jù)方式
- php使用socket post數(shù)據(jù)到其它web服務(wù)器的方法
- PHP中使用socket方式GET、POST數(shù)據(jù)實(shí)例
- php程序內(nèi)部post數(shù)據(jù)的方法
- PHP Post獲取不到非表單數(shù)據(jù)的問題解決辦法
相關(guān)文章
利用瀏覽器的Javascript控制臺(tái)調(diào)試PHP程序
現(xiàn)在,越來越多的瀏覽器都有了開發(fā)這工具或者Javascript控制臺(tái),通過這些工具,我們可以很方便的顯示PHP代碼中的變量或數(shù)組值2014-01-01
PHP實(shí)現(xiàn)通過strace定位故障原因的方法
這篇文章主要介紹了PHP實(shí)現(xiàn)通過strace定位故障原因的方法,結(jié)合實(shí)例形式分析了出現(xiàn)高負(fù)載情況下使用strace定位故障原因的相關(guān)命令與操作技巧,需要的朋友可以參考下2018-04-04
PHP laravel實(shí)現(xiàn)配置使用多數(shù)據(jù)庫(kù)
有的時(shí)候,我們?cè)陂_發(fā)的過程中需要連接多個(gè)數(shù)據(jù)庫(kù)。Laravel框架中早已為我們想到了這樣的需求。這篇文章主要為大家介紹了laravel配置使用多數(shù)據(jù)庫(kù)的方法,需要的可以參考一下2022-10-10
探討Smarty中如何獲取數(shù)組的長(zhǎng)度以及smarty調(diào)用php函數(shù)的詳解
本篇文章是對(duì)Smarty中如何獲取數(shù)組的長(zhǎng)度以及smarty調(diào)用php函數(shù)的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
ajax php 實(shí)現(xiàn)寫入數(shù)據(jù)庫(kù)
看到同學(xué)背詞用的生詞本,覺得很不錯(cuò).正好自己也在看書,為了有一個(gè)好的效果,于是想做一個(gè)類似生詞本的,可以存知識(shí)點(diǎn),和查看知識(shí)點(diǎn)的.2009-09-09
解決Laravel blade模板轉(zhuǎn)義html標(biāo)簽的問題
今天小編就為大家分享一篇解決Laravel blade模板轉(zhuǎn)義html標(biāo)簽的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-09-09
PHP開發(fā)環(huán)境配置(MySQL數(shù)據(jù)庫(kù)安裝圖文教程)
下載完軟件后開始PHP開發(fā)環(huán)境的配置。注意是開發(fā)環(huán)境,不是服務(wù)器環(huán)境。2010-04-04

