PHP C URL postデータはfailed creating formpost dataを間違えました。


WeChatカードのチケットを作って、curlを使ってロゴ画像をアップロードする時、エラーが発生しました。failed creating formpost dataコードの配列は以下の通りです。

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


WeChatからのドキュメントを結合して、文法をチェックしても、何か間違いがないようです。
インターネットでの検索と検証を経て、最終的に発見されました。問題は@ここにあります。@の前に「転送」を加えればいいです。php公式のbugs.php.netでも言及されています。
最終コード:

$data = array('buffer' => '\\@test.jpg');
問題が解決する。
bugsアドレス参照:https://bugs.php.net/bug.php?id=50060
もう一つの例を見に行きます。
前に書いたphpがcurlを使ってファイルをアップロードするコードです。今日はbugが暴かれました。curlのエラー情報は「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); 
ここには二つのところがあります。
1、$fileは配列でなければなりません。
2、ファイルをアップロードするパスの前に@を追加します。
3、経路は決定経路を使用しなければならない。
今は「failed creating formpost data」のエラー原因を分析します。
まず、この問題が発生した原因は経路の問題です。プログラムコードを分析しても問題が見つからず、ずっと解けませんでした。
最後にエラーログで調べたのは、curl postが提出したデータパラメータの中の一つのパラメータの内容が@記号で始まるからです。
例えば、アップロード/tmp/tmp.jpgとともにプロファイルを提出すると、そのパラメータ値はpath='/tmp/jpg'であり、プロファイルを入力するdesc='@test ha';
マニュアルによると、curl post提出データは2つの方法があります。

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'); このように、第一文字が@符の後の内容であれば、いずれもアドレスとして解析されますが、アドレスが存在しないとそのエラーを破棄します。desc@testを紹介したいという経路は存在しません。
第二の方法は普通の文字列としてのみ処理されます。