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