PHP:我无法从远程URL保存图像

时间:2015-06-08 08:51:26

标签: php curl gd fopen file-get-contents

我需要从远程网址读取图片,然后将其保存在我的托管网站空间中。

这是我要保存的图片(这是网络摄像头测试): http://remoteimage.ddns.info:17000/snapshot.cgi

如您所见,如果您将图片网址放在浏览器中,那么您可以正确地看到图片。但是,如果我尝试使用PHP脚本保存图像,则没有任何反应。我尝试了三种不同的PHP脚本,但它们都不起作用。

更多说明:

  • php version 5.3.29,
  • “allow_url_fopen”设置为“on”,
  • 如果我使用其他图片网址(例如:google.com/images/srpr/logo11w.png),则所有脚本都可以正常使用。

任何人都可以帮我解决如何使用php脚本保存这个远程图像的问题吗?

以下是我迄今为止测试过的三个没有结果的脚本。

脚本1 - 使用file_get_contents:

$remoteUrl = "http://remoteimage.ddns.info:17000/snapshot.cgi";
$image = file_get_contents($remoteUrl); 
$fileName = "captured-image.jpg";
file_put_contents($fileName, $image);

使用上面的脚本我得到这个警告: file_get_contents(url):无法打开流:第2行拒绝连接

脚本2 - 使用GD功能:

$remoteUrl = "http://remoteimage.ddns.info:17000/snapshot.cgi";
$image = imagecreatefromjpeg($remoteUrl);
$fileName = "captured-image.jpg";
$quality = 90;
imagejpeg($image, $fileName, $quality);

通过上面的脚本我再次得到同样的警告: file_get_contents(url):无法打开流:第2行拒绝连接

脚本3 - 使用curl:

$remoteUrl = "http://remoteimage.ddns.info:17000/snapshot.cgi";

$ch = curl_init();
$timeout = 20;
curl_setopt ($ch, CURLOPT_URL, $remoteUrl);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$image = curl_exec($ch);
curl_close($ch);

$fileName = "captured-image.jpg";
file_put_contents($fileName, $image);

在这种情况下,我没有收到任何警告,但最后我得到一个空图像文件。

1 个答案:

答案 0 :(得分:1)

查看回复标题:

Content-Type:image/jpeg
Date:Mon, 08 Jun 2015 08:57:40 GMT
Server:lighttpd/1.4.31
Transfer-Encoding:chunked

Transfer-Encoding:chunked表示内容已(或可能)流式传输。这是HTTP 1.1标准。您使用的是较旧的PHP版本(< 5.3)吗?

我试过这个在我的机器上运行的脚本(PHP 5.6.2,OSX)。

<?php
$rCURL = curl_init();
curl_setopt($rCURL, CURLOPT_URL, 'http://remoteimage.ddns.info:17000/snapshot.cgi');
curl_setopt($rCURL, CURLOPT_HEADER, 0);
curl_setopt($rCURL, CURLOPT_RETURNTRANSFER, 1);

$aData = curl_exec($rCURL);
curl_close($rCURL);
file_put_contents('bla.jpeg', $aData);