0

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

/Users/Bob/Documents/some file.docx

或者

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

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

我想如果正则表达式可以用于通过字符串向后工作(从左到右读取)\ 或 / 但我还不太了解正则表达式。我已经阅读了一个应该开始的回溯功能 (?<= string ),但我无法让它工作。

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

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

干杯。

4

3 回答 3

3

使用起来非常简单pathinfo

$fileName = pathinfo($fileSource, PATHINFO_BASENAME);

..或者简单地说basename

$fileName = basename($fileSource);

请注意:Windows 路径在 linux 服务器上将无法正常工作,而 linux 路径在 Windows 服务器上将无法正常工作(由于DIRECTORY_SEPERATOR不同)。

linux服务器上的DEMO

于 2013-07-09T08:48:10.700 回答
1

PHPpathinfo专门为此:

例子:

$file = pathinfo($yourFile, PATHINFO_FILENAME);

$file_ext = strtolower(pathinfo($yourFile, PATHINFO_EXTENSION)); //gets the file extension
于 2013-07-09T08:49:53.417 回答
0

试试这个(替代路径信息):

<?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;
于 2013-07-09T08:53:19.833 回答