PHP响应头技巧



index.php:

<style type="text/css">
img {
width: 50px;
}
</style>
<iframe name="myPHPScript" src="header.php" width="50%" 
frameborder="0"> 
</iframe>
<iframe name="myPHPScript" src="header.php" width="50%" 
frameborder="0"> 
</iframe>
<iframe name="myPHPScript" src="header1.php" width="50%" 
frameborder="0"> 
</iframe>

header.php:

<?php header("Content-type: image/png");
$img1 = file_get_contents ("3.png");
echo $img1;
?>

header1.php:

<?php header("Content-type: image/png");
$img2 = file_get_contents ("test1.jpg");
echo $img2;
?>

通过这种方法,我可以调用多个图像,但这不是我所期望的,我希望只使用1个php文件就可以得到相同的结果。

您可以使用URL参数。

<iframe name="myPHPScript" src="header.php?id=0" width="50%" 
frameborder="0"> 
</iframe>
<iframe name="myPHPScript" src="header.php?id=0" width="50%" 
frameborder="0"> 
</iframe>
<iframe name="myPHPScript" src="header.php?id=1" width="50%" 
frameborder="0"> 
</iframe>

PHP脚本使用$_GET['id']来确定返回哪个图像文件。

<?php 
header("Content-type: image/png");
$images = ["3.png", "test1.jpg"];
if (isset($images[$_GET['id']])) {
readfile($images[$_GET['id']]);
}
?>

另一种选择是让PHP返回一个包含所有连接图像的单个图像,并使用CSS精灵来显示其中的不同部分

没有"窍门"。您不能"阻止用户获取图像"。

每个服务器端资源,即图像、HTML页面、样式表、所有,都需要有一个URL,通过该URL可以下载它们。浏览器发出下载URL的请求,接收对该请求的响应,然后将其相应地视为HTML页面、图像或其他任何内容。

你不能让一个URL返回两个不同的东西。我的意思是,你可以,你的服务器可以在每次访问URL时随机返回不同的内容。但这是非常荒谬的如果你想让访客看到你的图片,你需要给他们一个唯一的URL。如果不想让访客看到你的照片,不要把它放在网上。

如果你确实让访客看到你的图片,那就意味着他们需要将其下载到电脑上。他们需要一个URL。您的访问者根本不在乎该URL是以.php结尾还是以.jpg结尾。他们所知道的是,对该URL的请求将返回该图像。你的"把戏"没有任何作用。您最终仍然会得到一个URL,从该URL可以下载图像

一旦图像被下载,访问者可以看到它,它就在他们的电脑上。你不能阻止用户获取图像,同时也可以看到图像。你想要的是胡说八道。

(这个答案可能看起来有点杂乱无章,但解决了问题的原始修订。(

用一个调用显示多个图像的另一种方法是,不返回单个图像,而是返回包含多个图像在内的HTML。例如,您可以调用php文件并返回以下内容:

<img src="data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="/>
<img src="data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="/>
<img src="data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="/>
<img src="data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="/>

其中,您将图像数据作为base64编码数据直接放入SRC中,而不是链接。

不过,正如其他人所指出的,它不会阻止某人复制图像。

一个很好的例子就是为什么使用ctrl+prtsc。即使我们忽略了浏览器缓存之类的东西。我们也可以截图图像。


正如我在评论中提到的,如果有人没有登录,你可以阻止PHP文件返回图像。这将阻止直接链接回你的网站。在某些情况下,这是有正当理由的,我使用的例子是邮购新娘网站。一些个人资料图像是公开可见的,另一些则不是(并非没有帐户(。在本案中,这并不是一个"成人"内容问题,因此有法律责任不向公众展示一些图片或将其直接链接回网站。

但同样,这并不能阻止某人复制图片并公开分享。

最新更新