2015-10-05 28 views
0

我有一个无线接入点,即在Raspberry Pi上,带有Apache和PHP。使用不在www文件夹中的PHP5显示图片

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

我试过使用直接路由到文件,从HTML。例如:

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

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

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

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

谢谢

+0

看这里:http://superuser.com/questions/244245/how-do-i-get-apache-to-follow-symlinks – h0ch5tr4355

+0

我会尽力谢谢! – depecheSoul

+0

权限怎么样?是apache用户可读的图像吗? – jossif

回答

3

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

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

例如,使用这个为你的图片标签,让你开始。

<img src="myimage.php"> 

然后在myimage.php脚本中。未在主机别名

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

这是一个很好的方法来做到这一点。也可以通过“Content-Disposition”标题保留原始文件名。 – James

+0

你好,我试过你的解决方案,它不适用于我的情况。感谢帮助 – depecheSoul

1

文件位置绝不会通过客户端脚本(HTML/CSS/JavaScript的),因为他们从来没有“服务”的服务器设。客户端只能访问服务器所在文件夹(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的字符串内容,监控访问的目录并收紧每个安全漏洞。

相关问题