PHP提取文件名

时间:2013-07-09 08:44:12

标签: php regex

我基本上是在从路径中提取文件名的方法之后。文件类型可能会更改,文件名可能包含空格。该路径也可以是Unix格式或Windows格式。

/Users/Bob/Documents/some file.docx

或者

C:\Users\Bob\My Documents\some file.docx

完整的源路径已存储在名为$fileSource的变量中,并且我在名为$fileName的变量中没有扩展名的文件名。我试图用str_replace替换文件源的公共部分,空间为零,但路径可能会改变,所以这是不可行的。

我认为如果正则表达式可以用来向前翻阅字符串(从左到右阅读)\或/但我还不太了解正则表达式。我已经读过一个应该启动的向后看功能(?< = string ),但是我无法让它工作。

最后我需要带扩展名的文件名的原因是因为我使用PHP将其从一个位置复制到另一个位置,如果我没有文件扩展名,则文件会在没有扩展名的情况下出现,我必须添加手动。

如果我问的是不可能,我想我可以使用正则表达式来获取文件扩展名,然后将其连接到$fileName,但我希望有更优雅的东西。

干杯。

3 个答案:

答案 0 :(得分:3)

使用pathinfo非常简单:

$fileName = pathinfo($fileSource, PATHINFO_BASENAME);

..或只是basename

$fileName = basename($fileSource);

请注意:Windows路径无法在Linux服务器上正常运行,并且Linux路径无法在Windows服务器上正常运行(由于DIRECTORY_SEPERATOR不同)。

DEMO on a linux server

答案 1 :(得分:1)

PHP的pathinfo专门用于此:

<强>示例:

$file = pathinfo($yourFile, PATHINFO_FILENAME);

$file_ext = strtolower(pathinfo($yourFile, PATHINFO_EXTENSION)); //gets the file extension

答案 2 :(得分:0)

试试这个(pathinfo的替代品):

<?php
$filePath = '/Users/Bob/Documents/some file.docx'; // using *nix here
$file     = end(explode(DIRECTORY_SEPARATOR, $filePath));

echo $file;

如果您担心没有文件名的路径(所以是目录路径),请使用:

<?php
$filePath = '/Users/Bob/Documents/some file.docx'; // using *nix here
$DS       = DIRECTORY_SEPARATOR; // this way you can handle WinOS and *NIX paths
$file     = end(explode($DS, trim($filePath, $DS));

// Check if the path contains a dot, so it's a file name 
// with extension (e.g. filename.php)
$file     = (strpos($file, '.') !== false) ? $file : false;

echo $file;