Mam ten kod PHP:
function ShowFileExtension($filepath)
{
preg_match('/[^?]*/', $filepath, $matches);
$string = $matches[0];
$pattern = preg_split('/\./', $string, -1, PREG_SPLIT_OFFSET_CAPTURE);
if(count($pattern) > 1)
{
$filenamepart = $pattern[count($pattern)-1][0];
preg_match('/[^?]*/', $filenamepart, $matches);
return strtolower($matches[0]);
}
}
Jeśli mam plik o nazwie my.zip
, funkcja ta zwraca .zip
.
Chcę zrobić odwrotnie, chcę, aby funkcja powróciła my
bez rozszerzenia.
Plik jest tylko ciągiem w zmiennej.
Odpowiedzi:
Nie trzeba tego wszystkiego. Sprawdź pathinfo () , daje ci wszystkie składniki twojej ścieżki.
Przykład z instrukcji:
Wyjście kodu:
Alternatywnie możesz uzyskać tylko niektóre części, takie jak:
źródło
basename
. Bez błędnych nazw.Alternatywnie
pathinfo()
możesz użyćbasename()
- Zwraca nazwę pliku ścieżkiPrzykład z podręcznika PHP
Musisz jednak znać rozszerzenie, aby je usunąć wcześniej.
Ponieważ jednak twoje pytanie sugeruje, że potrzebujesz rozszerzenia i nazwy basename, głosowałbym na odpowiedź Pekki jako najbardziej przydatną, ponieważ dostarczy ci ona wszelkich informacji na temat ścieżki i pliku z jednym rodzimym funkcjonować.
źródło
basename
, alepathinfo
jak pokazano na stronie.https://php.net/manual/en/function.pathinfo.php
Prosty test funkcjonalny: https://ideone.com/POhIDC
źródło
basename
;-)PATHINFO_FILENAME
, niePATHINFO_EXTENSION
....filename
nie ma przedłużenia,basename
musi mieć pewne sadystyczne tendencje ...Innym podejściem jest użycie wyrażeń regularnych.
Spowoduje to usunięcie z ostatniego okresu
.
do końca ciągu.źródło
$fileName
które mogłyby spowodować uruchomienie silnika w wykładniczym (lub gorszym) czasie. Zakładając, że zakończyliśmy analizowanie wewnętrznych elementów tego konkretnego silnika regex i teoretycznie udowodniliśmy, że jest on odporny na każdą możliwą możliwą wartość$fileName
, kod nadal nie jest arbitralnie przenośny na inną platformę, która ma inną implementację silnika regex.Jeśli rozszerzenie nie jest znane, skorzystaj z tego rozwiązania
Pathinfo funkcji PHP MAN
źródło
pathinfo
. Pomoże to OP ulepszyćShowFileExtension
metodę i zapewni dodatkową lekturę każdemu, kto spróbuje znaleźć tę odpowiedź. Również trochę opisu nie zejdzie na manowce ...@Gordon basename będzie działał dobrze, jeśli znasz rozszerzenie, jeśli nie możesz użyć opcji rozstrzelenia:
źródło
pathinfo
, dlatego podałem tylkobasename
jako alternatywę. Nie ma potrzeby wymyślania na nowo zapathinfo
pomocą wyrażeń regularnych lubexplode
.end(explode(".", $file));
daje rozszerzenie, a nie nazwę pliku.Prawie wszystkie powyższe rozwiązania mają pokazane pobieranie nazwy pliku ze zmiennej $ path
Poniżej fragmentu otrzyma nazwę aktualnie wykonywanego pliku bez rozszerzenia
Wyjaśnienie
źródło
Nie ma potrzeby pisać dużo kodu. Nawet można tego dokonać za pomocą jednego wiersza kodu. Zobacz tutaj
Poniżej znajduje się kod jednego wiersza, który zwraca tylko nazwę pliku i usuwa nazwę rozszerzenia:
Wydrukuje się
Źródło: Usuń rozszerzenie i zwróć tylko nazwę pliku w PHP
źródło
@fire, ponieważ nazwa pliku używa kropek, możesz uzyskać niewłaściwy wynik. Chciałbym użyć metody @Gordon, ale też pobrać rozszerzenie, więc funkcja basename działa ze wszystkimi rozszerzeniami, tak jak to:
źródło
w moim przypadku używam poniżej. Nie obchodzi mnie, jakie jest jego rozszerzenie. : D Myślę, że to ci pomoże
źródło
$extenion
Możesz to napisać
Zwrócą bieżący element tablicy, jeśli nie był wcześniej używany.
źródło
Krótki
źródło
b.php
i wykonama.php
torequire('b.php')
. Następnie wyjście będzie jakb
zamiasta
Nazwa pliku bez rozszerzenia, jeśli nie znasz tego rozszerzenia:
$basename = substr($filename, 0, strrpos($filename, "."));
źródło
Jeśli nie wiesz, jakie masz rozszerzenie, możesz spróbować:
Praca ze wszystkimi możliwościami:
źródło
Twoja odpowiedź jest poniżej idealnego rozwiązania, aby ukryć rozszerzenie pliku w php.
źródło
Istniejące rozwiązania zawodzą, gdy rozszerzenie składa się z wielu części. Poniższa funkcja działa w przypadku wielu części, pełnej ścieżki lub po prostu nazwy pliku:
źródło
Zwraca tylko nazwę pliku bez rozszerzenia w 1 rzędzie:
źródło