如何在php应用程序中显示web根目录之外的图像?
我有一个使用apache服务器linux的PHP web应用程序。出于某种安全原因,我将文档和图像保存在web根目录之外。当用户登录时,我如何显示这些图像。默认情况下,PHP已经可以访问web根目录以外的文件,除非受到如何在php应用程序中显示web根目录之外的图像?,php,linux,apache,Php,Linux,Apache,我有一个使用apache服务器linux的PHP web应用程序。出于某种安全原因,我将文档和图像保存在web根目录之外。当用户登录时,我如何显示这些图像。默认情况下,PHP已经可以访问web根目录以外的文件,除非受到open\u basedir指令的限制(或安全模式,但希望您不在该框架内) 在VirtualHost配置中插入open\u basedir限制通常是一种好的做法。在Linux和上,您可以指定多个由:分隔的目录在windows上 php_admin_value open_basedi
open\u basedir
指令的限制(或安全模式,但希望您不在该框架内)
在VirtualHost配置中插入open\u basedir
限制通常是一种好的做法。在Linux和上,您可以指定多个由:
分隔的目录代码>在windows上
php_admin_value open_basedir /var/www/s/stage:/usr/share/php:/your/dir
要访问这些文件,可以使用绝对路径,也可以使用相对于名为的PHP文件位置的路径。(因此您必须。/
才能达到上述级别)
还要确保要写入的目录已分配给Web服务器用户,并且具有写入权限
否则您有第二个选择:
在您的www目录中,创建一个“image.php”文件,其内容类似于:
<?php
header('Content-Type: image/png');
readfile("../img/" . $_GET['img']);
?>
并将您的图像与
<img src="image.php?img=myimage.png" />
请注意,您的PHP文件不应该那么简单:)因为您可能希望处理多种图像格式(并为它们提供正确的头),检查恶意文件路径/包含(您不希望在不验证/清理输入的情况下使用$GET),额外缓存等
但是这会让您了解如何针对您的问题。就这么简单,这将输出具有正确标题的图像,
请记住,在从输出缓冲区中刷新任何内容之前,必须设置header()
=>之前没有回音或打印
$file = '../../somedirectory/image.jpg';
header('Content-Type:image/jpeg');
header('Content-Length: '.filesize($file));
echo file_get_contents($file);
在readfile()之前使用php的ob_clean()函数
这将有助于避免类似空格的问题对于我的应用程序,这些答案都不起作用-我根本无法显示图像,而且由于种种原因,添加一个新的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'>";
}
$filename=从数据库读取文件名;
$fileDir=“/path/to/files/”;
$file=$fileDir$文件名;
如果(文件_存在($file))
{
$b64image=base64_编码(文件获取内容($file));
回声“;
}
这是可能的,但答案不同。我使用了类似的方法来防止缓存图像$r=兰特(19999);打印“”;简单、干净、聪明的解决方案。谢谢但是如果我们使用JavaScript来显示这些图像呢?