2012-07-09 82 views
1

我正在編寫腳本以從站點獲取圖像。所有這些都是好的,但後來我發現有一些網站已經在格式的圖片是這樣的:獲取具有純擴展名的文件名

http://site-name/images/dude-i-m-batman.jpg?1414151413 
http://site-name/images/dude-i-m-batman.jpg?w=300 

現在我和它打交道做

$file = substr($media,0, strrpos($image, '.') + 4); 

我只是想知道是否這是一個很好的做法,或者有更好的方法。

我試過pathinfo和其他一些方法,但所有返回擴展與查詢字符串。

謝謝

回答

2

我不確定是否意味着你想要的訊號分配延長sion或(從您當前的代碼判斷)完整路徑(減去任何查詢字符串)。

這裏有兩個:

$file = "http://site-name/images/dude-i-m-batman.jpg?1414151413"; 
preg_match('/^([^\?]+)(?:\?.*)?/', $file, $path_noQS); 
preg_match('/(?<=\.)(\w{2,5})(?:\?.*)?/', $file, $extension); 
echo $path_noQS[1]; //path, without QS 
echo $extension[1]; //extension 
+0

謝謝!這是最正確的一個。我希望沒有QS的路徑,而不僅僅是擴展。 – Henson 2012-07-09 17:06:22

0

您的解決方案只能使用3個字符的擴展名。如果你知道所有的擴展名將是3個字符比你的是完全可行的解決方案。否則:

$ext = pathinfo($filename, PATHINFO_EXTENSION); 

,如果你有正確的文件名,無疑可以工作

如果由於某種原因不能正常工作,您可以使用此:

$ext = end(explode('.', $filename)); 
$ext = substr(strrchr($filename, '.'), 1); 
$ext = substr($filename, strrpos($filename, '.') + 1); 
$ext = preg_replace('/^.*\.([^.]+)$/D', '$1', $filename); 
$exts = split("[/\\.]", $filename); 
$n = count($exts)-1; 
$ext = $exts[$n]; 
8

解析與URL parse_url,檢索路徑部分:

$datum = parse_url($url); 

$parts = pathinfo($datum['path']); 

$ext = $parts['extension']; 

您也可以使用getImageInfo($full_url),如果fopen_wrappers允許,並檢索圖像信息,如寬度,高度,最重要的是,mime_type。

這是因爲你會發現幾個沒有擴展名或錯誤的文件,放在那裏欺騙瀏覽器下載圖像,並相信瀏覽器將識別圖像格式(儘管如此,完成:-()

0

可能是這樣的

$parsedUrl = parse_url('http://site-name/images/dude-i-m-batman.jpg?1414151413'); 
$parsedFileInfo = pathinfo($parsedUrl['path']); 
echo $parsedFileInfo['extension'];    
0

http://codepad.org/KXZwKCjs

$u = 'http://site-name/images/dude-i-m-batman.zip.jpg?1414151413?1234'; 
$u = explode('?', $u, 2); // ignore everything after the first question mark 
$ext = end(explode('.',$u[0])); // last 'extension' 
2

很明顯,你現在做什麼有一些缺點。其中一個你已經注意到你自己的:

  • 並非所有的URL都以文件擴展名結尾。
  • 並非所有文件擴展名都是三個字母(例如,.jpeg

所以,你想要的是從URL獲取路徑:

然後你想從該路徑的延伸:

$imageName = pathinfo($imagePath, PATHINFO_EXTENSION); 

而完成的。你不是第一個需要這個職位的人,所以這項工作已經存在。