PHP响应标题技巧

时间:2018-11-01 01:00:00

标签: javascript php html html5 response-headers

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文件就可以得到相同的结果。

3 个答案:

答案 0 :(得分:0)

您可以使用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 sprites来显示图像的不同部分。

答案 1 :(得分:0)

没有“把戏”。您不能“防止用户获取图像”。

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

您不能让一个URL返回两个不同的东西。我的意思是,可以,每次访问URL时,服务器可以随机返回不同的内容。但这很荒谬。 如果您希望访问者看到您的图像,则需要给他们提供一个唯一的URL。如果您不希望访问者看到您的图像,图片,请勿将其放在网上。

如果您确实让访问者看到您的图像,则意味着他们需要将其下载到计算机上。他们需要一个URL。您的访问者根本不在乎该URL以KClass<out T>还是.php结尾。他们所知道的只是对该URL的请求将返回该图像。您的“技巧”没有任何作用。您仍然以 URL 结尾,可以从中下载图片

一旦下载了图片并且访问者可以看到它,它就会在他们的计算机上。您不能阻止用户获取图像同时看到图像。你想要的是废话。

(此答案似乎有些杂乱无章,但解决了问题的the original revision。)

答案 2 :(得分:0)

另一种通过一次调用显示多张图像的方法是,而不是返回单张图像,而是返回包含多张图像的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文件返回图像。这将防止直接链接回到您的网站。在某些情况下有正当理由,我使用的示例是邮购新娘站点。一些个人资料图片是公开可见的,其他则不是(并非没有帐户)。在这种情况下,这不再是“成人”内容问题,因此有法律责任不向公众展示某些图像或将其直接链接回网站。

但这仍然不会阻止某人复制图像并公开共享。