如何从Url下载和复制图像?

时间:2017-02-09 09:37:53

标签: php image save-image

我正在创建自定义功能,以便从他们的网址导入我服务器上的图像列表。问题是一些图像被复制,一些图像文件大小为0B。如果我在浏览器中打开该图像网址,则会显示正确的图像。

我正在使用复制功能来复制图像:

 copy($img, DIR_IMAGE.'catalog/'.$filename);

其中$ img包含图像的http url,$ filename包含图像的基本名称。

我还尝试了另一种替代方法:

            $file = fopen ($img, "rb");
            if ($file)
            {
                $newf = fopen (DIR_IMAGE.'catalog/'.$filename, "wb");

                if ($newf)
                while(!feof($file)) 
                {
                    fwrite($newf, fread($file, 1024 * 8 ), 1024 * 8 );
                }
            }
            if ($file) 
            {
                fclose($file);
            }

            if ($newf) 
            {
                fclose($newf);
            }

任何人都可以建议我如何解决这个问题。

先谢谢。

1 个答案:

答案 0 :(得分:0)

它可能是图像热链接保护,如果是这种情况,您将不得不进行稍微复杂的调用来下载该图片:

$ch = curl_init();
$fp = fopen(DIR_IMAGE.'catalog/'.$filename, "w");
curl_setopt($ch, CURLOPT_URL, $img);
curl_setopt($ch, CURLOPT_MUTE, TRUE);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0");
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_COOKIEFILE, "/tmp/c");
curl_setopt($ch, CURLOPT_COOKIEJAR, "/tmp/c");
curl_setopt($ch, CURLOPT_REFERER, "http://".$imgDomain."/");
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0");
curl_exec($ch);
curl_close($ch);
fclose($fp);

您还需要知道域名,可以访问图像(可以与托管的图像相同),并将其作为引用标头提供(如上所述)。