2012-04-07 13 views
3

Ich habe versucht, Web-Image zu lokal zu speichern, ich benutze Code hier, um einen Richter zu machen, wenn der Name der Bilddatei nicht .jpg, .jpeg, .png oder .gif ist, füge sie hinzu. Ich benutze stripos, aber ich treffe einige Probleme, wenn eine Bild-URL wie folgt. So, wie zu lösen? Vielen Dank.php überprüfen, ob der Name einer Bilddatei nicht .jpg, .jpeg, .png oder .gif ist.

$webimage = 'http://pcdn.500px.net/5953805/d0dd841969187f47e8ad9157713949b4b95b3bda/4.jpg?1333782904356'; 
$pieces = explode("/", $webimage); 
$pathend = end($pieces); 
$imageinfo = @getimagesize($webimage); 
$imagetype= $imageinfo['mime']; 
if($imagetype=='image/jpeg'){ 
    if(stripos($pathend,'.jpg')==0){ 
     $newpathend = $pathend.'.jpg'; // if image end is't '.jpg', add '.jpg' 
    }else if(stripos($pathend,'.jpeg')==0){ 
     $newpathend = $pathend.'.jpeg'; // if image end is't '.jpg', add '.jpeg' 
    }else{ 
     $newpathend = $pathend;// if image end is '.jpg' or '.jpeg', do not change 
    } 
} 
if($imagetype=='image/png'){ 
    if(stripos($pathend,'.png')==0){ 
     $newpathend = $pathend.'.png'; // if image end is't '.png', add '.png' 
    }else{ 
     $newpathend = $pathend;// if image end is '.png', do not change 
    } 
} 
if($imagetype=='image/gif'){ 
    if(stripos($pathend,'.gif')==0){ 
     $newpathend = $pathend.'.gif'; // if image end is't '.gif', add '.gif' 
    }else{ 
     $newpathend = $pathend;// if image end is '.gif', do not change 
    } 
} 
+1

nur weil ein Dateiname in .jpg endet es nicht eine JPEG-Datei, besser den Mime-Typen zu überprüfen. –

Antwort

5

können Sie mögen dieses preg_match

$type=Array(1 => 'jpg', 2 => 'jpeg', 3 => 'png', 4 => 'gif'); //store all the image extension types in array 

$imgname = ""; //get image name here 
$ext = explode(".",$imgname); //explode and find value after dot 

if(!(in_array($ext[1],$type))) //check image extension not in the array $type 
{ 
    //your code here 
} 
+1

Dies ist ein guter Weg, vielleicht sollte "JPG, JPEG, PNG, GIF" im Array hinzufügen –

+5

Dies wird nicht funktionieren für "foo.bar.png". –

+1

Sie müssen den Dateinamen ohne Punkte ändern. Andernfalls finde die Länge des Arrays $ len = (sizeof ($ ext)) und ersetze $ ext [1] mit $ ext [$ len-1] – nithi

1

Diese Funktion pathinfo kann Ihnen helfen.

+0

Behandelt pathinfo richtig get Variablen wie im ursprünglichen Beispiel? – kingjeffrey

5

Warum nicht versuchen?

if(preg_match('/\.(jpg|jpeg|png|gif)(?:[\?\#].*)?$/i', $webimage, $matches)) { 
    // matching file extensions are in $matches[1] 
} 
0

Verwenden strops

if (strpos($your_text,'.png') !== false) { 
     //do something 
} else if (strpos($your_text,'.jpg') !== false) { 
     //do something 
} else if (strpos($your_text,'.gif') !== false) { 
     //do something 
} 

Hoffe, es hilft!)

-1
$Extension=strrev(substr(strrev($fileName),0,strpos(strrev($fileName),'.'))); 
if(preg_match('/png|jpg|jpeg|gif/',$Extension)) 
{ 
    true 
} 
else 
{ 
    false 
} 
1

Dies funktioniert sowohl für jpg sowie jpeg und mit Großbuchstaben. Es funktioniert auch mit Dateinamen wie testing.the.bicycle.jpg

einen Versuch geben https://regex101.com/r/gI8uS1/1

public function is_file_image($filename) 
{ 
    $regex = '/\.(jpe?g|bmp|png|JPE?G|BMP|PNG)(?:[\?\#].*)?$/'; 

    return preg_match($regex, $filename); 
} 
+0

Hallo, Was ist '(?: [\? \ #]. *)?' für? Ich bin ein Neuling für Regex. Nach einigem Googeln wurde mir klar, dass es sich um eine nicht einfangende Gruppe handelt. Aber ich habe es nicht verstanden. Kannst du mir bitte sagen? – tpk

Verwandte Themen