PHP从文档根外部插入图像
好吧,我对PHP不是很有经验,我一直在寻找一种在文档根目录之外访问图像文件的方法。我知道这个问题有很多答案,但没有一个能真正帮助我 到目前为止,我得到的是这样的文件夹结构(忽略奇怪的文件名): 我将此代码放在PHP从文档根外部插入图像,php,Php,好吧,我对PHP不是很有经验,我一直在寻找一种在文档根目录之外访问图像文件的方法。我知道这个问题有很多答案,但没有一个能真正帮助我 到目前为止,我得到的是这样的文件夹结构(忽略奇怪的文件名): 我将此代码放在files.php中: 如果我从浏览器访问files.php,我会看到imagez.php的内容,这是意料之中的 我的问题是,我希望能够对文件logo.png执行相同的操作。文件夹img不可公开访问,因此我知道必须使用PHP调用该图像 当有人访问文件files.php时,如何使logo.p
files.php
中:
如果我从浏览器访问files.php
,我会看到imagez.php
的内容,这是意料之中的
我的问题是,我希望能够对文件logo.png
执行相同的操作。文件夹img
不可公开访问,因此我知道必须使用PHP调用该图像
当有人访问文件
files.php
时,如何使logo.png
显示在页面上?由于图像不是公开访问的,您需要通过php获取图像,然后输出具有正确标题的图像
$image = file_get_contents('path/to/image.png';
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
你可以写一个非常简单的脚本,比如
<?php
header('Content-Type: image/png');
if (strpos($_GET['img'], '..') === false) // check for quackery
readfile('../img/' . $_GET['img']);
但是,此解决方案有几个缺点:
- 通过PHP中继图像需要时间和性能
- 该脚本可能会受到攻击,让坏人检索服务器上的任何文件
您最好直接托管可访问的图像。这是一个非常糟糕的主意。允许在请求中指定文件名而不进行解析/健全性检查是非常危险的。不要这样做。@user3791372这就是我写免责声明的原因。但公平地说,我添加了一个非常粗糙的检查。
/img.php?img=/…
将绕过该选项?@user3791372不,不会。只要。
出现在字符串中的任何位置,该条件就会失败,而且我们仍在准备。/img/
,因此绝对路径也不起作用。不过,我无法使用../使用PHP访问img文件夹(出于某些奇怪的原因)。这就是我为什么要寻找其他解决方案的原因。我希望能够阻止未登录的用户访问某些图像上面的答案对我没有帮助,因此我不得不发布以下内容:/
<?php
header('Content-Type: image/png');
if (strpos($_GET['img'], '..') === false) // check for quackery
readfile('../img/' . $_GET['img']);
/img.php?img=logo.png