我正在尝试根据用户的访问级别显示img_a.png或img_b.png(例如登录或不登录)。当然,公众不应该获得内容(在这种情况下为img_a和img_b)。
我尝试了一些解决方案,但没有一个能帮助我,这就是我在这里寻求帮助的原因。我到目前为止尝试的是:
根据用户检查,我尝试将资源文件夹添加到" open_basedir"这是一个蹩脚的选择,但看起来最简单的解决方案。所有这一切都是通过它发出一个警告,资源不在它的基础文件夹中。
尝试将资源放在公用文件夹中,并通过.htaccess限制它们。但在这种情况下,他们不仅受到了不受欢迎的观众的限制,而且受到了所有人的限制。
最后和最接近的尝试是将图像放回到webroot之外,并编写一个验证访问权限的类,并提供如下图像:
class Image {
...
public function getImage() {
...
header('Content-Type: '.$this->type);
readfile($this->item);
之后通过以下内容显示在初始脚本中:
echo "<img src=".$image->getImage($file).">";
上面的问题是标题已经发送,所以我可以流式传输.php页面的图像或html输出,但不能同时输出。我有办法吗?
答案 0 :(得分:1)
创建一个脚本,用于检查所需的任何用户属性,确定要提供的图像,以及读取/发送该图像。使用脚本URL作为<img src=...
属性,即
<img src='/scripts/user_image.php'>
这样的东西适用于PNG图像。 GIF,JPG等也存在类似的功能。
<?php
// do stuff here to determine file name of image to send
if($_SESSION['userlevel']=="ADMIN"){
$imageFilename="admin_image.png";
}
// Create Image From Existing File
$image = imagecreatefrompng($imageFilename);
//Set the Content Type
header('Content-type: image/png');
// Send Image to Browser
imagepng($image);
// Clear Memory
imagedestroy($image);
exit;
?>
好的,根据你的评论,我认为你引用的是错误的。
我的工作脚本与上面完全相同,只有if-then被注释掉了。我只是将文件名分配给变量。我已将脚本命名为user_image.php
。
引用图片的简单index.html
文件 -
<html>
<head><title>test</title></head>
<body>
Hello World!<br />
<img src="user_image.php">
</body>
</html>
它只是工作。请参阅https://itsjustcrap.com/img或https://itsjustcrap.com/img/src.zip
抓取来源我会把它留下几天,但除了png图像和if-then之外的注释,源代码与此帖中的内容完全相同。
答案 1 :(得分:0)
实际上我觉得我找到了一个解决方案来解决我的问题。
将图像显示为如下数据:
<img src="data:image/png;base64, <?=base64_encode(file_get_contents($file))?>" alt="img">
而不是使用readfile()php脚本在源属性中提供它,如:
<img src="image.php?<?=$file?>" alt="my_image">
在html页面内,最后一个给我一个标题冲突。