以前こちらでも同様の質問をさせていただきました。
前回の質問
この時、無事解決できたのですが、
あれから私のMacのphpをバージョンを7.4.2へアップしたところ、同じコードで送信ができなくなりました。
あの憎きTransfer-Encoding: chunked
がヘッダーに付いているではありませんか!
別のWin10pc(php:7.3.8)ではファイル送信ができています。
念のため前回のコードを下記に記します。
php
1上略 2: 3: 4 5 $file_path = 'myfile.csv'; 6 $data = makeCurlFile($file_path); //makeCurlFileにはnew CURLFile の作業をメソッド化したものが入っています。 7 $csvdata = array('csvfile' => $data ); 8 9 $header = ['サーバーが必要としているもの:'.$version(必要なものが入っている変数),'サーバーが必要としているもの:'.$type(必要なものが入っている変数),'Content-Length:'.filesize($file_path),]; 10 11 //cURLのセッションを初期化 12 $curl=curl_init(); 13 curl_setopt($curl, CURLOPT_URL, $url); //URLをセット 14 15 //curl_setopt($curl, CURLOPT_PUT, true); //これを消したら前回は解決しました。 16 17 //putでファイルを送信するために加工 18 curl_setopt($curl,CURLOPT_INFILESIZE,filesize($file_path)); 19 $handle = fopen($file_path,'r'); 20 curl_setopt($curl,CURLOPT_INFILE,$handle); 21 curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT"); 22 23 curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); //レスポンスデータを受け取るか設定 24 curl_setopt($curl, CURLOPT_HTTPHEADER, $header); //ヘッダーに値をセット 25 curl_setopt($curl, CURLOPT_POSTFIELDS, $csvdata); //PUTする実際のデータをセット 26 curl_setopt($curl,CURLINFO_HEADER_OUT,true); //リクエストヘッダ出力設定 27 28 $result = curl_exec($curl); 29 $info = curl_getinfo($curl); 30 //リクエストヘッダ出力 31 echo curl_getinfo($curl,CURLINFO_HEADER_OUT); 32 echo ('ステータスコードは'.$info['http_code'].'!!!!!'); 33 34 // // 結果を表示する 35 var_dump($result); 36 //セッションを終了する 37 curl_close($curl);
PHP7.4から何かの変更が関係しているようなので調べたところ
curlを使用してcurlFileをポストするとContent-Lengthが欠落する
に少し似た状況の方がいるのですが、バグっぽい?のでしょうか。。。?
Guzzleでは送信できているので致命傷ではありませんが、やはり気持ち悪いです。。。
どなたかお分かりの方がいたら教えて頂けませんでしょうか?
よろしくお願いします。
あなたの回答
tips
プレビュー