Linux + php でファイルアップロード失敗について

下記問題、ご存知の方がいらっしゃいますか?

環境によって、同じソースコードを実施して結果が違います、原因不明です。

環境が違うけど、マルチパート形式不正のメッセージが出たのがおかしい。。。

  1. Windows環境では問題なくアップロードしました。

  2. Linux環境では失敗しました。メッセージは以下↓↓↓

  3. アップロードするHTTPリクエストの形式が正しくありません。HTTPリクエストはマルチパート形式である必要があります。

 

※$fData はPDFファイルのバイナリデータです。

        $crlf = PHP_EOL;
        $boundary = uniqid('------------------pf');
        $url = $params['kin_domain']. '/k/v1/file.json';
        $data = implode($crlf, [
            '--'. $boundary,
            'Content-Disposition: form-data; name="file"; filename="'. $fName .'"',
            'Content-Type: application/pdf',
            $crlf. $fData,
            '--'. $boundary .'--'. $crlf,
        ]);
        $header = [
            'Content-Type: multipart/form-data; boundary='. $boundary,
            'Content-Length: '. strlen($data),
            'X-Cybozu-API-Token: '. $params['kin_token'],
        ];
        $curl = curl_init($url);
        curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);

        $result = curl_exec($curl);
        $httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
        curl_close($curl);

原因が分かりました。

Linux環境の場合、PHP_EOLは「」になってしまったため、リクエストの形式が不正になりました。

$crlf= "\r";

に変更し、無事にアップロードできました。