Làm cách nào để có được tên tệp từ đường dẫn đầy đủ với PHP?


229

Ví dụ: làm thế nào để tôi có được Output.map

từ

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

với PHP?

Câu trả lời:


451

Bạn đang tìm kiếm basename.

Ví dụ từ hướng dẫn 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 () có lỗi khi xử lý các ký tự châu Á như tiếng Trung.
Sun Junwen

1
Cảm ơn Sun, bạn vừa tiết kiệm cho tôi hàng giờ để diệt lỗi vì ứng dụng của tôi sẽ được sử dụng ở nước ngoài.
SilentSteel

11
Tôi sẽ đề nghị pathinfotrên basenamenhư Metafaniel đăng tải dưới đây. pathinfo()sẽ cung cấp cho bạn một mảng với các phần của đường dẫn. Hoặc đối với trường hợp ở đây, bạn chỉ có thể yêu cầu tên tệp cụ thể. Vì vậy, pathinfo('/var/www/html/index.php', PATHINFO_FILENAME)nên trả lại 'index.php' tài liệu PHP Pathinfo
Onet BreathSimple

7
@Onet BreathSimple Kiểm tra lại các tài liệu ... truy cập trực quan mặc dù vậy, bạn sẽ muốn PATHINFO_BASENAMEnhận được đầy đủ index.php. PATHINFO_FILENAMEsẽ cung cấp cho bạn index.
levigroker

1
trong mọi trường hợp, đối với phương thức tương thích unicode, mb_substr($filepath,mb_strrpos($filepath,'/',0,'UTF-16LE'),NULL,'UTF-16LE')- chỉ cần thay thế UTF-16LE bằng bất kỳ ký tự nào mà hệ thống tệp của bạn sử dụng (NTFS và ExFAT sử dụng UTF16)
hanshenrik

68

Tôi đã thực hiện điều này bằng cách sử dụng chức năng PATHINFOtạo ra một mảng với các phần của đường dẫn để bạn sử dụng! Ví dụ: bạn có thể làm điều này:

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

Điều này sẽ trở lại:

/usr/admin/config
test.xml
xml
test

Việc sử dụng chức năng này đã có sẵn kể từ PHP 5.2.0!

Sau đó, bạn có thể thao tác tất cả các phần khi bạn cần. Ví dụ: để sử dụng đường dẫn đầy đủ, bạn có thể làm điều này:

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

1
Điều này đã giúp tôi, câu trả lời tốt.
Wiki Babu

12

Các basenamechức năng sẽ cho bạn những gì bạn muốn:

Đưa ra một chuỗi chứa một đường dẫn đến một tệp, hàm này sẽ trả về tên cơ sở của tệp.

Ví dụ: trích dẫn trang hướng dẫn:

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

Hoặc, trong trường hợp của bạn:

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

Bạn sẽ nhận được:

string(10) "Output.map"

12

Có một số cách để có được tên tập tin và phần mở rộng. Bạn có thể sử dụng một trong những sau đây là dễ sử dụng.

$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 Cảm ơn sự hỗ trợ của bạn
Khadka Pushpendra

10

Với SplFileInfo :

SplFileInfo Lớp SplFileInfo cung cấp giao diện hướng đối tượng mức cao đến thông tin cho một tệp riêng lẻ.

Tham chiếu : http://php.net/manual/en/splfileinfo.getfilename.php

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

o / p: chuỗi (7) "foo.txt"


9

Thử cái này:

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

8

basename () có lỗi khi xử lý các ký tự châu Á như tiếng Trung Quốc.

Tôi sử dụng cái này:

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

Tôi không nghĩ đó là một lỗi, trong các tài liệu được đề cập : 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. . Nhưng tôi cũng sử dụng preg numplace, vì trình phân tách thư mục khác nhau giữa các hệ điều hành. Trên Ubuntu `\` không phải là dấu tách trực tiếp và tên cơ sở sẽ không có hiệu lực đối với nó.
Adam


4

Để thực hiện điều này trong một vài dòng, tôi sẽ đề nghị sử dụng DIRECTORY_SEPARATORhằng số tích hợp cùng với explode(delimiter, string)để tách đường dẫn thành các phần và sau đó chỉ cần ngắt phần tử cuối cùng trong mảng được cung cấp.

Thí dụ:

$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

Để có được tên tệp chính xác từ URI, tôi sẽ sử dụng phương pháp này:

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

Thật đơn giản. Ví dụ:

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

Đầu ra sẽ là:

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

Vui lòng mô tả những gì bạn đã thay đổi và tại sao, để giúp người khác xác định vấn đề và hiểu câu trả lời này
FZs
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.