PHP ile tam yoldan nasıl dosya adı alabilirim?


229

Örneğin, nasıl edinebilirim? Output.map

itibaren

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

PHP ile?

Yanıtlar:


451

Arıyorsunuz basename.

PHP kılavuzundan örnek:

<?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 (), Çince gibi Asya dillerindeki karakterleri işlerken hata veriyor.
Sun Junwen

1
Teşekkürler Sun, benim app yurtdışı kullanılacağı için bana saatlerce böcek öldürme kurtardı.
SilentSteel

11
Öneririm pathinfoüzerinde basenameMetafaniel aşağıda yayınlanmıştır olarak. pathinfo()size yolun bölümlerini içeren bir dizi verecektir. Veya buradaki durum için, sadece dosya adını isteyebilirsiniz. Yani pathinfo('/var/www/html/index.php', PATHINFO_FILENAME)dönmelidir 'index.php' PHP Pathinfo belgelerine
OnethingSimple

7
@OnethingSimple Dokümanları tekrar kontrol edin ... sezgisel karşı olsa da, PATHINFO_BASENAMEtam almak istersiniz index.php. PATHINFO_FILENAMEverecek index.
levigroker

1
her durumda, unicode uyumlu bir yöntem için mb_substr($filepath,mb_strrpos($filepath,'/',0,'UTF-16LE'),NULL,'UTF-16LE')- UTF-16LE'yi dosya sisteminizin kullandığı karakter kümesiyle değiştirin (NTFS ve ExFAT UTF16 kullanır)
hanshenrik

68

Bunu kullanmanız PATHINFOiçin yolun parçaları ile bir dizi oluşturan işlevi kullanarak yaptım ! Örneğin, bunu yapabilirsiniz:

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

Bu geri dönecektir:

/usr/admin/config
test.xml
xml
test

Bu işlevin kullanımı PHP 5.2.0'dan beri mevcuttur!

Ardından tüm parçaları istediğiniz gibi kullanabilirsiniz. Örneğin, tam yolu kullanmak için şunları yapabilirsiniz:

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

1
Bu bana yardımcı oldu, iyi cevap.
Wiki Babu

12

basenameFonksiyonu istediğini vermelidir:

Bir dosya yolu içeren bir dize verildiğinde, bu işlev dosyanın temel adını döndürür.

Örneğin, kılavuzun sayfasından alıntı yapmak:

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

Veya, sizin durumunuzda:

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

Alacaksınız:

string(10) "Output.map"

12

Dosya adını ve uzantısını almanın birkaç yolu vardır. Kullanımı kolay olanı kullanabilirsiniz.

$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 Desteğiniz için teşekkürler
Khadka Pushpendra


9

Bunu dene:

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

8

basename (), Çince gibi Asya dillerindeki karakterleri işlerken hata veriyor.

Bunu kullanıyorum:

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

Ben de, onun bir böcek sanmıyorum docs onun sözü: 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. . Ama aynı zamanda preg_replace kullanmayı tercih ediyorum, çünkü dizin ayırıcı işletim sistemleri arasında farklılık gösteriyor. Ubuntu'da `\` bir dizin ayırıcısı değildir ve taban adının üzerinde hiçbir etkisi olmayacaktır.
Adam


4

Bunu en az satırda DIRECTORY_SEPARATORyapmak explode(delimiter, string)için, yolu parçalara ayırmak ve ardından verilen dizideki son öğeyi çıkarmak için dahili sabitin kullanılmasını öneririm .

Misal:

$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

URI'den tam dosya adını almak için bu yöntemi kullanırdım:

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

Basit. Örneğin:

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

Çıktı şöyle olacaktır:

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

Lütfen neyi değiştirdiğinizi ve nedenini açıklayın, başkalarının sorunu tanımlamasına ve bu cevabı anlamasına yardımcı olmak için
FZ'ler
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.