Php recursiveiteratoriterator dapatkan nama file

Ini akan meninggalkan Anda dengan sebuah array dengan dua node utama. file dan direktori. Saya menulis ini untuk sistem test-and-build-on-commit terdistribusi PHP dan bekerja dengan baik. Info lebih lanjut tentang PHP SPL Iterators dapat ditemukan di sini. http. // www. php. net/manual/en/spl. iterator. php

Omong-omong, GetInfoArray adalah ini

private function GetInfoArray($path){
    $d = new SplFileInfo($path);
    if($d->getBasename() == "." || $d->getBasename() == ".."){
        return;
    } else {
        return array(
           "pathname"    => $d->getPathname(),
           "access"      => $d->getATime(),
           "modified"    => $d->getMTime(),
           "permissions" => $d->getPerms(),
           "size"        => $d->getSize(),
           "type"        => $d->getType(),
           "path"        => $d->getPath(),
           "basename"    => $d->getBasename(),
           "filename"    => $d->getFilename()
        );
    }
}

Pada akhirnya, Anda pergi dengan sesuatu seperti ini

$this->listing['files']['smiles.jpg']['pathname'] = "/srv/www/smiles.jpg"
$this->listing['files']['smiles.jpg']['access'] = "1323546894"
$this->listing['files']['smiles.jpg']['modified'] = "2316546521"
$this->listing['files']['smiles.jpg']['permissions'] = "744"
$this->listing['files']['smiles.jpg']['size'] = "12Kb"
$this->listing['files']['smiles.jpg']['type'] = "jpg"
$this->listing['files']['smiles.jpg']['path'] = "/srv/www"
$this->listing['files']['smiles.jpg']['basename'] = "smiles"
$this->listing['files']['smiles.jpg']['filename'] = "smiles.jpg"
_

Apa-apaan ini, ini kelasnya sendiri

# Done

class DirectoryReader{
    private $directory;
    private $listing;

    public function __construct($directory){
        try {
            $this->directory = $directory;
            $this->listing = array();
            $this->ListDir();
        } catch(UnexpectedValueException $e){
            die("Path cannot be opened.");
        } catch(RuntimeException $e){
            die("Path given is empty string.");
        }
    }

    public function GetListing(){
        return $this->listing;
    }

    private function ListDir(){
        $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($this->directory), RecursiveIteratorIterator::CHILD_FIRST);
        foreach($iterator as $path){
            if($path->isDir()){
                $cache = $this->GetInfoArray($path->__toString());
                isset($cache) ? $this->listing['directories'][] = $cache : "";
                unset($cache);
            } else {
                $this->listing['files'][] = $this->GetInfoArray($path->__toString());
            }
        }
    }

    private function GetInfoArray($path){
        $d = new SplFileInfo($path);
        if($d->getBasename() == "." || $d->getBasename() == ".."){
            return;
        } else {
            return array(
               "pathname"    => $d->getPathname(),
               "access"      => $d->getATime(),
               "modified"    => $d->getMTime(),
               "permissions" => $d->getPerms(),
               "size"        => $d->getSize(),
               "type"        => $d->getType(),
               "path"        => $d->getPath(),
               "basename"    => $d->getBasename(),
               "filename"    => $d->getFilename()
            );
        }
    }
}

Sebagai catatan lebih lanjut, Anda juga dapat menghubungi scandir($directory) dan memfilter melalui is_dir() di foreach

Standard PHP Library (SPL) adalah kumpulan antarmuka dan kelas yang dimaksudkan untuk memecahkan masalah umum

SPL telah diperkenalkan pada tahun 2005 dengan PHP 5. 0. 0

SPL tidak memerlukan pustaka tambahan apa pun;

Dalam posting ini, saya akan menunjukkan kepada Anda beberapa iterator yang digunakan untuk menangani sistem file

Penanganan Berkas

Pustaka SPL menyediakan tiga kelas untuk penanganan file

  • echo $file->getSize();
    
    5. informasi file, seperti ukuran, nama jalur, jalur nyata, dll
  • echo $file->getSize();
    
    6. antarmuka berorientasi objek untuk file
  • echo $file->getSize();
    
    _7. antarmuka berorientasi objek untuk file sementara

Mari selami tiga kelas ini

Seperti yang saya sebutkan,

echo $file->getSize();
_6 menyediakan antarmuka berorientasi objek untuk file, jadi, alih-alih menggunakan fungsi
echo $file->getSize();
9,
$file = new SplFileObject('php.txt');
foreach ($file as $line) {
    echo $line;
}
0,
$file = new SplFileObject('php.txt');
foreach ($file as $line) {
    echo $line;
}
1 Anda akan menggunakan fungsi
echo $file->getSize();
6

// Writing to a file
$file = new SplFileObject('myfile', 'w+');
$file->fwrite('Hello World');

Mari saya tunjukkan contoh lain

Buat file teks baru dengan konten berikut

Hello World
I love PHP
PHP is amazing
SPL is great


PHP is the most used server-side programming language.

Simpan sebagai

$file = new SplFileObject('php.txt');
foreach ($file as $line) {
    echo $line;
}
_3

Kelas

echo $file->getSize();
_6 memperluas antarmuka
echo $file->getSize();
5 serta antarmuka
$file = new SplFileObject('php.txt');
foreach ($file as $line) {
    echo $line;
}
6

Dapatkan ukuran file

echo $file->getSize();

Baca file baris demi baris

$file = new SplFileObject('php.txt');
foreach ($file as $line) {
    echo $line;
}
_

Anda mungkin ingin mengetahui beberapa informasi tentang file yang diberikan, jadi gunakan

echo $file->getSize();
5 untuk tujuan ini

$info = new SplFileInfo('php.txt');
if ($info->isFile()) {
    echo $info->getRealPath();
}

echo $file->getSize();
_5 menawarkan antarmuka yang menyediakan banyak metode berguna seperti
$file = new SplFileObject('php.txt');
foreach ($file as $line) {
    echo $line;
}
9,
$info = new SplFileInfo('php.txt');
if ($info->isFile()) {
    echo $info->getRealPath();
}
0,
$info = new SplFileInfo('php.txt');
if ($info->isFile()) {
    echo $info->getRealPath();
}
1 dll

Lihat dokumentasi PHP untuk daftar lengkap metode

echo $file->getSize();
5

Anda mungkin ingin menggunakan

echo $file->getSize();
_7 untuk membuat file sementara berbasis memori

$temp = new SplTempFileObject();
$temp->fwrite('Hello World');

var_dump($temp->getPathName()); // php://temp

Seperti yang Anda lihat di sini, file sementara disimpan di memori dan bukan di disk file, tetapi tidak selalu demikian, seperti yang akan saya bahas nanti

Anda mungkin bertanya-tanya mengapa file tersebut disimpan ke dalam memori dan bukan di sistem file?

Memori jauh lebih cepat daripada sistem file

Bayangkan Anda sedang mem-parsing file CSV dan mengirimkannya kembali ke pengguna akhir sehingga dia dapat mendownloadnya

$file = new SplTempFileObject();
// csv processing here
$file->rewind();
header('Content-Type: text/csv');
header('Content-Disposition: attachmenet; filename=mycsvfile.csv');
$file->fpassthru();

Baca lebih lanjut tentang mem-parsing file csv di PHP

Harap perhatikan bahwa jika ukuran file melebihi nilai

$info = new SplFileInfo('php.txt');
if ($info->isFile()) {
    echo $info->getRealPath();
}
4 (yaitu 2 MB secara default), maka file tersebut akan disimpan sebagai file disk di direktori temp sistem kecuali jika Anda menentukan ukuran memori maksimum di
$info = new SplFileInfo('php.txt');
if ($info->isFile()) {
    echo $info->getRealPath();
}
5 sebagai berikut

$temp = new SplTempFileObject(10); // 10 bytes is the max memory size
$temp->fwrite("This is the first line\n");
$temp->fwrite("And this is the second.\n");

Bahkan jika file akan disimpan di disk, tidak ada cara untuk mendapatkan jalur sistem lengkapnya, itu akan selalu merujuk ke

$info = new SplFileInfo('php.txt');
if ($info->isFile()) {
    echo $info->getRealPath();
}
6 sebagai jalur file, itu kabel, bukan?

Anda dapat menggunakan fungsi

$info = new SplFileInfo('php.txt');
if ($info->isFile()) {
    echo $info->getRealPath();
}
_7 untuk membuat file temp berbasis disk dan kemudian mengambil jalurnya dengan menggunakan
$info = new SplFileInfo('php.txt');
if ($info->isFile()) {
    echo $info->getRealPath();
}
8

$file = tmpfile();
$path = stream_get_meta_data($file)['uri']; // eg: /tmp/phpFx0513a

DirectoryIterator

Seperti namanya,

$info = new SplFileInfo('php.txt');
if ($info->isFile()) {
    echo $info->getRealPath();
}
_9 melintasi direktori yang diberikan

$files = new DirectoryIterator('/Users/ahmad');
echo '<ul>';
foreach ($files as $file) {
    echo '<li>'.$file.'</br>';
}
echo '</ul>';

Secara default,

$info = new SplFileInfo('php.txt');
if ($info->isFile()) {
    echo $info->getRealPath();
}
_9 menyertakan
$temp = new SplTempFileObject();
$temp->fwrite('Hello World');

var_dump($temp->getPathName()); // php://temp
1 dan
$temp = new SplTempFileObject();
$temp->fwrite('Hello World');

var_dump($temp->getPathName()); // php://temp
2 saat mencantumkan file, Anda dapat menggunakan metode
$temp = new SplTempFileObject();
$temp->fwrite('Hello World');

var_dump($temp->getPathName()); // php://temp
3 untuk melewatkan titik saat melintasi

Hello World
I love PHP
PHP is amazing
SPL is great


PHP is the most used server-side programming language.
0

Anda dapat melihat metode yang tersedia untuk

$info = new SplFileInfo('php.txt');
if ($info->isFile()) {
    echo $info->getRealPath();
}
_9 dengan memanggil
$temp = new SplTempFileObject();
$temp->fwrite('Hello World');

var_dump($temp->getPathName()); // php://temp
5 atau memeriksa dokumentasi PHP

Hello World
I love PHP
PHP is amazing
SPL is great


PHP is the most used server-side programming language.
1

Terkadang, Anda perlu memfilter file dengan menyimpannya ke dalam array baru

Hello World
I love PHP
PHP is amazing
SPL is great


PHP is the most used server-side programming language.
2

Karena sifat iterator, baris terakhir tidak akan mengembalikan apa pun, untuk memperbaikinya, Anda perlu mengkloning

$temp = new SplTempFileObject();
$temp->fwrite('Hello World');

var_dump($temp->getPathName()); // php://temp
6

Hello World
I love PHP
PHP is amazing
SPL is great


PHP is the most used server-side programming language.
3

FilesystemIterator

$temp = new SplTempFileObject();
$temp->fwrite('Hello World');

var_dump($temp->getPathName()); // php://temp
_7 adalah versi yang disempurnakan dari
$info = new SplFileInfo('php.txt');
if ($info->isFile()) {
    echo $info->getRealPath();
}
9

Faktanya,

$temp = new SplTempFileObject();
$temp->fwrite('Hello World');

var_dump($temp->getPathName()); // php://temp
_7 memperluas
$info = new SplFileInfo('php.txt');
if ($info->isFile()) {
    echo $info->getRealPath();
}
9 dan menambahkan beberapa fitur lagi

  • $file = new SplTempFileObject();
    // csv processing here
    $file->rewind();
    header('Content-Type: text/csv');
    header('Content-Disposition: attachmenet; filename=mycsvfile.csv');
    $file->fpassthru();
    
    1. opsi yang dapat dikonfigurasi
  • Mengembalikan
    echo $file->getSize();
    
    _5 sebagai objek file alih-alih
    $info = new SplFileInfo('php.txt');
    if ($info->isFile()) {
        echo $info->getRealPath();
    }
    
    9
  • Menggunakan jalur file sebagai pasangan kunci/nilai

Mari kita lihat beberapa contoh

Hello World
I love PHP
PHP is amazing
SPL is great


PHP is the most used server-side programming language.
4

Anda mungkin ingin menggunakan nama file alih-alih jalur lengkap sebagai kuncinya

Hello World
I love PHP
PHP is amazing
SPL is great


PHP is the most used server-side programming language.
5

Jika Anda membuang

$temp = new SplTempFileObject();
$temp->fwrite('Hello World');

var_dump($temp->getPathName()); // php://temp
6 Anda dapat melihat bahwa itu adalah tipe
echo $file->getSize();
5 dan bukan
$info = new SplFileInfo('php.txt');
if ($info->isFile()) {
    echo $info->getRealPath();
}
9

Hello World
I love PHP
PHP is amazing
SPL is great


PHP is the most used server-side programming language.
6
Hello World
I love PHP
PHP is amazing
SPL is great


PHP is the most used server-side programming language.
7

Tidak seperti

$info = new SplFileInfo('php.txt');
if ($info->isFile()) {
    echo $info->getRealPath();
}
_9 Anda tidak perlu mengkloning
$temp = new SplTempFileObject();
$temp->fwrite('Hello World');

var_dump($temp->getPathName()); // php://temp
6 saat menyimpannya ke dalam array

Hello World
I love PHP
PHP is amazing
SPL is great


PHP is the most used server-side programming language.
8

Saya sangat menganjurkan Anda untuk menggunakan SPL daripada beberapa pustaka komposer kecuali pustaka komposer menyediakan sesuatu yang sulit untuk diterapkan seperti SymfonyFinder

Bagaimana cara mendapatkan nama file di PHP?

Nama file path lengkap saat ini disimpan dalam variabel sistem $_SERVER['PHP_SELF']. Anda dapat menggunakan function basename() untuk mendapatkan nama file tanpa path; . .

Bagaimana cara mendapatkan nama file dari URL di PHP?

Keluaran. Jika Anda ingin mendapatkan nama file dari URL atau jalur di PHP, Anda dapat menggunakan fungsi basename() di PHP . Ini akan mengembalikan nama file file ketika URL diteruskan sebagai parameter.