2017-11-06 33 views
0

ターミナルからこのcurlコマンドを実行すると、結果が返ってきます。このcurlコマンドをPHPで実行するには?

curl -F "[email protected]/var/www/html/uploads/fb5bc34e1f0f03c759e92010f6a1a302_modified.csv" http://10.0.0.106:8089/uploadAndMatch/ -o ~/out.txt 

しかし、私は400 httpcodeを取得しています次のコードでPHPからそれをしよう:

$request = curl_init('http://10.0.0.106:8089/uploadAndMatch/'); 
    curl_setopt($request, CURLOPT_POST, true); 
    curl_setopt($request, 
    CURLOPT_POSTFIELDS, 
    array(
     'file' => '@/var/www/html/uploads/fb5bc34e1f0f03c759e92010f6a1a302_modified.csv' 
    )); 
    curl_setopt($request, CURLOPT_RETURNTRANSFER, true); 
    echo curl_exec($request); 
    $httpcode = curl_getinfo($request, CURLINFO_HTTP_CODE); 
    echo $httpcode; 
    curl_close($request); 

私もヘッダを追加しようとしました:

$header = array('Content-Type: multipart/form-data'); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $header); 
curl_setopt($ch, CURLOPT_POST, 1); 

しかし、それはまだ同じですエラー! 400 bad request ご意見はありますか?

それはphp5.5でchanges +

+0

実際のリクエスト(curl、php + curl)とwiresharkを比較できますか?サーバーコード/ログにアクセスできますか? – BNT

+0

また、あなたのサーバーはフォームのデータを[ここ](https://stackoverflow.com/a/28411/7926064)に記載されているようにサポートしていない可能性がありますので、[http_build_query](http://php.net/manual/en /function.http-build-query.php) – BNT

+0

[Php - Debugging Curl]の重複している可能性があります(https://stackoverflow.com/questions/3757071/php-debugging-curl) – Nic3500

答えて

0

問題はPHPからcurlコマンドは、ファイルの内容を読んでいないが、それは、ファイルのパスを読んでいただったからだと、デバッグの問題ではありませんでしたポストパラメータ。私は解決

$request = curl_init('http://10.0.0.106:8089/uploadAndMatch/'); 
    // send a file 
    curl_setopt($request, CURLOPT_POST, true); 
    $fileName = explode("/", $file); 
    $fileName = end($fileName); 
    if (function_exists('curl_file_create')) { // php 5.5+ 
     $cFile = curl_file_create($file,'text/csv',$fileName); 
    } else { // 
     $cFile = '@' . realpath('/var/www/html/uploads/ss.csv'); 
    } 
    $post = array('file'=> $cFile); 
    curl_setopt($request,CURLOPT_POSTFIELDS,$post); 
    curl_setopt($request, CURLOPT_RETURNTRANSFER, true); 

及び第二の問題は、curl_create_file($fileName)内のファイルをフルパスとしてサーバーに送信され、curl_file_create($filename, $mimetype = '', $postname = '')を使用すると、私のためにそれを修正したということでした。

関連する問題