从远程位置传输和显示图像

时间:2018-12-31 13:42:17

标签: php

我需要在SSL连接上读取图像(基于HTTP)。该脚本读取图像位置并对其进行编码/解码,然后传输文件内容并返回图像。但是,我不断收到错误cannot be displayed because it contains errors

这是我的代码:

<?php   
$image = 'http://www.teleovronnaz.ch/webcam/ovronnazweb.jpg';

$info = getimagesize($image);
$strFileExt = image_type_to_extension($info[2]);

  if($strFileExt == '.jpg' or $strFileExt == '.jpeg'){
    header('Content-Type: image/jpeg');
  }elseif($strFileExt == '.png'){
    header('Content-Type: image/png');
  }elseif($strFileExt == '.gif'){
    header('Content-Type: image/gif');
  }else{
    die('not supported');
  }
  if($strFile != ''){
    $cache_ends = 60*60*24*365;
    header("Pragma: public");
    header("Cache-Control: maxage=". $cache_ends);
    header('Expires: ' . gmdate('D, d M Y H:i:s', time() + $cache_ends).' GMT');

$img_safe = file_get_contents($strFile);
echo $img_safe;
  }
  exit;
?>

2 个答案:

答案 0 :(得分:1)

这对我有用。

<?php
$url = 'http://www.teleovronnaz.ch/webcam/ovronnazweb.jpg';
header('Content-type: image/jpeg');
readfile($url);
?>

答案 1 :(得分:0)

我不知道你为什么这么复杂。我只是剥离了您的缓存处理,但是

<?PHP
$image = 'http://www.teleovronnaz.ch/webcam/ovronnazweb.jpg';
$imageContent = file_get_contents($image);
header("Content-Type: image/jpeg");
echo $imageContent;
die(1);
?>

足以显示图像。不需要base64或其他东西。如果url是静态的,则您甚至不需要区分文件扩展名。您说的是图片-单数。所以我猜这是这里唯一的用例。


我只是花了一些时间来解释一些事情:

  

通过SSL连接读取图像(基于HTTP)

如果为HTTP,则表示没有SSL 。这就是HTTPS的目的。

  

此脚本读取图像位置并对其进行编码/解码,

我不知道您的想法,但事实并非如此。 URL是通过base64_encoding直接将其再次解码为另一个变量。就像执行以下操作:0是您的$image-然后您制作$image+1base64_encode)-这将导致1-然后您进行{{ 1}}($image-1),将再次导致base64_decode