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?

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

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'];

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"

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

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


9

Versuche dies:

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

8

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

Ich benutze das:

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

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


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'


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

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

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
)

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

Bitte beschreiben Sie, was Sie geändert haben und warum, um anderen zu helfen, das Problem zu identifizieren und diese Antwort zu verstehen
FZs
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.