我有一个无线接入点,在Raspberry Pi上,使用Apache和PHP。
Raspberry Pi应该使用PHP来显示位于USB驱动器上的图像(已安装驱动器)。
我尝试过从HTML直接使用该文件。例如:
<img src="/mnt/data/1.jpg">
但是图像总是显示为断开的链接。
我也尝试使用/ var / www文件夹中的符号链接到/ mnt / data文件夹,但这也没有用。
甚至可以使用PHP显示来自/ mnt / data的图像,如果是,它是如何完成的?
由于
答案 0 :(得分:3)
您无法在网络目录外显示图像,这是不允许的。否则,黑客可能会从Web服务器加载系统文件,这是非常危险的。
您要做的是告诉PHP去查找图像并返回Web目录之外的文件的数据。
例如,使用此图片标记来启动。
<img src="myimage.php">
然后在myimage.php脚本中。
header('Content-type: image/jpeg');
echo imagejpeg("/mnt/data/1.jpg");
die;
答案 1 :(得分:1)
客户端脚本(html / css / javascript)永远不会找到主机中没有别名的文件位置,因为它们永远不会被提供&#34;&#34;由您的服务器。客户端只能访问服务器所服务的文件夹中的文件(www目录和任何其他别名目录)。但是,SERVER SIDE SCRIPT可以访问主机中的文件。这就是为什么像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的字符串内容,监控访问的目录并加强每个安全漏洞。