2015-10-05 77 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的字符串內容,監控訪問的目錄並收緊每個安全漏洞。

相關問題