开发者

PHP: filename without file extension- best way?

I am trying to pull the filename out of a directory without the extension.

I am kludging my way through with the following:

foreach ($allowed_files as $filename) { 
  $link_filename = substr(basen开发者_Python百科ame($filename), 4, strrpos(basename($filename), '.'));
  $src_filename = substr($link_filename, 0, strrpos($link_filename) - 4);
  echo $src_filename;
}

...But that can't work if the extension string length is more than 3. I looked around in the PHP docs to no avail.


PHP has a handy pathinfo() function that does the legwork for you here:

foreach ($allowed_files as $filename) {
  echo pathinfo($filename, PATHINFO_FILENAME);
}

Example:

$files = array(
  'somefile.txt',
  'anotherfile.pdf',
  '/with/path/hello.properties',
);

foreach ($files as $file) {
  $name = pathinfo($file, PATHINFO_FILENAME);
  echo "$file => $name\n";
}

Output:

somefile.txt => somefile
anotherfile.pdf => anotherfile
/with/path/hello.properties => hello


try this

function file_extension($filename){
    $x = explode('.', $filename);
    $ext=end($x);
    $filenameSansExt=str_replace('.'.$ext,"",$filename);
    return array(
        "filename"=>$filenameSansExt,
        "extension"=>'.'.$ext,
        "extension_undotted"=>$ext
        );
}

usage:

$filenames=array("file1.php","file2.inc.php","file3..qwe.e-rt.jpg");
foreach($filenames as $filename){
    print_r(file_extension($filename));
    echo "\n------\n";

}

output

Array
(
    [filename] => file1
    [extension] => .php
    [extension_undotted] => php
)

------
Array
(
    [filename] => file2.inc
    [extension] => .php
    [extension_undotted] => php
)

------
Array
(
    [filename] => file3..qwe.e-rt
    [extension] => .jpg
    [extension_undotted] => jpg
)

------


list($file) = explode('.', $filename);


Try this:

$noExt = preg_replace("/\\.[^.]*$/", "", $filename);

Edit in response to cletus's comment:
You could change it in one of a few ways:

$noExt = preg_replace("/\\.[^.]*$/", "", basename($filename));

// or

$noExt = preg_replace("/\\.[^.\\\\\\/]*$/", "", $filename);

Yes, PHP needs regex literals...

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜