如何在PHP中执行此curl命令?

时间:2017-11-06 12:39:25

标签: php curl

从终端执行此curl命令正在运行,我正在收回我的结果。

curl -F "file=@/var/www/html/uploads/fb5bc34e1f0f03c759e92010f6a1a302_modified.csv" http://10.0.0.106:8089/uploadAndMatch/ -o ~/out.txt

但是当使用以下代码从PHP尝试时,我得到400 httpcode:

    $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

1 个答案:

答案 0 :(得分:0)

问题是来自PHP的curl命令没有读取文件内容,但它正在读取文件的路径作为post参数。

    $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 = '')为我修复了它。