Bagaimana cara saya mendapatkan nama file dari path lengkap dengan PHP?


229

Sebagai contoh, bagaimana saya dapatkan Output.map

dari

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

dengan PHP?

Jawaban:


451

Anda sedang mencari basename.

Contoh dari manual 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 () memiliki bug ketika memproses karakter Asia seperti Cina.
Sun Junwen

1
Terima kasih Sun, Anda baru saja menyelamatkan saya berjam-jam membunuh bug karena aplikasi saya akan digunakan di luar negeri.
SilentSteel

11
Saya akan menyarankan pathinfolebih basenamesebagai Metafaniel diposting di bawah ini. pathinfo()akan memberi Anda array dengan bagian-bagian jalan. Atau untuk kasus di sini, Anda bisa secara khusus meminta nama file. Jadi pathinfo('/var/www/html/index.php', PATHINFO_FILENAME)sebaiknya kembalikan 'index.php' dokumentasi PHP Pathinfo
OnethingSimple

7
@OnethingSimple Periksa dokumen lagi ... meskipun secara intuitif, Anda ingin PATHINFO_BASENAMEmendapatkan yang lengkap index.php. PATHINFO_FILENAMEakan memberimu index.
levigroker

1
dalam hal apa pun, untuk metode yang kompatibel dengan unicode, mb_substr($filepath,mb_strrpos($filepath,'/',0,'UTF-16LE'),NULL,'UTF-16LE')- cukup ganti UTF-16LE dengan karakter apa pun yang digunakan sistem file Anda (NTFS dan ExFAT menggunakan UTF16)
hanshenrik

68

Saya telah melakukan ini menggunakan fungsi PATHINFOyang membuat array dengan bagian-bagian jalan untuk Anda gunakan! Misalnya, Anda dapat melakukan ini:

<?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);
?>

Ini akan mengembalikan:

/usr/admin/config
test.xml
xml
test

Penggunaan fungsi ini telah tersedia sejak PHP 5.2.0!

Kemudian Anda dapat memanipulasi semua bagian yang Anda butuhkan. Misalnya, untuk menggunakan jalur lengkap, Anda dapat melakukan ini:

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

1
Ini membantu saya, jawaban yang bagus.
Wiki Babu

12

The basenameFungsi harus memberikan apa yang Anda inginkan:

Diberikan string yang berisi path ke file, fungsi ini akan mengembalikan nama dasar file.

Misalnya, mengutip halaman manual:

<?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"
?>

Atau, dalam kasus Anda:

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

Anda akan mendapatkan:

string(10) "Output.map"

12

Ada beberapa cara untuk mendapatkan nama file dan ekstensi. Anda dapat menggunakan yang berikut ini yang mudah digunakan.

$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 Terima kasih atas dukungan Anda
Khadka Pushpendra


9

Coba ini:

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

8

basename () memiliki bug saat memproses karakter Asia seperti Cina.

Saya menggunakan ini:

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

Saya tidak berpikir bug nya, dalam dokumen yang disebutkan: 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. . Tapi saya juga lebih suka menggunakan preg_replace, karena pemisah direktori berbeda antara sistem operasi. Di Ubuntu `\` bukan pemisah directoy dan nama bas tidak akan berpengaruh padanya.
Adam


4

Untuk melakukan ini di baris paling sedikit saya sarankan menggunakan DIRECTORY_SEPARATORkonstanta built-in bersama denganexplode(delimiter, string) untuk memisahkan jalan menjadi bagian-bagian dan kemudian cukup memetik elemen terakhir dalam array yang disediakan.

Contoh:

$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

Untuk mendapatkan nama file yang tepat dari URI, saya akan menggunakan metode ini:

<?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

Itu mudah. Sebagai contoh:

<?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);
?>

Outputnya adalah:

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);

Tolong jelaskan apa yang Anda ubah dan mengapa, untuk membantu orang lain mengidentifikasi masalah dan memahami jawaban ini
FZ
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.