在php中使用带有curl的网址自动下载损坏的图片

时间:2018-11-21 04:41:45

标签: php url curl download

我想从服务器上下载图像而不单击任何内容-当我的php文件执行时,它将自动下载,但是问题是文件已损坏。但是,当我直接将URL粘贴到浏览器中并下载时,它可以完美运行。那么,为什么我的下面的实现不起作用?有任何想法吗?

这是我的代码:

$url_to_image = 'https://hideserver.com/axul-display/assets/ads/';
$ch = curl_init($url_to_image);
$my_save_dir = 'assets/ads/';
$filename = basename($url_to_image.'ads-id-4.gif');
$complete_save_loc = $my_save_dir . $filename;
$fp = fopen($complete_save_loc, 'wb');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_VERBOSE, FALSE);
curl_exec($ch);
curl_close($ch);
fclose($fp);

3 个答案:

答案 0 :(得分:0)

参考发布在php - How to force download of a file?

上的答案

不是使用curl调用,而是使用标头来下载文件。

$file_name = 'ads-id-4.gif';
$file_url = 'https://hideserver.com/axul-display/assets/ads/' . 
$file_name;
header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename=\"".$file_name."\"");
readfile($file_url);
exit;

答案 1 :(得分:0)

大家好,感谢您的帮助,但是我使用了这个非常简单的代码,而不是我自己解决了卷曲问题。

$ image_url ='http://server ***。com / axul-display / assets / ads / ads-id-4.gif';

file_put_contents('assets/ads/ads-id-4.gif', file_get_contents($image_url));

非常感谢大家!

答案 2 :(得分:0)

这对我有用。

 $ch = curl_init($url);
    if (in_array($type, ['jpg', 'jpeg','png'])) {
       curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
    }
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_VERBOSE, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYSTATUS, false);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
    curl_setopt($ch, CURLOPT_TIMEOUT, 400);
    curl_setopt($ch, CURLOPT_FILE, fopen($temp_path, 'wb'));
    curl_exec($ch);
    $info = curl_getinfo($ch);