Skip to content

Instantly share code, notes, and snippets.

@ivanrosolen
Last active December 30, 2015 07:39
Show Gist options
  • Save ivanrosolen/7797439 to your computer and use it in GitHub Desktop.
Save ivanrosolen/7797439 to your computer and use it in GitHub Desktop.
Criar um jeito em php para retornar apenas o nome do arquivo (sem extensão nem diretórios)
/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.
@ramcoelho
Copy link

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));
}

@fibbarth
Copy link

fibbarth commented Dec 5, 2013

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.

@ramcoelho
Copy link

Bom, se é esta a proposta, segue uma só com regex, então:

<?php

function getName($path)
{
    return preg_replace('/^.*\/(.*)\..*$/', '${1}', "/${path}");
}

@ivanrosolen
Copy link
Author

Pensa fora da caixa povo

<?php

foreach ($arr as $filename) {

    $ivan = end(explode('/',$filename));

    echo strstr($ivan, strrchr($ivan,'.'), true).'<br />';

}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment