如何在我的php应用程序中显示web根目录之外的图像?

时间:2013-11-14 13:54:49

标签: php linux apache

我使用apache server,linux在PHP中使用Web应用程序。出于某些安全原因,我将文档和图像保留在Web根目录之外。当用户登录时,如何显示这些图像。

4 个答案:

答案 0 :(得分:9)

默认情况下,PHP可以访问Web根目录以外的文件,除非受open_basedir指令限制(或安全模式,但希望您不在该网箱中)。

在VirtualHost配置中插入open_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而不验证/清理输入),额外的缓存等等。

但这可以让您了解如何定位问题。

答案 1 :(得分:3)

就这么简单,这将输出具有正确标题的图像,
请记住,在将任何内容从输出缓冲区中清除之前,必须设置header()
=&GT;

之前没有回音或打印
$file = '../../somedirectory/image.jpg‘;
header('Content-Type:image/jpeg‘);
header('Content-Length: '.filesize($file));
echo file_get_contents($file);

答案 2 :(得分:2)

对于我的应用程序,这些答案均无效-我只是无法显示图像,并且由于某种原因,添加新的php文件对我来说真的不可行。 DID对我有用的是

$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'>";
}

答案 3 :(得分:0)

在readfile()

之前使用php的ob_clean()函数

它可以避免类似问题的空间