Comment puis-je obtenir un nom de fichier à partir d'un chemin d'accès complet avec PHP?


229

Par exemple, comment obtenir Output.map

de

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

avec PHP?

Réponses:


452

Vous cherchez basename.

L'exemple du manuel 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 () a un bug lors du traitement des caractères asiatiques comme le chinois.
Sun Junwen

1
Merci Sun, vous venez de m'économiser des heures de suppression de bugs puisque mon application sera utilisée à l'étranger.
SilentSteel

11
Je suggérerais pathinfoplus basenameque Metafaniel a posté ci-dessous. pathinfo()vous donnera un tableau avec les parties du chemin. Ou pour le cas ici, vous pouvez simplement demander spécifiquement le nom du fichier. Donc, pathinfo('/var/www/html/index.php', PATHINFO_FILENAME)devrait retourner la 'index.php' documentation PHP Pathinfo
OnethingSimple

7
@OnethingSimple Vérifiez à nouveau les documents ... si intuitif que ce soit, vous voudrez PATHINFO_BASENAMEen avoir plein index.php. PATHINFO_FILENAMEvous donnera index.
levigroker

1
dans tous les cas, pour une méthode compatible unicode, mb_substr($filepath,mb_strrpos($filepath,'/',0,'UTF-16LE'),NULL,'UTF-16LE')- remplacez simplement UTF-16LE par le jeu de caractères utilisé par votre système de fichiers (NTFS et ExFAT utilise UTF16)
hanshenrik

68

Je l'ai fait en utilisant la fonction PATHINFOqui crée un tableau avec les parties du chemin à utiliser! Par exemple, vous pouvez faire ceci:

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

Cela reviendra:

/usr/admin/config
test.xml
xml
test

L'utilisation de cette fonction est disponible depuis PHP 5.2.0!

Ensuite, vous pouvez manipuler toutes les pièces selon vos besoins. Par exemple, pour utiliser le chemin complet, vous pouvez procéder comme suit:

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

1
Cela m'a aidé, bonne réponse.
Wiki Babu

13

Il existe plusieurs façons d'obtenir le nom et l'extension du fichier. Vous pouvez utiliser le suivant qui est facile à utiliser.

$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 Merci pour votre soutien
Khadka Pushpendra

12

La basenamefonction devrait vous donner ce que vous voulez:

Étant donné une chaîne contenant un chemin d'accès à un fichier, cette fonction retournera le nom de base du fichier.

Par exemple, en citant la page du manuel:

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

Ou, dans votre cas:

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

Tu auras:

string(10) "Output.map"

10

Avec SplFileInfo :

SplFileInfo La classe SplFileInfo offre une interface orientée objet de haut niveau vers les informations d'un fichier individuel.

Réf : 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

Essaye ça:

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

8

basename () a un bug lors du traitement des caractères asiatiques comme le chinois.

J'utilise ceci:

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

Je ne pense pas que ce bogue, dans les docs son mentionnée: 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. . Mais je préfère également utiliser preg_replace, car le séparateur de répertoires diffère selon les systèmes d'exploitation. Sur Ubuntu `\` n'est pas un séparateur direct et le nom de base n'aura aucun effet dessus.
Adam


4

Pour ce faire, en quelques lignes, je suggère d'utiliser la DIRECTORY_SEPARATORconstante intégrée avec explode(delimiter, string)pour séparer le chemin en parties, puis arracher simplement le dernier élément du tableau fourni.

Exemple:

$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

Pour obtenir le nom de fichier exact de l'URI, j'utiliserais cette méthode:

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

C'est simple. Par exemple:

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

La sortie sera:

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

Veuillez décrire ce que vous avez changé et pourquoi, pour aider les autres à identifier le problème et à comprendre cette réponse
FZ
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.