【问题标题】:display image from HTML page using PHP without calling PHP script or using PHP echo to hide image path使用 PHP 从 HTML 页面显示图像而不调用 PHP 脚本或使用 PHP 回显隐藏图像路径
【发布时间】:2019-05-11 13:17:27
【问题描述】:

我想在 HTML 网页中显示来自文件的图像,使用 PHP 隐藏文件的位置,使用 PHP 标头/读取文件,并避免使用任何会显示文件位置的 PHP(例如 echo)。

到目前为止,我只能通过从 HTML 调用 PHP 脚本来实现此功能,但我更愿意在不调用脚本的情况下这样做,因此查看者看不到 PHP 脚本文件。我不想使用 PHP 文件而不是 HTML 文件(因此查看者自己无法键入 PHP 脚本的 URL)。

image.php:

<?php
header('Content-Type:image/jpeg'); 
readfile('../image.jpg');
?>

image.html:

<html>
...
<img src="image.php"/>

在 HTML 文件中,我想做等效但内联的操作:

<html>
...
<img src="<?php header('Content-Type:image/jpeg');readfile('../image.jpg');?>"/>

或者:

<html>
...
<?php
echo '<img src="';
header('Content-Type:image/jpeg'); 
readfile('../image.jpg');
echo '"/>';
?>

我怀疑我对 HTML 和 PHP 如何协同工作缺乏了解让我失望了。

【问题讨论】:

    标签: php html image


    【解决方案1】:

    我想做等效但内联:

    你不能。您必须有单独的请求。您可以选择将图像内联为 base64,但无论如何这是个坏主意。

    此外,这段代码看起来毫无意义——你只是暴露了现有的文件,没有任何自己这样做的好处,但代价是杀死所有缓存和浏览器可以做的其他功能。除非你知道如何正确地做到这一点(这不是那么简单),否则你是在把简单的事情复杂化,而不是把复杂的事情简单化。

    【讨论】:

    • 我对缓存不感兴趣。这是一个使用率非常低的个人网站(仅限我)。我要做的就是保护图像的路径,所以这不是“毫无意义的”(非常感谢您的评论)。在我创建的真实 HTML 页面中,而不是这个简化的示例,多个图像一起显示在一个页面上,所以我没有把任何事情复杂化。
    • 好吧,如果你不接受建设性的批评,你可能会觉得这个地方不友好。并且保护与否你正在杀死浏览器缓存,导致每个请求都获取可能被客户端缓存的数据,更不用说HEAD请求等。这就是为什么除非正确实施否则它被认为是不好的。尽管如此,如果您不在乎,那么答案是相同的:您可以仅内联 base64 表单,这会为整个图像大小增加 20%。基于 mod 重写的解决方案只会使图像 url 更漂亮。不过我还是会说,对于比图标等更大的项目来说,这是一个相当糟糕的主意。
    • “这段代码看起来毫无意义” - 否定的,没有建设性的。缓存——图像是闭路电视图像,每次加载都会改变,所以没有“杀死浏览器缓存”——请不要做假设。
    【解决方案2】:

    你想要的东西不能在你尝试的时候完成。您可以通过 base64 方法回显内容。但这会使您的 html 的大小非常迅速地增长,这对性能不利。

    有一种方法可以让它工作。这有点棘手,但您可以使用 .htaccess 文件。通常你经常使用它来重写一些 url 以将 url 重定向到index.php。你也可以用它来创建一个图片url:

    RewriteEngine On
    RewriteRule ^/special-images/(.*)\.jpg$ /php-file-directory/image.php?image-name=$1 [L]
    

    如果您现在执行&lt;img src="/special-images/bob.jpg" /&gt;,它将在内部open-image.php$_GET['image-name'] 成为bob

    *现在无法测试 htaccess,但你明白了它的要点。

    【讨论】:

      【解决方案3】:

      尝试将其转换为数据 url

      https://stackoverflow.com/a/13758760/11485791

      示例:

      <img src="<?
      php path = '../image.jpg';
      $type = pathinfo($path, PATHINFO_EXTENSION);
      $data = file_get_contents($path);
      $base64 = 'data:image/' . $type . ';base64,' . base64_encode($data);
      echo $base64;
      ?>"/>
      

      但是返回的 html 会很大

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-19
        • 2016-05-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多