0

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

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

 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);
            }

谁能建议我如何解决这个问题。

提前致谢。

4

1 回答 1

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);

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

于 2017-02-09T11:38:03.220 回答