web-dev-qa-db-fra.com

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

Par exemple, comment puis-je obtenir Output.map

de

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

avec PHP?

188
omg

Vous recherchez 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"
?>
379
Mark Rushakoff

J'ai fait cela en utilisant la fonction PATHINFO qui crée un tableau avec les parties du chemin que vous pouvez 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 retournera:

/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 parties selon vos besoins. Par exemple, pour utiliser le chemin complet, vous pouvez procéder comme suit:

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

La fonction basename devrait vous donner ce que vous voulez:

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

Par exemple, 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"
11
Pascal MARTIN

Avec SplFileInfo:

SplFileInfo La classe SplFileInfo offre une solution orientée objet de haut niveau interface avec les informations pour un fichier individuel.

Ref: http://php.net/manual/en/splfileinfo.getfilename.php

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

o/p: chaîne (7) "foo.txt"

8
7-isnotbad

Il existe plusieurs manières d’obtenir le nom du fichier et son extension. 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
7
Khadka Pushpendra

Essaye ça:

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

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

J'utilise ceci:

function get_basename($filename)
{
    return preg_replace('/^.+[\\\\\\/]/', '', $filename);
}
6
Sun Junwen
$filename = basename($path);
6
p4bl0

Vous pouvez utiliser la fonction basename () .

3
Vertigo

Pour faire cela dans un minimum de lignes, je suggérerais d'utiliser la constante DIRECTORY_SEPARATOR intégrée avec la fonction explode(delimiter, string) pour séparer le chemin d'accès en plusieurs parties, puis simplement extraire 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'
3
Douglas Tober

Basename ne fonctionne pas pour moi. J'ai le nom de fichier d'un formulaire (fichier). Dans Google Chrome (Mac OS X 10.7 (Lion)), la variable de fichier devient:

c:\fakepath\file.txt

Quand j'utilise:

basename($_GET['file'])

il retourne:

c:\fakepath\file.txt

Donc, dans ce cas, la réponse de Sun Junwen fonctionne le mieux.

Sur Firefox, la variable du fichier n'inclut pas ce fakepath.

1
ricardo

Pour obtenir le nom de fichier exact à partir 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, '?'));
?>
1
chandoo
<?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
antelove

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
Kathir
$image_path = "F:\Program Files\SSH Communications Security\SSH Secure Shell\Output.map";
$arr = explode('\\',$image_path);
$name = end($arr);
0
Chandni Soni