2010-07-05 13 views
11

क्या PHP में कोई मानक फ़ंक्शन संबंधित फ़ाइल पथ से केवल एक छवि का विस्तार खोजने के लिए है?PHP में पथ से किसी छवि का विस्तार कैसे ढूंढें?

उदाहरण के लिए एफएफ मेरा छवि पथ '/testdir/dir2/image.gif' जैसा है तो फ़ंक्शन को 'gif' वापस करना चाहिए।

धन्यवाद

उत्तर

41
$ext = pathinfo('/testdir/dir2/image.gif', PATHINFO_EXTENSION); //$ext will be gif 

अद्यतन: मैं downvotes का एक बहुत देखते हैं। मेरे दृष्टिकोण में क्या समस्या है? कृपया मुझे बताओ।

+0

यह भी रास्ता है। – RobertPitt

+1

मेरे पास 'hello.jpg' है लेकिन मैंने इसका नाम बदलकर' hello.gif 'कर दिया है और इसे अपलोड कर दिया है ताकि आपको एक्सटेंशन मिल सके लेकिन सही प्रकार न हो। पेक्का का अपमान आईएमओ बेहतर है – DrColossos

+2

मूल प्रश्न केवल एक्सटेंशन को खोजने के लिए पूछता है। कोई सुरक्षा-जांच या अन्य जरूरत नहीं है। – fabrik

-2

बेसिक स्ट्रिंग फ़ंक्शंस, strrpos() और substr() आपके लिए ऐसा कर सकते हैं। साथ ही कई अन्य फैंसी तरीके।

+0

यह एक प्रश्न का सीधा जवाब है जहां ओपी शायद जो चाहता है वह पूरी तरह से फ़ाइल प्रकार की जांच है और विस्तार के लिए केवल एक नहीं है। आपके तर्क से, यह एक -1 के लायक होगा। बस कहें '; –

+0

@ पेक्का "केवल एक छवि का विस्तार ढूंढने के लिए"। मुझे – Robus

+1

@Robus हाँ के बजाय अस्पष्ट लगता है। मैं सिर्फ @Col चिढ़ा रहा हूं क्योंकि उसने मुझे स्पष्ट अनुरोधों के सीधे जवाब के लिए नीचे गिरा दिया है जब स्पष्ट अनुरोध वास्तव में नहीं था, ओपी वास्तव में सबसे अच्छा समाधान प्राप्त करने के लिए क्या आवश्यक था। उनकी प्रतिक्रिया हमेशा उचित थी (मैं @ कर्नल के ज्ञान और इनपुट को बहुत महत्व देता हूं, PHP टैग को इसकी आवश्यकता होती है) लेकिन वह हमेशा इसके बारे में बहुत सी प्रत्यक्ष है इसलिए मैं एक ही गलती करता हूं जब मैं बदले में डिक हूं :) यह इंगित करना चाहते हैं कि इस उत्तर को प्राप्त करने के लिए मेरे द्वारा प्राप्त नहीं किया गया है, हालांकि। –

1

कर्नल श्रापनेल के रूप में उल्लेख किया गया; वहाँ काफी कुछ तरीके

$path = '/some/where/img.gif'; 
$path = explode('.',$path); 
$path = end($path); 
+0

धन्यवाद, यह कोड अच्छा दिख रहा है, लेकिन जैसा कि मैंने उपरोक्त कहा है, मैं सिर्फ 'pathinfo' जैसे प्रत्यक्ष मानक फ़ंक्शन का उपयोग करना चाहता हूं। – Siva

14

यह आमतौर पर (नहीं विस्तार के द्वारा, लेकिन इसकी सामग्री द्वारा) वास्तविक छवि प्रकार का पता लगाने के लिए अधिक वांछनीय है। इसके लिए, getimagesize() का उपयोग करें।

+1

यह सही उत्तर होना चाहिए। नाम में विस्तार कुछ भी हो सकता है। – Nishanthan

0

मैं आपको किसी भी अपलोड/लिंक की गई छवियों को किसी जीडी/छवि मैजिक चेक के माध्यम से चलाने और छवियों के भीतर छिपे किसी भी दुर्भावनापूर्ण कोड को रोकने के लिए इसे फिर से सहेजने की सलाह दूंगा। इससे आपको चीजों को आसान बनाने के लिए एक ही एक्सटेंशन के साथ सभी छवियों को सहेजने की अनुमति मिल जाएगी।

http://www.php.net/imagepng
http://www.php.net/imagegif

+0

यह एक अच्छा सुझाव है, भले ही यह प्रश्न से संबंधित न हो। एक डाउनवोट के लायक नहीं है। हालांकि, जेपीजी को जीआईएफ में परिवर्तित करने और इसके विपरीत, कभी भी अच्छे नतीजे नहीं ले पाएंगे। –

+1

धन्यवाद। मुझे पता है कि यह पूरी तरह से इस सवाल से संबंधित नहीं है, हालांकि मुझे लगा कि अपलोड की गई छवियों को स्वीकार करना है या नहीं, इससे पहले कि कुछ बुरा होता है, इस जानकारी को थूकना बेहतर होगा। आप पहले एक्सटेंशन की जांच भी कर सकते हैं, देखें कि दिए गए परिणाम स्वीकृत एक्सटेंशन की सरणी में मौजूद हैं या नहीं, और फिर इसे GD/ImageMagick चेक के माध्यम से चलाने के बाद सटीक उसी एक्सटेंशन के रूप में सहेजें। परिणाम न मिलने पर भी एक डिफ़ॉल्ट (पीएनजी कहें) रखें। – eklundchristopher

+0

धन्यवाद, यह एक अच्छा सुझाव है। – Siva

5

मैं पहली बार इस सवाल का जवाब और लंगर पूर्व के साथ यूआरएल के साथ समस्या थी। google.com/image.jpg#anchor

बेहतर समाधान

$filename_from_url = parse_url($url); 
$ext = pathinfo($filename_from_url['path'], PATHINFO_EXTENSION); 
0

मैं तुम्हें सही रास्ते

$file_path = '/some/where/img.gif'; 
$info = new SplFileInfo($file_path); 
$file_extension = $info->getExtension(); 
var_dump($file_extension); 

अधिक विस्तार यहाँ The SplFileInfo class

मुझे आशा है कि यह आप में मदद मिलेगी के लिए सिफारिश करेंगे ।

चीयर्स!

मुदस्सर अली

1

मुझे लगता है कि सबसे सही तरीका गूंज exif_imagetype समारोह उपयोग कर रहा है:

exif_imagetype("/testdir/dir2/image.gif"); 

    function get_image_type($image_path){ 

     $extension = array(IMAGETYPE_GIF => "gif", 
     IMAGETYPE_JPEG => "jpeg", 
     IMAGETYPE_PNG => "png", 
     IMAGETYPE_SWF => "swf", 
     IMAGETYPE_PSD => "psd", 
     IMAGETYPE_BMP => "bmp", 
     IMAGETYPE_TIFF_II => "tiff", 
     IMAGETYPE_TIFF_MM => "tiff", 
     IMAGETYPE_JPC => "jpc", 
     IMAGETYPE_JP2 => "jp2", 
     IMAGETYPE_JPX => "jpx", 
     IMAGETYPE_JB2 => "jb2", 
     IMAGETYPE_SWC => "swc", 
     IMAGETYPE_IFF => "iff", 
     IMAGETYPE_WBMP => "wbmp", 
     IMAGETYPE_XBM => "xbm", 
     IMAGETYPE_ICO => "ico"); 

     return $extension[exif_imagetype($image_path)]; 
} 
+0

इस तरह से काम करता है भले ही यूआरएल सर्वर पर छवि को एन्कोड करने के लिए प्रयोग किया जाता है - ठीक है। – pgee70

0

मुझे लगता है कि आसान तरीका Another Question के लिए strrpos() और substr() तरीकों

$path = "/testdir/dir2/image.gif"; 
$ext = substr($path, strrpos($path, '.')+1); 
echo $ext; // output will be gif 

अधिक जवाब का उपयोग कर इस प्रश्न से संबंधित

संबंधित मुद्दे