PHP - Fajl (file) sistem


Rad sa datotekama u PHP-u

Budući da je PHP programski jezik na strani servera, on vam omogućava rad sa datotekama i direktorijima pohranjenim na web serveru. U ovoj lekciji naučićete kako kreirati, pristupati datotekama i upravljati njima na vašem web serveru pomoću funkcija sistema PHP datoteka.



Otvaranje datoteke pomoću PHP funkcije fopen()

Da biste radili s datotekom, prvo je morate otvoriti. PHP funkcija fopen() koristi se za otvaranje datoteke. Osnovna sintaksa ove funkcije može se napisati kao:

fopen(filename, mode)

Prvi parametar prosljeđen fopen() navodi ime datoteke koju želite otvoriti, a drugi parametar navodi na koji nači treba otvoriti datoteku. Na primjer:

<?php
$handle = fopen("data.txt", "r");
?>
Pogledajmo kako koristiti primjer u praksi:

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Otvranje datoteka u PHP-u</title>
</head>
<body>

<?php
$handle = fopen("data.txt", "r") or die("ERROR: Nije moguće otvoriti datoteku.");
if($handle){
    echo "Datoteka je uspješno otvorena.";
  
  // Zatvori file handle
    fclose($handle);
}
?>

</body>
</html>

Datoteka se može otvoriti na jedan od sljedećih načina:

Način rada Šta radi
r Otvora datoteku samo za čitanje.
r+ Otvora datoteku za čitanje i pisanje.
w Otvora datoteku samo za pisanje i briše sadržaj datoteke. Ako datoteka ne postoji, PHP će je pokušati stvoriti.
w+ Otvora datoteku za čitanje i pisanje i briše sadržaj datoteke. Ako datoteka ne postoji, PHP će je pokušati stvoriti.
a Dodati. Otvara datoteku samo za pisanje. Čuva sadržaj datoteke pisanjem na kraj datoteke. Ako datoteka ne postoji, PHP će je pokušati stvoriti.
a+ Pročitajte / dodajte. Otvara datoteku za čitanje i pisanje. Čuva sadržaj datoteke pisanjem na kraj datoteke. Ako datoteka ne postoji, PHP će je pokušati stvoriti.
x Otvora datoteku samo za pisanje. Vraća FALSE i generiše grešku ako datoteka već postoji. Ako datoteka ne postoji, PHP će je pokušati stvoriti.
x+ Otvora datoteku za čitanje i pisanje; u suprotnom ima isto ponašanje kao 'x'.

Ako pokušate otvoriti datoteku koja ne postoji, PHP će generisati poruku upozorenja. Dakle, da biste izbjegli ove poruke o greškama, uvijek biste trebali primijeniti jednostavnu provjeru postoji li datoteka ili direktorij prije nego što im pokušate pristupiti, pomoću funkcije PHP file_exists().

<?php
$file = "data.txt";
 
// Provjerite da li postoji datoteka
if(file_exists($file)){
    // pokušaj otvoriti datoteku
    $handle = fopen($file, "r");
} else{
    echo "ERROR: Datoteka ne postoji.";
}
?>
Pogledajmo kako koristiti primjer u praksi:

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Provjerava postoji li datoteka u PHP-u ili ne</title>
</head>
<body>

<?php
$file = "data.txt";
 
// Provjerite da li postoji datoteka
if(file_exists($file)){
    echo "Datoteka $file postoji." . "<br>";
    
    // Pokušaj otvaranja datoteke
    $handle = fopen($file, "r") or die("ERROR: Nije moguće otvoriti datoteku.");
    if($handle){
        echo "Datoteka je uspješno otvorena.";
        
        // Zatvaranje file handle
        fclose($handle);
    }
} else{
    echo "ERROR: Datoteka $file ne postoji.";
}
?>

</body>
</html>


Zatvaranje datoteke pomoću PHP funkcije fclose()

Nakon što završite s radom datoteke, treba je zatvoriti. Funkcija fclose() koristi se za zatvaranje datoteke, kao što je prikazano u sljedećem primjeru:

<?php
$file = "data.txt";
 
// Provjerite postojanje datoteke
if(file_exists($file)){
    // Otvorite datoteku za čitanje
    $handle = fopen($file, "r") or die("ERROR: Nije moguće otvoriti datoteku.");
        
    /* Neki kod koji treba izvršiti */
        
    // Zatvaranje file handle
    fclose($handle);
} else{
    echo "ERROR: Datoteka ne postoji.";
}
?>
Pogledajmo kako koristiti primjer u praksi:

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Zatvaranje datoteke u PHP-u</title>
</head>
<body>

<?php
$file = "data.txt";
 
// Provjerite postojanje datoteke
if(file_exists($file)){
    // Otvorite datoteku za čitanje
    $handle = fopen($file, "r") or die("ERROR: Nije moguće otvoriti datoteku.");
    if($handle){
        echo "Datoteka je uspješno otvorena." . "<br>";
    }
        
    echo "Sada zatvaramo datoteku." . "<br>";
        
    // Zatvaranje file handle
    if(fclose($handle)){
        echo "Datoteka je uspješno zatvorena.";
    }
} else{
    echo "ERROR: Datoteka ne postoji.";
}
?>

</body>
</html>


Čitanje iz datoteka s PHP funkcijom fread()

Sad kad ste shvatili kako otvarati i zatvarati datoteke. U sljedećem ćete dijelu naučiti kako čitati podatke iz datoteke. PHP ima nekoliko funkcija za čitanje podataka iz datoteke. Jednom operacijom možete čitati od samo jednog znaka do cijele datoteke.



Čitanje fiksnog broja znakova

Funkcija fread() može se koristiti za čitanje određenog broja znakova iz datoteke. Osnovna sintaksa ove funkcije može se napisati kao:

fread(file handle, length in bytes)

Ova funkcija uzima dva parametra - obrađivač datoteke i broj bajtova za čitanje. Sljedeći primjer čita 20 bajtova iz datoteke "data.txt", uključujući razmake. Pretpostavimo da datoteka "data.txt" sadrži odlomak teksta "Brza smeđa lisica preskače lijenog psa."

<?php
$file = "data.txt";
 
// Provjerite postojanje datoteke
if(file_exists($file)){
    // Otvorite datoteku za čitanje
    $handle = fopen($file, "r") or die("ERROR: Nije moguće otvoriti datoteku.");
        
    // Pročitajte fiksni broj bajtova iz datoteke
    $content = fread($handle, "20");
        
    // Zatvaranje file handle
    fclose($handle);
        
    // Prikažite sadržaj datoteke
    echo $content;
} else{
    echo "ERROR: Datoteka ne postoji.";
}
?>
Pogledajmo kako koristiti primjer u praksi:

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Čitanje fiksnog broja bajtova iz datoteke u PHP-u</title>
</head>
<body>

<?php
$file = "data.txt";
 
// Provjerite postojanje datoteke
if(file_exists($file)){
    // Otvorite datoteku za čitanje
    $handle = fopen($file, "r") or die("ERROR: Nije moguće otvoriti datoteku.");
        
    // Pročitajte fiksni broj bajtova iz datoteke
    $content = fread($handle, "20");
        
    // Zatvaranje file handle
    fclose($handle);
        
    // Prikažite sadržaj datoteke
    echo $content;
} else{
    echo "ERROR: Datoteka ne postoji.";
}
?>

</body>
</html>


Čitanje cijelog sadržaja datoteke

Funkcija fread() može se koristiti zajedno s funkcijom filesize() za čitanje cijele datoteke odjednom. Funkcija filesize() vraća veličinu datoteke u bajtovima.

<?php
$file = "data.txt";
 
// Provjerite postojanje datoteke
if(file_exists($file)){
    // Otvorite datoteku za čitanje
    $handle = fopen($file, "r") or die("ERROR: Nije moguće otvoriti datoteku.");
        
    // Čitanje cijele datoteke
    $content = fread($handle, filesize($file));
        
    // Zatvaranje file handle
    fclose($handle);
        
    // Prikažite sadržaj datoteke
    echo $content;
} else{
    echo "ERROR: Datoteka ne postoji.";
}
?>
Pogledajmo kako koristiti primjer u praksi:

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Čitanje cijelog sadržaja datoteke u PHP-u</title>
</head>
<body>

<?php
$file = "data.txt";
 
// Provjerite postojanje datoteke
if(file_exists($file)){
    // Otvorite datoteku za čitanje
    $handle = fopen($file, "r") or die("ERROR: Nije moguće otvoriti datoteku.");
        
    // Čitanje cijele datoteke
    $content = fread($handle, filesize($file));
        
    // Zatvaranje file handle
    fclose($handle);
        
    // Prikažite sadržaj datoteke
    echo $content;
} else{
    echo "ERROR: Datoteka ne postoji.";
}
?>

</body>
</html>

Cjelokupan sadržaj datoteke u PHP-u najlakše je pročitati pomoću funkcije readfile(). Ova funkcija vam omogućava čitanje sadržaja datoteke bez potrebe za otvaranjem. Sljedeći primjer će generisati isti izlaz kao gore navedeni primjer:

<?php
$file = "data.txt";
 
// Provjerite postojanje datoteke
if(file_exists($file)){
    // Čita i ispisuje cijelu datoteku
    readfile($file) or die("ERROR: Nije moguće otvoriti datoteku.");
} else{
    echo "ERROR: Datoteka ne postoji.";
}
?>

Drugi način čitanja cijelog sadržaja datoteke bez potrebe za otvaranjem je pomoću funkcije file_get_contents(). Ova funkcija prihvata ime i putanju do datoteke i čita cijelu datoteku. Evo primjera:

<?php
$file = "data.txt";
 
// Provjerite postojanje datoteke
if(file_exists($file)){
    // Čitanje cijele datoteke u string
    $content = file_get_contents($file) or die("ERROR: Nije moguće otvoriti datoteku.");
        
    // Prikažite sadržaj datoteke
    echo $content;
} else{
    echo "ERROR: Datoteka ne postoji.";
}
?>

Još jedan način čitanja cjelokupnih podataka iz datoteke je PHP-ova file() funkcija. Radi sličan posao funkciji file_get_contents(), ali vraća sadržaj datoteke kao string linija, a ne kao jedan string. Svaki element vraćenog niza odgovara liniji u datoteci. Da biste obradili podatke o datoteci, trebate prelistati niz pomoću foreach petlje. Evo primjera koji datoteku čita u niz, a zatim prikazuje pomoću petlje:

<?php
$file = "data.txt";
 
// Provjerite postojanje datoteka
if(file_exists($file)){
    // Čitanje cijele datoteke u niz
    $arr = file($file) or die("ERROR: Nije moguće otvoriti datoteku.");
    foreach($arr as $line){
        echo $line;
    }
} else{
    echo "ERROR: Datoteka ne postoji.";
}
?>
Pogledajmo kako koristiti primjer u praksi:

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Dobijanje cijelog sadržaj datoteke kao niz u PHP-u</title>
</head>
<body>

<?php
$file = "data.txt";
 
// Provjerite postojanje datoteka
if(file_exists($file)){
    // Čitanje cijele datoteke u niz
    $arr = file($file) or die("ERROR: Nije moguće otvoriti datoteku.");
    foreach($arr as $line){
        echo $line;
    }
} else{
    echo "ERROR: Datoteka ne postoji.";
}
?>

</body>
</html>


Zapisivanje datoteka pomoću PHP funkcije fwrite()

Slično tome, podatke možete zapisati u datoteku ili dodati postojećoj datoteci pomoću funkcije PHP fwrite(). Osnovna sintaksa ove funkcije može se napisati kao:

fwrite(file handle, string)

Funkcija fwrite() uzima dva parametra - file handle i string podataka koji se trebaju zapisati, kao što je prikazano u sljedećem primjeru:

<?php
$file = "note.txt";
    
// String podataka koji se zapisuju
$data = "Brza smeđa lisica preskače lijenog psa.";
    
// Otvorite datoteku za pisanje
$handle = fopen($file, "w") or die("ERROR: Nije moguće otvoriti datoteku.");
    
// Napišite podatke u datoteku
fwrite($handle, $data) or die ("ERROR: Nije moguće napisati datoteku.");
    
// Zatvaranje file handle
fclose($handle);
    
echo "Podaci su uspješno zapisani u datoteku.";
?>

U gornjem primjeru, ako datoteka "note.txt" ne postoji, PHP će je automatski stvoriti i upisuje podatke. Ali, ako datoteka "note.txt" već postoji, PHP će izbrisati sadržaj ove datoteke, ako ga ima, prije pisanja novih podataka, međutim ako samo želite dodati datoteku i sačuvati postojeći sadržaj, samo koristite način a umjesto w u gornjem primjeru.

Alternativni način je upotreba funkcije file_put_contents(). Funkcija file_get_contents() pruža jednostavan način zapisivanja podataka u datoteku bez potrebe za otvaranjem. Ova funkcija prihvata ime i putanju do datoteke zajedno s podacima koji se zapisuju u datoteku. Evo primjera:

<?php
$file = "note.txt";
    
// String podataka koji se zapisuju
$data = "Brza smeđa lisica preskače lijenog psa.";
    
// Napišite podatke u datoteku
file_put_contents($file, $data) or die("ERROR: Nije moguće napisati datoteku.");
    
echo "Podaci su uspješno zapisani u datoteku.";
?>

Ako datoteka navedena u funkciji file_put_contents() već postoji, PHP će je zamijeniti prema zadanim podešavanjima. Ako želite sačuvati sadržaj datoteke, možete prosljediti posebnu zastavicu FILE_APPEND kao treći parametar funkciji file_put_contents(). Jednostavno će dodati nove podatke u datoteku, umjesto da ih prepiše. Evo primjera:

<?php
$file = "note.txt";
    
// String podataka koji se zapisuju
$data = "Brza smeđa lisica preskače lijenog psa.";
    
// Napišite podatke u datoteku
file_put_contents($file, $data, FILE_APPEND) or die("ERROR: Nije moguće napisati datoteku.");
    
echo "Podaci su uspješno zapisani u datoteku.";
?>


Preimenovanje datoteka s PHP funkcijom rename()

Možete preimenovati datoteku ili direktorij pomoću PHP funkcije rename(), na sljedeći način:

<?php
$file = "file.txt";
 
// Provjerite postojanje datoteke
if(file_exists($file)){
    // Pokušaj preimenovanja datoteke
    if(rename($file, "newfile.txt")){
        echo "Datoteka je uspješno preimenovana.";
    } else{
        echo "ERROR: Datoteka se ne može preimenovati.";
    }
} else{
    echo "ERROR: Datoteka ne postoji.";
}
?>


Uklanjanje datoteka pomoću PHP funkcije unlink()

Možete izbrisati datoteke ili direktorije koristeći PHP funkciju unlink(), na sljedeći način:

<?php
$file = "note.txt";
 
// Provjerite postojanje datoteke
if(file_exists($file)){
    // Pokušaj brisanja datoteke
    if(unlink($file)){
        echo "Datoteka je uspješno uklonjena.";
    } else{
        echo "ERROR: Datoteka se ne može ukloniti.";
    }
} else{
    echo "ERROR: Datoteka ne postoji.";
}
?>


PHP Filesystem funkcije

Sljedeća tabela daje pregled nekih drugih korisnih funkcija PHP sistema datoteka koje se mogu koristiti za dinamičko čitanje i pisanje datoteka.

Funkcija Opis
fgetc() Čita po jedan znak.
fgets() Čita po jedan red.
fgetcsv() Čita red vrijednosti odvojenih zarezom.
filetype() Vraća tip datoteke.
feof() Provjerava da li je postignut kraj datoteke.
is_file() Provjerava da li je datoteka uobičajena.
is_dir() Provjerava da li je datoteka direktorij.
is_executable() Provjerava da li je datoteka izvršna.
realpath() Vraća kanonizirani apsolutni naziv putanje.
rmdir() Uklanja prazan direktorij.