PHP / HTML - 从根目录外部加载图像

3

我正在尝试在HTML的<img>标签中加载图片。

我的图片文件夹与根文件夹在同一文件夹中,这意味着我需要向上进入一个文件夹才能访问图片文件夹。

我在互联网上搜索并找到了使用GET请求在图像的src属性中的方法,但不幸的是没有成功。

文件夹结构:

img >
    somefile.png
    foo.png
    bar.png
html >
    index.php
    imageRequest.php
    //other root files

我无法使用以下代码:<img src="../img/somefile.png">,因为它指向了一个不存在的东西(呃!)。所以我尝试使用GET请求。

我的HTML代码

<div>
   <img src="imageRequest.php?requested=somefile.png">
</div>

我的PHP(imageRequest.php)

    $fileName = $_GET['requested'];
    fetchImage();

    function fetchImage(){
        global $fileName;
        if(!isset($fileName)) return;
        $filePath = dirname($_SERVER['DOCUMENT_ROOT'])."/img/".$fileName;
        if(file_exists($filePath)){
            readfile($filePath);
        }
    }

简述:<img> 标签中使用来自根目录之外的文件夹中的图像。


1
由于您的文件夹位于根目录之外,因此无法使用 DOCUMENT_ROOT... 如果您有权限,可以在函数 fetchImage() 中使用绝对路径。我建议您还将变量 $fileName 传递给函数,并不要在其中使用全局变量。 - Raphael Müller
@RaphaelMüller dirname($dir); 抓取父文件夹,那正是我需要的文件夹;)不过还是谢谢你的提示。 - Dubb
1个回答

4

使用PHP将该图像转换为base64格式,并输出内容和适当的标头:

[imageRequest.php?requested=some_file.png]

$imagesDir = __DIR__.'/../';
$content = file_get_contents($imagesDir.$_GET['requested']);
$content = base64_encode($content);

$data = "data:image/png;base64,{$content}";

header('Content-Type: image/png');
echo base64_decode($data);`

1
请注意,您可以轻松注入另一个路径。您必须检查它是否真的是图像。否则可能会访问配置文件等内容... - Raphael Müller
在编写 HTML 代码时,添加一个重写规则会更方便。例如,将 /someimagesource/some_file.png 重写为 imageRequest.php?requested=some_file.png - Raphael Müller
@RaphaelMüller 这与 OP 的问题无关。但作为附注,您可以将任何扩展名为 png|jpg|jpeg|png 的文件映射到此函数,然后 URL 可能看起来像 example.com/some_file.png - Justinas
@Dubb 访问该网址并查看是否能够获取图像。您可以随时注释掉 header 部分,以便浏览器不将该页面视为纯图像。 - Justinas
@Justinas,感谢您的帮助! - Dubb
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接