2013-05-30 6 views
1

안녕하세요 모두! 나는 꼬부라기 명령 (오디오 파일 업로드)이 있습니다 :커맨드 컬을 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); 

그것은 작업의 완벽. 나는 그 문제를 직접 풀었다. 서버 바이너리에 파일 업로드. 다들 감사 해요!