我基本上是在从路径中提取文件名的方法之后。文件类型可能会更改,文件名可能包含空格。该路径也可以是Unix格式或Windows格式。
/Users/Bob/Documents/some file.docx
或者
C:\Users\Bob\My Documents\some file.docx
完整的源路径已存储在名为$fileSource
的变量中,并且我在名为$fileName
的变量中没有扩展名的文件名。我试图用str_replace
替换文件源的公共部分,空间为零,但路径可能会改变,所以这是不可行的。
我认为如果正则表达式可以用来向前翻阅字符串(从左到右阅读)\或/但我还不太了解正则表达式。我已经读过一个应该启动的向后看功能(?< = string ),但是我无法让它工作。
最后我需要带扩展名的文件名的原因是因为我使用PHP将其从一个位置复制到另一个位置,如果我没有文件扩展名,则文件会在没有扩展名的情况下出现,我必须添加手动。
如果我问的是不可能,我想我可以使用正则表达式来获取文件扩展名,然后将其连接到$fileName
,但我希望有更优雅的东西。
干杯。
答案 0 :(得分:3)
使用pathinfo
非常简单:
$fileName = pathinfo($fileSource, PATHINFO_BASENAME);
..或只是basename
:
$fileName = basename($fileSource);
请注意:Windows路径无法在Linux服务器上正常运行,并且Linux路径无法在Windows服务器上正常运行(由于DIRECTORY_SEPERATOR
不同)。
答案 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;