Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在php应用程序中显示web根目录之外的图像?_Php_Linux_Apache - Fatal编程技术网

如何在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

我有一个使用apache服务器linux的PHP web应用程序。出于某种安全原因,我将文档和图像保存在web根目录之外。当用户登录时,我如何显示这些图像。

默认情况下,PHP已经可以访问web根目录以外的文件,除非受到
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来显示这些图像呢?