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


php download a file with curl that returns binary data

我试图找到一个返回二进制数据并用于保存文件的url。当我尝试使用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);

我知道有很多类似的问题,我仔细查看了所有的问题并尝试了它们,但它们都返回了相同的结果——一个损坏或空的文件。

我知道这个文件很好,因为我可以直接在服务器上访问这个文件,并看到它很好。

还有没有一种方法可以让我确定文件类型或内容类型,从而知道如何保存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);

同样的事情还在发生。

打开一个文件句柄,然后将其传递给CURLOPT_file。

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

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

不要忘记关闭文件句柄

如果您的url是安全的,那么您可能需要将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);