PHPでフルパスからファイル名を取得するにはどうすればよいですか?


229

たとえば、どうすれば取得できますか Output.map

から

F:\Program Files\SSH Communications Security\SSH Secure Shell\Output.map

PHPで?

回答:


451

あなたが探していbasenameます。

PHPマニュアルの例:

<?php
$path = "/home/httpd/html/index.php";
$file = basename($path);         // $file is set to "index.php"
$file = basename($path, ".php"); // $file is set to "index"
?>

29
basename()には、中国語などのアジアの文字を処理するときにバグがあります。
2013年

1
サンに感謝します。私のアプリが海外で使用されるので、バグを殺す時間を数時間節約できました。
SilentSteel 14

11
Metafanielが以下に投稿したように、私はpathinfo以上basenameを提案します。pathinfo()パスのパーツを含む配列を提供します。または、ここでは、具体的にファイル名を尋ねることもできます。だから、pathinfo('/var/www/html/index.php', PATHINFO_FILENAME)返す必要があります'index.php' PHPパス情報のドキュメントを
OnethingSimple

7
@OnethingSimpleもう一度ドキュメントを確認してください...直感に反しますPATHINFO_BASENAMEが、完全なものを取得する必要がありますindex.phpPATHINFO_FILENAMEあなたに与えるでしょうindex
levigroker

1
いずれの場合でも、Unicode互換のメソッドの場合、 mb_substr($filepath,mb_strrpos($filepath,'/',0,'UTF-16LE'),NULL,'UTF-16LE')UTF-16LEをファイルシステムで使用する文字
セット

68

PATHINFOこれは、使用するパスの一部を含む配列を作成する関数を使用して行いました。たとえば、これを行うことができます:

<?php
    $xmlFile = pathinfo('/usr/admin/config/test.xml');

    function filePathParts($arg1) {
        echo $arg1['dirname'], "\n";
        echo $arg1['basename'], "\n";
        echo $arg1['extension'], "\n";
        echo $arg1['filename'], "\n";
    }

    filePathParts($xmlFile);
?>

これは戻ります:

/usr/admin/config
test.xml
xml
test

この関数は、PHP 5.2.0以降で使用できます。

その後、必要に応じてすべてのパーツを操作できます。たとえば、フルパスを使用するには、次のようにします。

$fullPath = $xmlFile['dirname'] . '/' . $xmlFile['basename'];

1
これは私に役立ちました、良い答え。
Wiki Babu

12

basename関数が何をしたいあなたを与える必要があります。

ファイルへのパスを含む文字列を指定すると、この関数はファイルのベース名を返します。

たとえば、マニュアルのページを引用すると:

<?php
    $path = "/home/httpd/html/index.php";
    $file = basename($path);         // $file is set to "index.php"
    $file = basename($path, ".php"); // $file is set to "index"
?>

または、あなたの場合:

$full = 'F:\Program Files\SSH Communications Security\SSH Secure Shell\Output.map';
var_dump(basename($full));

あなたは得るでしょう:

string(10) "Output.map"

12

ファイル名と拡張子を取得するには、いくつかの方法があります。使いやすい次のものが使えます。

$url = 'http://www.nepaltraveldoor.com/images/trekking/nepal/annapurna-region/Annapurna-region-trekking.jpg';
$file = file_get_contents($url); // To get file
$name = basename($url); // To get file name
$ext = pathinfo($url, PATHINFO_EXTENSION); // To get extension
$name2 =pathinfo($url, PATHINFO_FILENAME); // File name without extension

@peter Mortensenご協力ありがとうございます
Khadka Pushpendra 2018年

10

SplFileInfo

SplFileInfo SplFileInfoクラスは、個々のファイルの情報への高レベルのオブジェクト指向インターフェイスを提供します。

参照http : //php.net/manual/en/splfileinfo.getfilename.php

$info = new SplFileInfo('/path/to/foo.txt');
var_dump($info->getFilename());

o / p:string(7) "foo.txt"


9

これを試して:

echo basename($_SERVER["SCRIPT_FILENAME"], '.php') 

8

basename()には、中国語などのアジアの文字を処理するときにバグがあります。

私はこれを使います:

function get_basename($filename)
{
    return preg_replace('/^.+[\\\\\\/]/', '', $filename);
}

私はそれがバグだとは思わない、ドキュメントで言及されている:Caution basename() is locale aware, so for it to see the correct basename with multibyte character paths, the matching locale must be set using the setlocale() function. 。ただし、ディレクトリ区切り文字はオペレーティングシステムによって異なるため、preg_replaceを使用することも好みます。Ubuntuでは、 `\`は直接区切り文字ではなく、basenameはそれに影響を与えません。
アダム


4

数行でこれを行うには、組み込みDIRECTORY_SEPARATOR定数と一緒explode(delimiter, string)にパスをパーツに分割して、提供された配列の最後の要素を取り除くだけにすることをお勧めします。

例:

$path = 'F:\Program Files\SSH Communications Security\SSH SecureShell\Output.map'

//Get filename from path
$pathArr = explode(DIRECTORY_SEPARATOR, $path);
$filename = end($pathArr);

echo $filename;
>> 'Output.map'


1

URIから正確なファイル名を取得するには、次の方法を使用します。

<?php
    $file1 =basename("http://localhost/eFEIS/agency_application_form.php?formid=1&task=edit") ;

    //basename($_SERVER['REQUEST_URI']); // Or use this to get the URI dynamically.

    echo $basename = substr($file1, 0, strpos($file1, '?'));
?>

0
<?php

  $windows = "F:\Program Files\SSH Communications Security\SSH Secure Shell\Output.map";

  /* str_replace(find, replace, string, count) */
  $unix    = str_replace("\\", "/", $windows);

  print_r(pathinfo($unix, PATHINFO_BASENAME));

?> 

body, html, iframe { 
  width: 100% ;
  height: 100% ;
  overflow: hidden ;
}
<iframe src="https://ideone.com/Rfxd0P"></iframe>


0

それは簡単です。例えば:

<?php
    function filePath($filePath)
    {
        $fileParts = pathinfo($filePath);

        if (!isset($fileParts['filename']))
        {
            $fileParts['filename'] = substr($fileParts['basename'], 0, strrpos($fileParts['basename'], '.'));
        }
        return $fileParts;
    }

    $filePath = filePath('/www/htdocs/index.html');
    print_r($filePath);
?>

出力は次のようになります。

Array
(
    [dirname] => /www/htdocs
    [basename] => index.html
    [extension] => html
    [filename] => index
)

0
$image_path = "F:\Program Files\SSH Communications Security\SSH Secure Shell\Output.map";
$arr = explode('\\',$image_path);
$name = end($arr);

他の人が問題を特定し、この回答を理解できるように、何を変更したのか、またその理由を説明してください
FZs '
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.