php下载一个返回二进制数据的curl文件

时间:2013-07-18 18:37:20

标签: php curl binary

我试图点击返回二进制数据并用于保存文件的网址。当我尝试使用file_put_contents时,文件会生成,但内容为空或文件显示已损坏。

 $url_call = 'http://someurl.com/file/15646';

 $ch=curl_init();   
 curl_setopt($ch, CURLOPT_URL, $url_call);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
 curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
 curl_setopt($ch, CURLOPT_HEADER,0); 
 $response = curl_exec($ch);
 curl_close($ch);


 file_put_contents('/data/testingdirect.pdf', $response);

我知道那里有很多类似的问题,iv看了看所有问题然后尝试了但是他们都将同样的结果归还了一个损坏或空的文件。

我知道该文件很好,因为我实际上可以直接在服务器上访问该文件并看到它的好处。

还有一种方法可以让我确定文件类型或内容类型,以了解如何将fil保存为pdf或jpeg或其他任何内容。

重申这一点:

 $fp = fopen ('/data/testingdirect.jpg', 'w+');
 $ch=curl_init();   
 curl_setopt($ch, CURLOPT_FILE, $fp);
 curl_setopt($ch, CURLOPT_URL, $url_call);
 curl_setopt($ch, CURLOPT_HEADER,0);

$response = curl_exec($ch);
curl_close($ch);
fclose($fp);

同样的事情仍在发生。

2 个答案:

答案 0 :(得分:1)

打开文件句柄,然后将其传递给CURLOPT_FILE。

$tempFP = fopen('/data/testingdirect.pdf', 'w+');
curl_setopt($ch, CURLOPT_FILE , $tempFP);

执行curl exec时,结果将进入该文件指针

别忘了关闭文件句柄

答案 1 :(得分:-1)

如果您的网址是安全的,那么您可能需要将SSL_VERIFYPEER设置为false;

$file = 'file.txt';
$url = 'example.com/';
$fp = fopen($file, 'w');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 20);
curl_setopt($ch, CURLOPT_HEADER , false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST , false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER , false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION , true);
curl_setopt($ch, CURLOPT_AUTOREFERER , true);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12');
curl_setopt($ch, CURLOPT_FILE, $fp);
$con = curl_exec($ch);
curl_close($ch);