Om een bestandsextentie te achterhalen van een geuploade afbeelding gebruik ik een explode functie. Wanneer er echter een bestand met .png.exe wordt geupload werkt deze gewoon aangezien de explode werkt vanaf de eerste . Hoe kan ik de explode laten werken vanaf de laatste . waardoor ik de échte bestandsextentie weet.

Bedankt!
<?php

$pizza = "piece1 piece2 piece3 piece4 piece5 piece6";
$pieces = explode(" ", $pizza);

$aantal = count($pieces);

//achterstevoren
for($i = $aantal -1 ; $i >= 0 ; $i--)
echo $pieces[$i].' ';

//laatste
echo $pieces[$aantal-1];
Ik zou het dan zo doen:
<?php
/**
* Explodes only the last occurence.
*
* @param string $delimiter The delimiter
* @param string $string The string
*
* @return array
*/
function explode_last($delimiter, $string)
{
$array = explode($delimiter, $string);
$last = array_splice($array, -1);

return array(implode($delimiter, $array), $last);
}
?>
Oftewel:

<?php
$string = "piece1 piece2 piece3 piece4 piece5 piece6";
$laatste end(explode(" ", $string);
echo $laatste;
?>

Of direct:
<?php
echo end(explode(" ", "piece1 piece2 piece3 piece4 piece5 piece6");
?>

Scheelt je weer een hoop raar gedoe...
<?php
var_dump( end( explode( '.', $string ) );
?>
Frank, wat een rare "oplossing" geef jij???

<?php
$file = 'gevaarlijkbestand.gif.png.doc.exe';

$extension = explode('.', $file);
$extension = end($file);

echo $extension;

?>

Het resultaat op je beeldscherm is:

exe

[size=xsmall]Toevoeging op 05/02/2013 16:41:56:[/size]

Even als toevoeging...

Dat een bestand eindigt op (bijvoorbeeld) png, wil niet zeggen dat het ook daadwerkelijk een png bestand is!
Je doet er goed aan om ook de de mime-type van het bestand te controleren:
Om het lijstje compleet te maken:
<?php
function explode_last($delimiter, $string)
{
preg_match('/(.*)'.preg_quote($delimiter).'(.*?)$/', $string, $matches);
array_shift($matches);

return $matches;
}
?>
<?php
function explode_last($delimiter, $string)
{
$pos = strrpos($string, $delimiter);

return array(substr($string, 0, $pos), substr($string, $pos + 1));
}
?>

Of iets heel anders, wat waarschijnlijk beter is:
<?php
$file = 'show.html.twig';

echo pathinfo($file, PATHINFO_EXTENSION); // twig
?>
hallo allemaal,

ja met end gaat het natuurlijk nog makkelijker. Ik ben die luxe niet gewend vanuit de oudere taal C
Frank Nietbelangrijk op 05/02/2013 16:50:40

...Ik ben die luxe niet gewend vanuit de oudere taal C


Ik heb daar ook iets aan overgehouden.
Ik begin nogal vlug custom functies te schrijven (vaak met loops) ... om dan later te merken dat die functie al standaard bestaat.

Nu; merk toch op dat veel van die standaard functies intern ook loops gebruiken en naar mekaar wijzen.
Ik ga er wel van uit dat die standaard functies goed geschreven zijn; meer bugs opvangen waar ik niet aan gedacht heb ...

Maar of je beschaamd moet zijn omdat je een functie zelf schrijft; het lijkt me van niet.

Wat extensies betreft: gebruik inderdaad pathinfo

Reageren