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 サーバーでのデモ

于 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

これを試してください(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;
于 2013-07-09T08:53:19.833 に答える