2013-10-18 106 views
0

我正在處理這個簡單的腳本,它根據數據庫值查找圖像url,然後回顯以顯示圖像,或者如果沒有圖像可用默認圖像。PHP getimagesize腳本問題

但是,由於每次都返回默認圖像,因此出現了問題。如果我用$ image行替換默認的回顯行,它會顯示。所以從這我知道它可以找到圖像的網址。

<?php 
$image = CONST_IMG_URL.$FetchData['capcode'].".jpg";    
error_reporting(0); 

if (getimagesize($image)) { 
echo "<a href='$image'><img src=\"$image\" width='300' height='150'/></a>"; 
} 

else { 
echo "<img src='".plugins_url()."/plugins/images/image_not_found.jpg'  width='300' height='150'/>";} 
?> 
+0

你能給的例子是什麼圖片網址看起來像?圖像名稱中是否有空格?如果是這樣,你需要正確編碼(image%20name.jpg) – Delpes

+2

爲什麼你使用'getimagesize'來確定你是否應該顯示圖像? - 'file_exists'可能是你想要的 –

回答

0

你應該使用下面的代碼:

try { 
    $img = @getimagesize($image); 
    echo "<a href='$image'><img src=\"$image\" width='300' height='150'/></a>"; 
} catch(Exception $e) { 
    echo "<img src='".plugins_url()."/plugins/images/image_not_found.jpg'  width='300' height='150'/>"; 
} 
0

這樣的猜測,你CONST_IMG_URL是這是相對於網站的路徑 - 而不是文件系統。

getimagesize()方法使用相對或絕對路徑名(即/var/www/images/uploaded/pic.jpgimages/uploaded/pic.jpg)在文件系統本身上找到圖像。它還可以通過URL(例如http://example.com/images/uploaded/pic.jpg)查找圖像。

如果CONST_IMG_URL是一個沒有域部分的路徑,getimagesize()將查看該映像的文件系統,並且很有可能它不存在。例如,如果CONST_IMG_URL/images/uploaded/,則該方法將在服務器上檢查該絕對路徑 - 由於它將領先的/視爲「服務器的根」,而不是「在您的網站文件夾內」,因此該方法將不存在。

要解決這個問題,您可以採取兩種方法(如果您想繼續使用getimagesize())。

  1. 首先是化妝CONST_IMG_URL包括您的域名的絕對路徑:

    define('CONST_IMG_URL', 'http://domain.com/images/uploaded'); 
    
  2. 第二個是將整個文檔根追加到路徑,當你調用和getimagesize( ):

    if (getimagesize($_SERVER['DOCUMENT_ROOT'] . '/' . $image)) { 
    

如果你打算去與上面的#2,我真的建議使用不同的方法,而不是使用file_exists()。這個函數將簡單地檢查文件是否存在與加載文件以將參數信息拉出(寬度,高度等)並使頁面加載稍微更高效=]相反。

0

您應該改用file_exists功能和getimagesize的:

<?php 
$image = CONST_IMG_URL.$FetchData['capcode'].".jpg";    
error_reporting(0); 

if (file_exists($image)) { 
    echo "<a href='$image'><img src=\"$image\" width='300' height='150'/></a>"; 
} 
else { 
    echo "<img src='".plugins_url()."/plugins/images/image_not_found.jpg'  width='300' height='150'/>";} 
?> 
1

在你的榜樣,getimagesize沒有做任何事情的生產..我會建議使用file_exists ..

爲了有file_exists工作正確 - 你需要提供完整的路徑(不是URI)。

所以,你可以這樣做:$_SERVER['DOCUMENT_ROOT'] . '/path/to/images/' . $image;

像這樣:

if(file_exists('/full/path/to/image/dir/' . $image)) 
{ 
    echo "<a href='$image'><img src=\"$image\" width='300' height='150'/></a>"; 
} else { 
    echo "<img src='".plugins_url()."/plugins/images/image_not_found.jpg' width='300' height='150'/>"; 
} 

說明

getimagesize - 這將返回與圖像,而不是明確地返回屬性的array如果圖像存在或不存在,實際上,如果圖像不存在,則會發出警告而不是返回false像你期望的那樣。

file_exists - 這種檢查的文件,如果存在的話返回true,並false如果文件不存在 - 這是你在尋找什麼在您的方案