【问题标题】:PHP inside img srcimg src里面的PHP
【发布时间】:2013-02-17 00:43:09
【问题描述】:

尝试查看通过图像 src 调用的 PHP 脚本可以执行哪些操作,如下所示:

<img src="http://example.com/script.php" />

现在,我尝试在 script.php 中包含 PHP header() 函数:

<?php
header("Location: http://example.com");

我还尝试回显一个期望 img 显示它的图像 url,但它没有:

<?php
echo 'http://example.com/image.png';

有没有办法用在 img src 属性中调用的 PHP 脚本来做这些事情?

【问题讨论】:

  • 贴出你试过的代码。
  • 一个 html img 标签期望源返回一个图像文件。如果 script.php 生成一个图像以作为带有适当标题的原始图像数据流回,它将起作用。你要回什么?

标签: php redirect image


【解决方案1】:

有没有办法用在 img src 属性中调用的 PHP 脚本来做这些事情?

是的,但 PHP 脚本必须仅输出图像数据,如其他各种答案所述。

话虽如此,只需读取图像并使用readfile将其输出到流中

header('Content-Type: image/png');
readfile($file);
exit();

我知道我可能晚了几年才能真正帮助你,但公认的答案是不正确的(不再)。

【讨论】:

  • 不要忘记第一行的第二个引号 :)
  • 哎呀,修复了。
【解决方案2】:

您应该记住,src 标签应该直接指向一个图像文件。但是,可以使用 PHP 创建图像,例如使用 GD 库:

http://php.net/manual/en/book.image.php

所以使用:

<img src="http://example.com/script.php" />

是可能的,只要 script.php 真的输出一个图像文件,例如使用此处描述的示例:

http://www.php.net/manual/en/image.examples-png.php

我过去曾使用这种处理方法在经纪网站的 JPG 图像上叠加文本(例如新的、已售的、出租的等)。

【讨论】:

    【解决方案3】:

    您的 script.php 应该返回带有正确标题的图像输出。例如:

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

    // Script.php

    $file = "tiger.jpeg";
    $type = "image/jpeg";
    header("Content-Type: $type");
    header("Content-Length: " . filesize($file));
    readfile($file);
    

    【讨论】:

      【解决方案4】:

      查看readfile() 作为从script.php 输出图像文件的一种方式

      readfile($file);
      

      在手册中阅读更多信息:

      http://php.net/manual/en/function.readfile.php

      示例 #1 给出了如何设置标题的想法。

      手册还指出:

      readfile() 不会出现任何内存问题,即使在发送大文件时也是如此 文件,独立的。

      一个 URL 可以用作这个函数的文件名

      ps:这是 Wordpress Multisite 用来打开用户上传(例如图像)文件的方式。

      【讨论】:

      • 难道我也必须使用正确的标题吗?以及如何将其内容返回到 src 属性?
      • 是的,示例 #1 让您了解如何构建标题。
      【解决方案5】:

      有没有办法用在 img src 属性中调用的 PHP 脚本来做这些事情?

      没有。用作 img 标签的src 的资源需要输出图像数据,仅此而已。

      有一些例外,例如。 header("location: ....") 重定向,但重定向需要指向另一个有效的图像资源,而不是您在示例中显示的网站。

      【讨论】:

      • 如果您发回一些带有正确标题的文本,一些较旧的浏览器可能会尝试执行 javascript;图像来源中存在一些历史漏洞,但我相信它们现在都已被堵塞。
      猜你喜欢
      • 1970-01-01
      • 2011-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-03
      相关资源
      最近更新 更多