从PHP执行的curl获取输出

时间:2017-08-03 16:57:07

标签: php xml shell curl exec

我正在使用sonicAPI尝试上传文件。出于某种原因,我不能在php中使用curl这样做,因为他们的api需要标志-F模拟从表单发布....((HTTP)这让curl模拟用户按下提交的填写表单按钮)

反正。我必须使用

exec("$curl https://api.sonicapi.com/file/upload?access_id=$accessId -Ffile=@./shortaudio.mp3 2>&1", $output, $exit);

上传文件。引号中的命令直接输入shell时有效。它返回一个xml字符串。但是,当我var_dump($ output)时,我只是得到了#39; loading'在实际shell中执行时实际未显示的信息。我明白了

array(4) {
  [0]=>
  string(79) "  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current"
  [1]=>
  string(77) "                                 Dload  Upload   Total   Spent    Left  Speed"
  [2]=>
  string(158) "
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100 17008  100   249  100 16759    393  26489 --:--:-- --:--:-- --:--:-- 26517"
  [3]=>
  string(249) ""
}

如何获取应返回的xml字符串?该文件确实上传成功,因此defo应该是一个xml响应。 或者,如果没有,我如何通过php curl模拟表单发布?

2 个答案:

答案 0 :(得分:0)

只需使用-o file.xml保存xml响应

答案 1 :(得分:0)

只使用CURLOPT_POSTFIELDS,等效的PHP curl_代码是

$ch = curl_init ( 'https://api.sonicapi.com/file/upload?access_id=' . $accessId );
curl_setopt_array ( $ch, array (
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => array (
                'file'=>new CURLFile('shortaudio.mp3')
        ),
        CURLOPT_RETURNTRANSFER=>true
) );
$output=curl_exec($ch);
curl_close($ch);