我使用apache服务器,linux在PHP中使用Web应用程序.出于某些安全原因,我将文档和图像保留在Web根目录之外.当用户登录时,如何显示这些图像.
Leg*_*nar 10
默认情况下,PHP可以访问Web根目录之外的文件,除非受到open_basedir指令限制(或安全模式,但希望您不在该框架中).
在VirtualHost配置中插入open_basedir限制通常是一种很好的做法.您可以指定:在Linux和;Windows 上分隔的多个目录.
php_admin_value open_basedir /var/www/s/stage:/usr/share/php:/your/dir
Run Code Online (Sandbox Code Playgroud)
要访问这些文件,请使用绝对路径或相对于所调用的PHP文件位置的路径.(所以你必须../达到上面的水平).
还要确保将要写入的目录分配给Web服务器用户并具有写入权限.
否则你有第二个选择:
在www目录中,创建一个"image.php"文件,其内容类似于:
<?php
header('Content-Type: image/png');
readfile("../img/" . $_GET['img']);
?>
Run Code Online (Sandbox Code Playgroud)
并用你的图像调用
<img src="image.php?img=myimage.png" />
Run Code Online (Sandbox Code Playgroud)
请注意,您的PHP文件不应该那么简单:)因为您可能想要处理多种图像格式(并为它们提供正确的标题),检查恶意文件路径/包含(您不想使用$ _GET没有验证/消毒输入),额外的缓存等等.
但是,这应该可以让您了解如何定位问题.
对于我的应用程序,这些答案都不起作用 - 我根本无法显示图像,而且由于原因,我添加一个新的 php 文件进行调用实际上并不可行。对我有用的是什么
$filename = read_filename_from_database;
$fileDir = "/path/to/files/";
$file = $fileDir . $filename;
if (file_exists($file))
{
$b64image = base64_encode(file_get_contents($file));
echo "<img src = 'data:image/png;base64,$b64image'>";
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9385 次 |
| 最近记录: |