PHP C URL postデータはfailed creating formpost dataを間違えました。
WeChatカードのチケットを作って、curlを使ってロゴ画像をアップロードする時、エラーが発生しました。
インターネットでの検索と検証を経て、最終的に発見されました。問題は@ここにあります。@の前に「転送」を加えればいいです。php公式のbugs.php.netでも言及されています。
最終コード:
bugsアドレス参照:https://bugs.php.net/bug.php?id=50060
もう一つの例を見に行きます。
前に書いたphpがcurlを使ってファイルをアップロードするコードです。今日はbugが暴かれました。curlのエラー情報は「failed creating formpost data」です。
まず、curlがファイルをアップロードする過程を説明してください。
1、$fileは配列でなければなりません。
2、ファイルをアップロードするパスの前に@を追加します。
3、経路は決定経路を使用しなければならない。
今は「failed creating formpost data」のエラー原因を分析します。
まず、この問題が発生した原因は経路の問題です。プログラムコードを分析しても問題が見つからず、ずっと解けませんでした。
最後にエラーログで調べたのは、curl postが提出したデータパラメータの中の一つのパラメータの内容が@記号で始まるからです。
例えば、アップロード/tmp/tmp.jpgとともにプロファイルを提出すると、そのパラメータ値はpath='/tmp/jpg'であり、プロファイルを入力するdesc='@test ha';
マニュアルによると、curl post提出データは2つの方法があります。
第二の方法は普通の文字列としてのみ処理されます。
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を紹介したいという経路は存在しません。第二の方法は普通の文字列としてのみ処理されます。