我正在创建自定义功能,以便从他们的网址导入我服务器上的图像列表。问题是一些图像被复制,一些图像文件大小为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);
}
任何人都可以建议我如何解决这个问题。
先谢谢。
答案 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);
您还需要知道域名,可以访问图像(可以与托管的图像相同),并将其作为引用标头提供(如上所述)。