检测图像是否嵌入

2023-11-30

我开始编写自己的图像主机,但我有一个小问题:

如果您通过浏览器直接查看链接(例如 Domain.com/img/123),我想显示一个 HTML 页面,如果您通过以下方式嵌入链接,我想显示一个图像

<img src="Domain.com/img/123">

以方便使用。

是否可以检测链接是直接查看的还是用PHP嵌入的链接?


您可以使用htaccess为此目的文件:

当浏览器加载嵌入图像时,他已经知道期望的格式,因此他会将这些信息添加到HTTP:Accept请求文件时的标头。 (或者至少将其减少为任何图像类型)

如果浏览器直接访问文件(地址栏中的 url),他不知道这一点,所以他会添加text/html to the HTTP:Accept Header.

从铬中提取:

direct: Accept text/html, application/xhtml+xml, */*

嵌入:Accept image/png, image/svg+xml, image/*;q=0.8, */*;q=0.5

使用此信息来捕获直接访问情况:下面的示例将重定向访问http://localhost/test/myimage.gif to index.php?url=/test/myimage.gif.

RewriteEngine on

RewriteCond %{REQUEST_URI} .*\.gif        # redirect gifs
RewriteCond %{REQUEST_URI} !.*index\.php  # make sure there is no loop
RewriteCond %{HTTP:Accept} .*text/html.*  # redirect direct access
RewriteRule (.*) http://localhost/test/index.php?url=$1 [R,L]  

另一个文件,例如http://localhost/test/test.php可以正确使用<img src="http://localhost/test/myimage.gif" />不会发生重定向,因为没有Accept: text/html将被寄出。

请记住,这有点不好test:一旦将图像嵌入到某处,当您直接访问该图像时,浏览器缓存将不再加载数据。因此它看起来像直接访问是可能的。但是,如果您按 F5 刷新缓存的图像,则重定向将适用。 (保持调试工具打开以禁用缓存)


Update

至于你的评论。我忽略了你想随时使用人工 url 来呈现图像。这改变了htaccess ofc的设计方式。

以下 htaccess 的行为应符合您的预期:

  • 如果请求 Uri 以斜线结尾,后跟数字(即/2537263)它被认为有资格重写。
  • 如果是直接访问(Http-Accept说文本/html) 被重写为wrapperpage.php
  • 如果是嵌入式访问(HTTP-Accept说not*text/html) 被重写为image.php

访问:

RewriteEngine on

RewriteCond %{REQUEST_URI} /\d+$   
RewriteCond %{HTTP:Accept} .*text/html.*  
RewriteRule ^(.*?)$ http://localhost/test/wrapperpage.php?id=$1 [R,L]

RewriteCond %{REQUEST_URI} /\d+$   
RewriteCond %{HTTP:Accept} !.*text/html.*      
RewriteRule ^(.*?)$ http://localhost/test/image.php?id=$1 [R,L]

注意:如果省略[R]选项,用户将看不到 url 中反映的重定向。

我使用的示例页面代码:

包装页.php:

THIS IS MY WRAPPER PAGE: 

<br />                   
<img src = "http://localhost/test/<?=$_GET["id"]?>" />
<br />

IMAGE IS WRAPPED.

image.php(我假设你确定图片的逻辑就在那里)

<?php

//Load Image
$id = $_GET["id"];

//pseudoloading based on id... 
// loading... 
// done. 
$image = imagecreatefromgif("apache_pb.gif"); 

//output image as png.
header("Content-type: image/png");
imagepng($image);

?>

So:

  • http://localhost/test/1234在浏览器中->wrapperpage.php?id=1234
  • http://localhost/test/1234嵌入->image.php?id=1234
  • http://localhost/test/image.php?id=1234-> 返回 png 图像。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检测图像是否嵌入 的相关文章

  • 使用 DOJO 自动完成文本框

    我正在寻找一种使用 DOJO 进行文本框自动建议的简单方法 我将查询的数据库表 使用 PHP 脚本 以 JSON 形式返回 有超过 100 000 条记录 因此这确实不应该采用 FilteringSelect 或 ComboBox 的形式
  • 如何在没有引用的情况下复制对象?

    PHP5 OOP 有据可查对象通过引用传递 http php net manual en language oop5 references php默认情况下 如果这是默认的 在我看来 有一种非默认的方式可以在没有参考的情况下进行复制 如何
  • postgreSQL 在 WAMP 上的集成

    我刚刚在 Windows 7 上安装了 postgreSQL 我正在尝试将 postgreSQL 与 WAMP 服务器集成 为此 我在 httpd conf 和 php ini 文件中进行了以下更改 1个加载模块c path to libp
  • 如何从字符串中删除所有数字?

    我想删除字符串 0 9 中的所有数字 我写了这段有效的代码 words preg replace 0 words remove numbers words preg replace 1 words remove numbers words
  • Zend Framework Zend_Form 装饰器: 位于按钮元素内部?

    我有一个像这样创建的按钮元素 submit new Zend Form Element Button submit submit gt setLabel My Button submit gt setDecorators array Vie
  • PHP 和 NLP:嵌套括号(解析器输出)到数组?

    想要将带有嵌套括号的文本转换为嵌套数组 以下是 NLP 解析器的输出示例 TOP S NP PRP I VP VBP love NP NP DT a JJ big NN bed PP IN of NP NNS roses 原文 我喜欢一大床
  • 文件修改时间检查的成本

    对于Linux下包含少量字节的文件 我只需要处理自上次处理以来发生更改的时间 我通过调用 PHP 检查文件是否被更改clearstatcache filemtime 定期 由于整个文件总是很小 因此删除对 filemtime 的调用并通过将
  • Yii2 中 init() 和 __construct() 方法有什么区别

    init 方法 public function init construct method public function construct 那么 它们之间有什么区别 应该使用哪一个呢 init 是从以下对象扩展的任何对象的方法yii b
  • 删除 woocommerce 店面主页标题 php

    我正在使用 woocommerce 的店面主题 我需要用 php 删除主页标题 h1 我知道 css 解决方案 但我不想使用它 因为我想将 h1 添加到该页面的其他位置 并且在一个页面中包含 2 个 h1 对 seo 不利页 我也知道删除页
  • 在 null laravel 上调用成员函数 save()

    大家好 我正在使用 laravel 5 多态关系将数据保存在数据库中 但我遇到了一些问题 当我尝试将数据保存在数据库中时 它会抛出此错误 对 null 调用成员函数 save 我不知道为什么我会遇到这个错误 我正在关注多态关系的本教程在 L
  • JavaFX 图像未在舞台中显示

    我尝试了很多次 尝试了很多方法 但都无法让自己的形象在舞台上如我所愿 我认为这可能与java寻找资源的路径有关 但我不确定 因为我刚刚开始使用视觉库 在本例中为JavaFX 这是我的目录结构 MyProject assets img myI
  • 如何在 Twitter Card 中传递动态图像路径?

    我在用
  • 保存为 HDF5 的图像未着色

    我目前正在开发一个将文本文件和 jpg 图像转换为 HDF5 格式的程序 用HDFView 3 0打开 似乎图像仅以灰度保存 hdf h5py File Sample h5 img Image open Image jpg data np
  • 监听文件夹和文件(更改)

    可以直接在 PHP 或 Node 上监听文件夹和文件的更改 通过事件 还是我需要创建自己的方法来执行此操作 Example 我需要听文件夹 user 如果我将一些文件添加到该目录中 PHP 或 Node 会收到信息并运行PathEvent
  • HTML 代码中的 PHP [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我用 HTML 代码编写了 PHP div div 但这出现在输出页面中 else print 我怎样才能让PHP执行 你的文件有一个 p
  • 显式删除会话cookie会产生什么影响?

    我使用 php session 来维护用户的会话 Session 在登录后创建 在注销或超时后销毁 我需要管理面板中的一个选项来强制注销任何用户 如果他在网站上处于活动状态 我怎样才能做到这一点 我正在考虑删除临时会话文件 这应该有效地破坏
  • PDO语法错误

    我在一个项目中使用 PDO 但提交时出现语法错误 这是我的代码
  • 如何在 Carbon Laravel 中添加日期和另一个日期?

    在我的 laravel 项目中 我想将日期时间增加到前一个日期时间 这是我的代码 expire order 0 gt expire date new Carbon now gt addMonths 6 这两行的结果是 2018 01 28
  • 如何在数据列表 HTML PHP 中设置选择

    您好我想知道是否有一种方法可以在数据列表中设置选定的值 我想要这样的东西
  • 如何使用配置文件 (.ebextensions) 在 AWS Elastic Beanstalk 上安装 PHP IMAP 扩展?

    有谁知道如何使用配置文件 ebextensions 在 AWS Elastic Beanstalk 上安装和启用 PHP IMAP 扩展 我使用的是 64 位 Amazon Linux 2017 03 v2 4 0 运行 PHP 7 0 1

随机推荐