显示图片使用PHP5不位于www文件夹


Display picture using PHP5 that is not located in www folder

我有一个无线接入点,在树莓派上,用Apache和PHP。

树莓派应该使用PHP显示位于USB驱动器(驱动器已挂载)上的图像。

我已经尝试使用直接路由到文件,从HTML。例子:

<img src="/mnt/data/1.jpg">

但是图片总是显示为断开的链接。

我也试过使用符号链接从/var/www文件夹到/mnt/data文件夹,但这也不起作用。

是否有可能使用PHP显示/mnt/data中的图像,如果是,如何做到?

谢谢

您不能在web目录外显示图像,这是不允许的。否则,黑客可以从web服务器加载系统文件,这是非常危险的。

你要做的是告诉PHP去查找图像并返回web目录外文件的数据。

<img src="myimage.php">

然后在myimage.php脚本中

header('Content-type: image/jpeg');
echo imagejpeg("/mnt/data/1.jpg");
die;

在主机中没有别名的文件位置将永远不会被客户端脚本(html/css/javascript)定位,因为它们永远不会被服务器"服务"。客户端只能访问服务器提供的文件夹(www目录和任何其他别名目录)内的文件。但是,SERVER端脚本确实可以访问主机中的文件。这就是为什么像php这样的服务器端脚本语言可以从主机内的任何地方输出图像。例如

header('Content-type: image/jpeg');
readfile("d:/1.jpg");
exit();

header('Content-type: image/jpeg');
// IF YOUR PHP FILE IS "D:/program files/wamp/www/index.php"
readfile("../../../1.jpg");
exit();

但是,您可以这样做:

<?Php
    if(strtoupper($_SERVER['REQUEST_METHOD']) == 'GET'
    && isset($_GET['image']) && isset($_GET['drive']))
    {    header('Content-type: image/jpeg');
         readfile("{$_GET['drive']}:{$_GET['image']}");
         // THIS WILL HAVE THE FOLLOWING VALUE ONCE CALLED:
         // readfile("d:/path/to/my/file/myfile.jpg");
         exit();
    }
    <html>
    <img src="{$_SERVER['PHP_SELF']}?drive=d&image=/path/to/my/file/myfile.jpg">
    or simply:
    <img src="?drive=d&image=/path/to/my/file/myfile.jpg">
    </html>
?>

不建议这样做,除非你知道你在做什么,因为这会暴露你的系统。

如果您打算这样做,请确保检查文件类型,控制$_GET的字符串内容,监视访问的目录并收紧每个安全漏洞。