PHP - Razčlanjivanje direktorija


Rad sa direktorijima u PHP-u

U prethodnoj lekciji naučili ste kako raditi s datotekama u PHP-u. Slično tome, PHP vam takođe omogućava rad s direktorijima na fajl sistemu, na primjer, možete otvoriti direktorij i čitati njegov sadržaj, kreirati ili izbrisati direktorij, navesti sve datoteke u direktorijumu itd.



Kreiranje novog direktorija

Možete stvoriti novi i prazan direktorij pozivanjem PHP funkcije mkdir() sa putanjom i imenom direktorija koji će se kreirati, kao što je prikazano u primjeru:

<?php
// Putanja direktorija
$dir = "testdir";
 
// Provjerite postojanje direktorija
if(!file_exists($dir)){
    // Pokušaj stvaranja direktorija
    if(mkdir($dir)){
        echo "Direktorij je uspješno kreiran.";
    } else{
        echo "ERROR: Nije moguće kreirati direktorij.";
    }
} else{
    echo "ERROR: Direktorij već postoji.";
}
?>

Da bi funkcija mkdir() funkcionisala, nadređeni direktoriji u parametru puta direktorija moraju već postojati, na primjer, ako ste stazu direktorija naveli kao testdir / subdir, onda testdir mora postojati, inače će PHP generisati grešku.



Kopiranje datoteka s jedne lokacije na drugu

Možete kopirati datoteku s jedne lokacije na drugu pozivanjem PHP funkcije copy() s izvornom i odredišnom putanjom datoteke kao argumentima. Ako odredišna datoteka već postoji, biće prepisana. Evo primjera koji kreira kopiju datoteke "example.txt" unutar mape sigurnosnih kopija.

<?php
// Putanja izvorne datoteke
$file = "example.txt";
 
// Putanja odredišne datoteke
$newfile = "backup/example.txt";
 
// Provjerite postojanje datoteke
if(file_exists($file)){
    // Pokušaj kopiranja datoteke
    if(copy($file, $newfile)){
        echo "Datoteka je uspješno kopirana.";
    } else{
        echo "ERROR: Datoteka se ne može kopirati.";
    }
} else{
    echo "ERROR: Datoteka ne postoji.";
}
?>

Da bi ovaj primjer radio, ciljni direktorij koji je sigurnosna kopija i izvorna datoteka, tj. "example.txt", moraju već postojati; u suprotnom će PHP generisati grešku.



Popis svih datoteka u direktoriju

Funkciju PHP scandir() možete koristiti za popis datoteka i direktorija unutar navedene putanje. Sada ćemo stvoriti prilagođenu funkciju koja će rekurzivno navesti sve datoteke u direktorijumu koristeći PHP. Ova skripta će biti korisna ako radite s duboko ugniježđenom strukturom direktorija.

<?php
// Definišite funkciju za izlaz datoteka u direktoriju
function outputFiles($path){
    // Provjeri da li direktorij postoji ili ne
    if(file_exists($path) && is_dir($path)){
        // Skenirajte datoteke u ovom direktoriju
        $result = scandir($path);
        
        // Filtrirajte trenutni (.) i nadređeni (..) direktoriji
        $files = array_diff($result, array('.', '..'));
        
        if(count($files) > 0){
            // Prelistajte vraćeni niz
            foreach($files as $file){
                if(is_file("$path/$file")){
                    // Prikaži ime datoteke
                    echo $file . "<br>";
                } else if(is_dir("$path/$file")){
                    // Rekurzivno pozovite funkciju ako su pronađeni direktoriji
                    outputFiles("$path/$file");
                }
            }
        } else{
            echo "ERROR: U direktoriju nije pronađena nijedna datoteka.";
        }
    } else {
        echo "ERROR: Direktorij ne postoji.";
    }
}
 
// Pozovite funkciju
outputFiles("mydir");
?>


Navođenje svih datoteka određenog tipa

Dok radite na strukturi direktorija i datoteka, ponekad ćete možda trebati otkriti određene vrste datoteka unutar direktorija, na primjer, navesti samo .text ili .png datoteke itd. To možete lako učiniti pomoću funkcije PHP glob(), koja otkriva datotekama na osnovu uzorka. PHP kod u sljedećem primjeru pretražiće direktorij dokumenata i navesti sve datoteke s ekstenzijom .text. Neće pretraživati poddirektorijume.

<?php
/* Pretražite direktorij i prođite kroz njega,
vrati niz koji sadrži odgovarajuće datoteke */
foreach(glob("documents/*.txt") as $file){
    echo basename($file) . " (size: " . filesize($file) . " bytes)" . "<br>";
}
?>

Funkcija glob() takođe se može koristiti za pronalaženje svih datoteka u direktoriju ili njegovim poddirektorijima. Funkcija definisana u sljedećem primjeru rekurzivno će navesti sve datoteke unutar direktorija, baš kao što smo to učinili u prethodnom primjeru s funkcijom scandir().

<?php
// Definišite funkciju za izlaz datoteka u direktoriju
function outputFiles($path){
    // Provjeri da li direktorij postoji ili ne
    if(file_exists($path) && is_dir($path)){
        // Pretražite datoteke u ovom direktorijumu
        $files = glob($path ."/*");
        if(count($files) > 0){
            // Prelistajte vraćeni niz
            foreach($files as $file){
                if(is_file("$file")){
                    // Prikaži samo ime datoteke
                    echo basename($file) . "<br>";
                } else if(is_dir("$file")){
                    // Rekurzivno pozovite funkciju ako su pronađeni direktoriji
                    outputFiles("$file");
                }
            }
        } else{
            echo "ERROR: U direktoriju nije pronađena takva datoteka.";
        }
    } else {
        echo "ERROR: Direktorij ne postoji.";
    }
}
 
// Pozovite funkciju
outputFiles("mydir");
?>