質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.37%

第二弾!!cURLでPUTするときにヘッダーを一旦消すか、Transfer-Encoding: chunkedをやめさせたい

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 705

kipipipi

score 43

以前こちらでも同様の質問をさせていただきました。
前回の質問

この時、無事解決できたのですが、
あれから私のMacのphpをバージョンを7.4.2へアップしたところ、同じコードで送信ができなくなりました。

あの憎きTransfer-Encoding: chunkedがヘッダーに付いているではありませんか!
別のWin10pc(php:7.3.8)ではファイル送信ができています。

念のため前回のコードを下記に記します。

上略
:
:

        $file_path = 'myfile.csv';
        $data = makeCurlFile($file_path); //makeCurlFileにはnew CURLFile の作業をメソッド化したものが入っています。
        $csvdata = array('csvfile' => $data );

        $header = ['サーバーが必要としているもの:'.$version(必要なものが入っている変数),'サーバーが必要としているもの:'.$type(必要なものが入っている変数),'Content-Length:'.filesize($file_path),];

        //cURLのセッションを初期化
        $curl=curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);  //URLをセット

        //curl_setopt($curl, CURLOPT_PUT, true); //これを消したら前回は解決しました。

        //putでファイルを送信するために加工
        curl_setopt($curl,CURLOPT_INFILESIZE,filesize($file_path));
        $handle = fopen($file_path,'r');
        curl_setopt($curl,CURLOPT_INFILE,$handle);
        curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");

        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);   //レスポンスデータを受け取るか設定
        curl_setopt($curl, CURLOPT_HTTPHEADER, $header);    //ヘッダーに値をセット
        curl_setopt($curl, CURLOPT_POSTFIELDS, $csvdata);      //PUTする実際のデータをセット
        curl_setopt($curl,CURLINFO_HEADER_OUT,true);    //リクエストヘッダ出力設定

        $result = curl_exec($curl);
        $info = curl_getinfo($curl);
        //リクエストヘッダ出力
        echo curl_getinfo($curl,CURLINFO_HEADER_OUT);
        echo ('ステータスコードは'.$info['http_code'].'!!!!!');

        // // 結果を表示する
        var_dump($result);
        //セッションを終了する
        curl_close($curl);  

PHP7.4から何かの変更が関係しているようなので調べたところ
    curlを使用してcurlFileをポストするとContent-Lengthが欠落する
に少し似た状況の方がいるのですが、バグっぽい?のでしょうか。。。?

Guzzleでは送信できているので致命傷ではありませんが、やはり気持ち悪いです。。。
どなたかお分かりの方がいたら教えて頂けませんでしょうか?
よろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • asahina1979

    2020/04/01 19:47

    libcurの特定バージョンとの組み合わせで発生しlibcurlのupdateを行えば修正される。
    ※ 公式リポジトリへの反映は鈍足なので注意

    キャンセル

  • kipipipi

    2020/04/01 21:24

    asahinaさん
    ご回答ありがとうございます。現在のcurlのバージョンは7.68.0 でした。
    https://curl.haxx.se/download.html こちらを見た所、macOSのところに7.68.0がないのも疑問ですが、最新で7.69.1のようでした。
    あまり差が無さそうなので今回はGuzzleでしのいで、次回のバージョンでアップデートを試みたいと思います!解決しましたら、こちら閉じさせていただきます!

    キャンセル

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.37%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • トップ
  • PHPに関する質問
  • 第二弾!!cURLでPUTするときにヘッダーを一旦消すか、Transfer-Encoding: chunkedをやめさせたい