使用不在www文件夹

时间:2015-10-05 07:36:42

标签: php html image raspberry-pi

我有一个无线接入点,在Raspberry Pi上,使用Apache和PHP。

Raspberry Pi应该使用PHP来显示位于USB驱动器上的图像(已安装驱动器)。

我尝试过从HTML直接使用该文件。例如:

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

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

我也尝试使用/ var / www文件夹中的符号链接到/ mnt / data文件夹,但这也没有用。

甚至可以使用PHP显示来自/ mnt / data的图像,如果是,它是如何完成的?

由于

2 个答案:

答案 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的字符串内容,监控访问的目录并加强每个安全漏洞。