2012-06-10 53 views
0

我想確定如果image.php是有效的圖片文件。它可能是也可能不是因爲如果DB有關於調整大小的圖片的信息它將會是有效的 - image.php將調整原始圖片的大小並將其打印到屏幕上。還有另一種選擇 - 數據庫中沒有文件名信息,它可能導致錯誤消息或錯誤圖片。我想獲得圖像的尺寸,如果它是寬度= 0和高度= 0,然後打印錯誤消息。我試圖用和getimagesize做到這一點,但它會產生錯誤:php getimagesize動態創建的圖片

[function.getimagesize]:未能打開流:在...

路徑中沒有這樣的文件或目錄是100%正確的。我讀過,它是不可能通過PHP getimagesize動態製作的圖片。我總是可以檢查我的數據庫,但我很好奇是否有任何黑客獲取通過php動態創建的圖像大小。

代碼:

$file = "image.php?img=1"; 
$a = getimagesize($file); 
echo 'aaaaaaaaa' . $a; 

編輯:

我這樣做是另一種方式,因爲沒有解決方案的工作對我來說 - 我只是檢查是否有正確的文件名所有腦幹數據庫。

感謝您的幫助。

+1

不'getimagesize()'返回一個數組?如果是這樣,'echo'對你沒有任何好處。 – 2012-06-10 18:40:17

回答

1

您需要的file_get_contents因爲image.php?img=1是不是你的系統

$cont = file_get_contents($file); 
$r = imagecreatefromstring($cont); 
imagesx($r); 
imagerx($r); 

當然,在一個真正的文件,你需要完整的URL:http://etc

+2

寫的相同,但你先完成。請注意,爲了做出正確的http請求,請使用'$ file ='http://127.0.0.1/image.php?img=1';'或任何必要的URL來發出請求。 –

+0

你將無法獲得'image.php?img = 1',也不會理解你在那裏做什麼。交換到完整路徑或只是在腳本中定義'__GET ['img']'然後'file_get_contents('image.php');' – judda

+0

我最喜歡你的建議,但我得到imagecreatefromstring()[function.imagecreatefromstring]:數據在398行的add_picture.php中沒有被識別的格式。th行是$ r = imagecreatefromstring($ cont)。路徑沒問題,圖片沒問題,打印在下面2行。不知道爲什麼有一個錯誤:( – Kalreg

4

你必須使用一個全面的絕對URL爲PHP意識到你正在請求一個url。 image.php?img=1僅僅是一個本地文件系統只要求

$file = 'http://example.com/image.php?img=1'; // full-blown HTTP request 
$file = 'image.php'; // local-only request 

但這是有點低效,因爲你正在做一個全面的HTTP來回請求。如果該URL受密碼/會話保護,則必須先「登錄」,等等......

如果該圖像來自本地數據庫,則應該重新創建提取邏輯或使其可用函數調用,以便它不執行HTTP請求,並且只需在腳本內部「內部」工作,然後將數據傳遞給GD的imagecreatefromstring(),它將接受任何已知的圖像類型,然後使用imagesx()imagesy()函數獲取高度/寬度。