Wie erhalte ich mit PHP einen Dateinamen von einem vollständigen Pfad?

229

Zum Beispiel, wie bekomme ich Output.map

von

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

mit PHP?

Oh mein Gott
quelle

Antworten:

451

Du suchst basename.

Das Beispiel aus dem PHP-Handbuch:

<?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"
?>
Mark Rushakoff
quelle
29
basename () hat einen Fehler, wenn asiatische Zeichen wie Chinesisch verarbeitet werden.
So Junwen
1
Vielen Dank, Sun, Sie haben mir gerade Stunden beim Töten von Fehlern erspart, da meine App in Übersee verwendet wird.
SilentSteel
11
Ich würde vorschlagen , pathinfoüber basenamewie Metafaniel unten geschrieben. pathinfo()gibt Ihnen ein Array mit den Teilen des Pfades. Oder für den Fall hier können Sie einfach speziell nach dem Dateinamen fragen. Also pathinfo('/var/www/html/index.php', PATHINFO_FILENAME)sollte 'index.php' PHP Pathinfo Dokumentation zurückgeben
OnethingSimple
7
@OnethingSimple Überprüfen Sie die Dokumente erneut ... obwohl dies nicht intuitiv ist, möchten PATHINFO_BASENAMESie die vollständige Version erhalten index.php. PATHINFO_FILENAMEwerde dir geben index.
Levigroker
1
In jedem Fall - für eine Unicode-kompatible Methode mb_substr($filepath,mb_strrpos($filepath,'/',0,'UTF-16LE'),NULL,'UTF-16LE')- ersetzen Sie UTF-16LE einfach durch den von Ihrem Dateisystem verwendeten Zeichensatz (NTFS und ExFAT verwenden UTF16)
hanshenrik
66

Ich habe dies mit der Funktion gemacht, PATHINFOdie ein Array mit den Teilen des Pfades erstellt, die Sie verwenden können! Zum Beispiel können Sie dies tun:

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

Dies wird zurückkehren:

/usr/admin/config
test.xml
xml
test

Die Verwendung dieser Funktion ist seit PHP 5.2.0 verfügbar!

Dann können Sie alle Teile nach Bedarf bearbeiten. Um beispielsweise den vollständigen Pfad zu verwenden, können Sie Folgendes tun:

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

Die basenameFunktion sollte Ihnen geben, was Sie wollen:

Bei einer Zeichenfolge, die einen Pfad zu einer Datei enthält, gibt diese Funktion den Basisnamen der Datei zurück.

Zum Beispiel die Seite des Handbuchs zitieren:

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

Oder in Ihrem Fall:

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

Du wirst kriegen:

string(10) "Output.map"
Pascal MARTIN
quelle
12

Es gibt verschiedene Möglichkeiten, den Dateinamen und die Erweiterung abzurufen. Sie können die folgende verwenden, die einfach zu bedienen ist.

$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
Khadka Pushpendra
quelle
@ Peter Mortensen Vielen Dank für Ihre Unterstützung
Khadka Pushpendra
10

Mit SplFileInfo :

SplFileInfo Die SplFileInfo-Klasse bietet eine objektorientierte Schnittstelle auf hoher Ebene zu Informationen für eine einzelne Datei.

Ref : 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"

Einbauten
quelle
9

Versuche dies:

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

basename () hat einen Fehler bei der Verarbeitung asiatischer Zeichen wie Chinesisch.

Ich benutze das:

function get_basename($filename)
{
    return preg_replace('/^.+[\\\\\\/]/', '', $filename);
}
Sun Junwen
quelle
Ich denke nicht, dass es ein Fehler ist, in den Dokumenten wird es erwähnt : 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. . Ich bevorzuge aber auch die Verwendung von preg_replace, da sich das Verzeichnis-Trennzeichen zwischen den Betriebssystemen unterscheidet. Unter Ubuntu ist `\` kein Direkttrennzeichen und der Basisname hat keine Auswirkung darauf.
Adam
7
$filename = basename($path);
p4bl0
quelle
4

Um dies in den wenigsten Zeilen zu tun, würde ich vorschlagen, die eingebaute DIRECTORY_SEPARATORKonstante zusammen mit explode(delimiter, string)zu verwenden, um den Pfad in Teile zu trennen und dann einfach das letzte Element im bereitgestellten Array abzureißen.

Beispiel:

$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'
Douglas Tober
quelle
4

Sie können die Funktion basename () verwenden.

Schwindel
quelle
1

Um den genauen Dateinamen von der URI zu erhalten, würde ich diese Methode verwenden:

<?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, '?'));
?>
Chandoo
quelle
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>

Anteliebe
quelle
0

Es ist einfach. Beispielsweise:

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

Die Ausgabe wird sein:

Array
(
    [dirname] => /www/htdocs
    [basename] => index.html
    [extension] => html
    [filename] => index
)
Kathir
quelle
0
$image_path = "F:\Program Files\SSH Communications Security\SSH Secure Shell\Output.map";
$arr = explode('\\',$image_path);
$name = end($arr);
Chandni Soni
quelle
Bitte beschreiben Sie, was Sie geändert haben und warum, um anderen zu helfen, das Problem zu identifizieren und diese Antwort zu verstehen
FZs