PHP, получить имя файла без расширения файла - PullRequest
169 голосов
/ 02 февраля 2010

У меня есть этот код 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]);
    }
}

Если у меня есть файл с именем my.zip, эта функция возвращает .zip.

Я хочу сделать наоборот, я хочу, чтобы функция возвращала my без расширения.

Файл представляет собой просто строку в переменной.

Ответы [ 17 ]

2 голосов
/ 28 декабря 2015

Short

echo pathinfo(__FILE__)['filename']; // since php 5.2
2 голосов
/ 06 октября 2015

Вы можете написать это

$filename = current(explode(".", $file));

Они вернут текущий элемент массива, если не использовались ранее.

1 голос
/ 21 мая 2016

Ваш ответ ниже идеального решения, чтобы скрыть расширение файла в php.

<?php
    $path = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
    echo basename($path, ".php");
?>
1 голос
/ 25 июня 2015

Если вы не знаете, какое у вас расширение, вы можете попробовать это:

$ext = strtolower(substr('yourFileName.ext', strrpos('yourFileName.ext', '.') + 1));
echo basename('yourFileName.ext','.'.$ext); // output: "youFileName" only

Работа со всеми возможностями:

image.jpg // output: "image"
filename.image.png // output: "filename.image"
index.php // output: "index"
1 голос
/ 27 августа 2014

Имя файла без расширения, если вы не знаете это расширение:

$basename = substr($filename, 0, strrpos($filename, "."));

0 голосов
/ 05 августа 2018

Существующие решения дают сбой, когда в расширении есть несколько частей. Функция ниже работает для нескольких частей, полного пути или просто имени файла:

function removeExt($path)
{
    $basename = basename($path);
    return strpos($basename, '.') === false ? $path : substr($path, 0, - strlen($basename) + strlen(explode('.', $basename)[0]));
}

echo removeExt('https://example.com/file.php');
// https://example.com/file
echo removeExt('https://example.com/file.tar.gz');
// https://example.com/file
echo removeExt('file.tar.gz');
// file
echo removeExt('file');
// file
0 голосов
/ 27 марта 2015

Возвращает только имя файла без расширения в 1 строке:

$path = "/etc/sudoers.php";    
print array_shift(explode(".", basename($path)));
// will print "sudoers"

$file = "file_name.php";    
print array_shift(explode(".", basename($file)));
// will print "file_name"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...