2013-05-30 154 views
1

大家好!我有curl命令(音频文件上传):将curl转换为php

curl -k -v -H "Expect: " -H "Content-Type:application/octet-stream" --data-binary '@/Path/To/File/test.wav' -X POST 'https://myapi.com?param1=xxx&param2=yyy' 

文件成功上传并且可读。但是,当我使用PHP脚本:

$filename = 'test.wav'; 
$file = '@/Path/To/File/test.wav'; 

$post_url = "https://someapi.com?param1=xxx&param2=yyy"; 
$post_str = array("$filename" => $file); 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt($ch, CURLOPT_URL, $post_url); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/octet-stream')); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect: ')); 
curl_setopt($ch, CURLOPT_BINARYTRANSFER, TRUE); 
curl_setopt($ch, CURLOPT_POST, TRUE); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_str); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
$http_body = curl_exec($ch); 
var_dump($http_body); 

文件成功上传和test.wav无效(有一些错误)。我在剧本中做了什么错误?

+0

你看到什么错误? –

+0

流格式不是wav – vovan

回答

3

我怀疑的问题是,这些行:

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/octet-stream')); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect: ')); 

的第二个电话会删除 “的Content-Type” 头。尝试整合这些:

$headers = array('Content-Type:application/octet-stream','Expect: '); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
+0

不,结果相同。 – vovan

0
$filename = 'test.wav'; 
$file = '/Path/To/File/test.wav'; 

$post_url = "https://someapi.com?param1=xxx&param2=yyy"; 
$post_str = file_get_contents($file); 
$headers = array('Content-Type:application/octet-stream', 'Expect: '); 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt($ch, CURLOPT_URL, $post_url); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
curl_setopt($ch, CURLOPT_POST, TRUE); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_str); 
curl_setopt($ch, CURLOPT_BINARYTRANSFER, TRUE); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
curl_setopt($ch,CURLOPT_VERBOSE,true); 
curl_setopt($ch, CURLOPT_STDERR, fopen("/Path/to/header.txt", "w+")); 
$http_body = curl_exec($ch); 

它的工作完美。我自己解决了这个问题。文件上传到服务器二进制文件。谢谢你们!