我需要从远程网址读取图片,然后将其保存在我的托管网站空间中。
这是我要保存的图片(这是网络摄像头测试): http://remoteimage.ddns.info:17000/snapshot.cgi
如您所见,如果您将图片网址放在浏览器中,那么您可以正确地看到图片。但是,如果我尝试使用PHP脚本保存图像,则没有任何反应。我尝试了三种不同的PHP脚本,但它们都不起作用。
更多说明:
任何人都可以帮我解决如何使用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);
在这种情况下,我没有收到任何警告,但最后我得到一个空图像文件。
答案 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);