使用PHP复制图像

使用PHP复制图像,php,image,curl,fopen,Php,Image,Curl,Fopen,在另一个站点的许可下,我应该定期下载另一个站点上托管的图像,并将其包含在我们站点上的网络摄像头照片集合中,并提供到贡献站点的外部链接 这对于其他任何网站来说都不是什么问题,但是对于这个特定的网站,我无法打开图像来调整其大小并将其保存到我们的服务器。这不是一个热链接问题,因为我可以在我们的站点上的页面上创建一个普通的ole“,而且效果很好 我曾尝试直接使用$img=new Imagick($sourceFilePath)和其他所有方法一样,尝试使用PHP的copy,也尝试使用cURL复制图像,但这

在另一个站点的许可下,我应该定期下载另一个站点上托管的图像,并将其包含在我们站点上的网络摄像头照片集合中,并提供到贡献站点的外部链接

这对于其他任何网站来说都不是什么问题,但是对于这个特定的网站,我无法打开图像来调整其大小并将其保存到我们的服务器。这不是一个热链接问题,因为我可以在我们的站点上的页面上创建一个普通的ole“
,而且效果很好

我曾尝试直接使用
$img=new Imagick($sourceFilePath)
和其他所有方法一样,尝试使用PHP的copy,也尝试使用cURL复制图像,但这样做时,页面只是超时,根本没有结果

以下是有问题的图像:

就像我说过的,我可以用其他几个网络摄像头来做这类事情,但这一个不起作用,我一直在想为什么它不起作用。任何帮助都将不胜感激


谢谢。

为了减少带宽和服务器负载,一些网站阻止某些机器人访问其内容。您的cURL请求需要更接近实际的浏览器,其中包括一个推荐人(通常)、用户代理等。也可能是存在重定向,而您没有告诉cURL遵循重定向

尝试设置更多选项,如下所示:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_ENCODING , "gzip");
curl_setopt($ch, CURLOPT_REFERER, $url);
curl_setopt($ch, CURLOPT_USERAGENT, 'PHP');
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
如果这不起作用,请从实际的浏览器中获取用户代理,并将其放入其中,然后看看这是否会产生影响。

尝试使用

例如:

$url = 'http://island-alpaca.selfip.com:10202/SnapshotJPEG?Resolution=640x480&Quality=Standard';
$outputfile = "tmp/image" . date("Y-m-d_H.i.s");
$cmd = "wget -q \"$url\" -O $outputfile";
exec($cmd);
$temp_img = file_get_contents($outputfile);
$img = new Imagick($temp_img);

你能试试这个然后给我回电话吗?

你澄清说你有权从其他网站获得他们的照片。很好。这个url在这里与文件_get_contents()配合得很好。谢谢你的建议,但我已经尝试过插入一个实际的USERAGENT字符串(从FireBug中提取),它仍然会超时。也可能是服务器的IP不知何故从远程服务器上被列入黑名单。因为在上面的评论中它对Marc B有效,所以您的服务器访问它时一定出了问题。试着从命令行下载,看看这是否有助于缩小范围。谢谢你的建议,但是文件内容也会超时。你是在windows还是linux环境下?如果您在linux上,请尝试从命令行创建映像。如果它下载正确,然后尝试像我将更新上面的东西。