我有一个无线接入点,在树莓派上,用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的字符串内容,监视访问的目录并收紧每个安全漏洞。