1

我试图点击一个返回二进制数据并用于保存文件的 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);

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

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

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

同样的事情还在发生。

4

2 回答 2

1

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

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

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

不要忘记关闭文件句柄

于 2013-07-18T19:29:07.783 回答
-2

如果您的 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);
于 2014-10-24T09:35:29.987 回答