-
-
Save ivanrosolen/7797439 to your computer and use it in GitHub Desktop.
/var/www/public/upload/image.jpeg | |
imagem.01.png | |
/ivan.pdf | |
/var/www/public/upload/imaginação.JPG | |
/var/www/nome bem legal.png | |
ilári iê.gif | |
/opa_ivan.01_03.jpeg | |
swp.ivan.01.12.2013.php | |
/var/www/_windows Like.gif | |
yudi.jPeG | |
Não vale usar o pathinfo($filename, PATHINFO_FILENAME ); porque, teoricamente, é o jeito correto. | |
Pegando nome de arquivos ocultos também.
https://gist.github.com/fibbarth/7799095
$cases = array(
'/var/www/public/upload/image.jpeg',
'imagem.01.png',
'/ivan.pdf',
'/var/www/public/upload/imaginação.JPG',
'/var/www/nome bem legal.png',
'ilári iê.gif',
'/opa_ivan.01_03.jpeg',
'swp.ivan.01.12.2013.php',
'/var/www/_windows Like.gif',
'yudi.jPeG',
'.htaccess',
'/var/www/.htpasswd',
'/~teste.php' );
foreach( $cases as $case ){
echo 'PATHINFO:'.pathinfo($case, PATHINFO_FILENAME )."
";
echo 'getFileName:'.getFileName( $case )."
";
}
function getFileName( $string ){
$filename = trim(array_pop(explode(DIRECTORY_SEPARATOR, $string)),'.');
if( strpos($filename,'.') === false ){
return $filename;
}
return substr($filename,0,strrpos($filename,'.'));
}
$arr = [
'/var/www/public/upload/image.jpeg',
'imagem.01.png',
'/ivan.pdf',
'/var/www/public/upload/imaginação.JPG',
'/var/www/nome bem legal.png',
'ilári iê.gif',
'/opa_ivan.01_03.jpeg',
'swp.ivan.01.12.2013.php',
'/var/www/_windows Like.gif',
'yudi.jPeG'
];
foreach ($arr as $f) {
preg_match('(([^\/]+)\.\w+$)', $f, $s); echo $s[1].'<br/>'; // hahaha
}
Galera esqueceu do basename
:
<?php
function getName($path)
{
return preg_replace('/\.[^.]*$/', '', basename($path));
}
Se preferir considerar .htaccess
e .htpasswd
como nomes de arquivos, ao invés de extensões, pode usar esta:
<?php
function getName($path)
{
return preg_replace('/^([^.].*)\.[^.]*$/', '${1}', basename($path));
}
E se quiser parametrizar:
<?php
function getName($path, $show_dotted_no_ext = false)
{
$regex = ($show_dotted_no_ext?'/^([^.].*)\.[^.]*$/':'/()\.[^.]*$/');
return preg_replace($regex, '${1}', basename($path));
}
E uma alternativa sem regex, usando somente o basename
com o parâmetro suffix:
<?php
function getName($path)
{
$parts = explode('.', $path);
return basename($path, '.' . array_pop($parts));
}
Ricardo, não é que galera esqueceu do basename, é que a questão proposta pelo Ivan seria "criar uma jeito", ao invés de ir para os meios mais tradicionais, por isso talvez o pessoal está seguinte para uma forma, vamos dizer assim, "mais alternativa" de resolver.
Bom, se é esta a proposta, segue uma só com regex, então:
<?php
function getName($path)
{
return preg_replace('/^.*\/(.*)\..*$/', '${1}', "/${path}");
}
Pensa fora da caixa povo
<?php
foreach ($arr as $filename) {
$ivan = end(explode('/',$filename));
echo strstr($ivan, strrchr($ivan,'.'), true).'<br />';
}
serve
function getName($string) {
return array_pop(explode("/", implode(".", explode("." , $string, -1))));
}
?