naslovna
programiranje
HTML
CSS
PHP
MySQL
jQuery
Osnove
Polja
Petlje
Funkcije
Forme

Potreba za korištenjem neke funkcije može se pojaviti na više mjesta, i to u odvojenim skriptama.

Da se funkcije ne bi morale ponovno pisati za svaku skriptu koja ih rabi, moguće ih je napisati u zasebnoj datoteci, i onda se ta datoteka uključuje u kod skripte koja treba pozvati funkciju.

 

 

Da bi se funkcija pozvala u nekoj drugoj skripti, potrebno je upotrebom naredbe include u kod trenutne skripte uključiti datoteku u kojoj se funkcija nalazi:

 

include("mnozenje.php");
$c = Mnozi(3, 4);

 

 

Datoteka se može uključiti i upotrebom naredbe require:

 

require("mnozenje.php");
$c = Mnozi(3, 4);

 

 

Razlika između naredbi include i require je u načinu reagiranja na pogreške.

 

Ako se dogodi pogreška prilikom izvršavanja naredbi iz datoteke uključene pomoću naredbe include, ispisat će se poruka o pogrešci, ali će skripta nastaviti s izvođenjem.

Kod naredbe require u takvom slučaju bi se prekinulo i izvršavanje skripte u koju je datoteka uključena.


Upotreba naredbi include i require nije ograničena samo na uključivanje datoteka koje sadrže funkcije.

Pomoću njih moguće je uključiti datoteke koje sadrže PHP naredbe, HTML kod ili običan tekst. Bitno je zapamtiti da će sadržaj uključene datoteke biti umetnut u skriptu na mjesto poziva naredbe include, odnosno require.

fopen

 

Da bi se s datotekom obavila neka akcija, najprije ju je potrebno otvoriti. U tu svrhu služi funkcija fopen.

 

 

Njen poziv izgleda ovako:

 

$datoteka = fopen ("vjezbe/datoteka.txt","r");

 

 

Funkcija fopen vraća pokazivač na datoteku (file pointer, odnosno file handle).

Taj pokazivač (u gornjem primjeru varijabla $datoteka) je varijabla tipa resource, i sav daljnji rad s datotekom se odvija pomoću njega.

 


Prvi argument koji funkcija fopen prima je putanja do datoteke. Putanja do datoteke može biti apsolutna (potpuna putanja do datoteke, npr. "C:/www/D350/vjezbe/datoteka.txt" ili relativna (putanja u odnosu na mapu gdje se nalazi skripta, npr. "vjezbe/datoteka.txt").

Da bi skripte bez problema mogle raditi na različitim poslužiteljima, bolje je upotrebljavati relativne putanje.


Drugi argument funkcije je način rada s datotekom. Radi se o tekstualnoj konstanti koja opisuje koje će se akcije izvršavati nad datotekom. U gornjem primjeru koristi se način rada za čitanje ("r"), a svi načini rada su:

  • r - čitanje iz datoteke
  • r+ - čitanje i pisanje
  • w - pisanje (ako datoteka ne postoji, stvara se; postojeći sadrţaj se briše)
  • w+ - pisanje i čitanje (ako datoteka ne postoji, stvara se; postojeći sadrţaj se briše)
  • a - dodavanje u datoteku (postojeći sadrţaj se ne briše)
  • a+ - dodavanje i čitanje (postojeći sadrţaj se ne briše)
  • b - rad s binarnom datotekom; koristi se u kombinaciji s ostalim načinima (rb – čitanje iz binarne datoteke, wb+ - pisanje i čitanje u binarnu datoteku); potrebno rabiti samo na Windowsovim poslužiteljima

 

Nakon poziva funkcije fopen, potrebno je provjeriti je li otvaranje datoteke uspjelo.

Pogreška se može dogoditi u slučaju da datoteka ne postoji, putanja nije točno navedena, ili ako je dozvoljeno samo čitanje iz datoteke, a pokušava je se otvoriti u načinu rada za pisanje.

Provjera je li otvaranje datoteke uspjelo svodi se na provjeru je li vraćeni pokazivač prazan ili ne. Rad s datotekom treba nastaviti samo ako je datoteka uspješno otvorena.

 

if ($datoteka)
{
// rad s datotekom
}

 

fclose

 

Kad je rad s datotekom završen, potrebno ju je zatvoriti (opet radi štednje resursa poslužitelja).

Zatvaranje datoteke obavlja se pomoću funkcije fclose.

Ovoj se funkciji kao argument predaje pokazivač na datoteku, a primjer njenog poziva izgleda ovako:

 

fclose ($datoteka);

 

// otvaranje datoteke
$datoteka = fopen("Datoteka.txt", "r");
// provjera je li datoteka uspješno otvorena
if ($datoteka)
{
    // rad s datotekom
    // zatvaranje datoteke
    fclose($datoteka);
}

 

fread

 

Za čitanje iz datoteke može se koristiti funkcija fread.

 

$procitano = fread($datoteka, $duljina);

 

Funkcija fread kao argumente prima pokazivač na datoteku i duljinu niza koji se čita iz datoteke (u bajtovima).

 

 

fgets

 

Funkcija fgets omogućuje čitanje jednog retka iz datoteke:

 

$redak = fgets($datoteka);

 

 

fgetc

 

Funkcija fgetc prima pokazivač na datoteku a vraća pročitani znak.


Pokazivač na datoteku pamti trenutnu poziciju u datoteci koja se čitanjem pomoću funkcija fread, fgets i fgetc pomiče za zadani broj bajtova, jedan redak, odnosno jedan znak.

 

$znak = fgetc($datoteka);

 

 

feof

 

Provjera je li datoteka došla do kraja obavlja se pomoću funkcije feof. Ova funkcija prima pokazivač na datoteku a vraća vrijednost true ako je pokazivač datoteke na kraju datoteke.

fwrite

 

Za pisanje u datoteku koristi se funkcija fwrite.


Ova funkcija prima tri argumenta: pokazivač na datoteku, tekst koji treba upisati i duljinu teksta kojeg treba upisati (u bajtovima).

Duljina je opcionalni argument – ako se ne navede, u datoteku se zapisuje sav predani tekst, a ako se navede, zapisuje se prvih toliko bajtova teksta.

 


Zapis nekog niza znakova u datoteku izgledat će ovako:

 

fwrite($datoteka, "Ovo je niz znakova.");

 


Ako se niz znakova želi u datoteku zapisati kao redak, potrebno mu je na kraj dodati znak za novi redak (" "):

Datoteka se može poslati s korisnikovog na poslužiteljsko računalo pomoću obrasca.

Za to služi polje za odabir datoteke, odnosno element obrasca input, čiji je atribut type postavljen na vrijednost file. Također, samom je obrascu potrebno postaviti atribut enctype na vrijednost "multipart/form-data", a za slanje podataka se mora koristiti metoda POST.

 

<form method="POST" action="Skripta.php" enctype="multipart/form-data">
    <input type="file" name="datoteka"/>
</form>


Na poslužiteljskoj strani, poslanoj datoteci i informacijama o njoj može se pristupiti preko polja $_FILES, slično kao što se drugim podacima upisanim u obrazac može pristupiti preko polja $_GET, odnosno $_POST.


Polje $_FILES je dvodimenzionalno polje, u kojem prva dimenzija označava naziv polja za odabir (atribut name) budući da ih može biti više unutar istog obrasca.

Druga dimenzija se odnosi na pojedinu vrijednost vezanu uz datoteku.

 

 

Polje $_FILES (ako je naziv polja za odabir "datoteka") ima ove elemente:

 

$_FILES["datoteka"]["name"] naziv datoteke na korisnikovu računalu
$_FILES["datoteka"]["type"] tip datoteke (u MIME formatu)
$_FILES["datoteka"]["size"] veličina datoteke
$_FILES["datoteka"]["tmp_name"] privremeni naziv (putanja) datoteke na poslužitelju
$_FILES["datoteka"]["error"] kod greške (ako je došlo do greške); 0 ako je sve u redu

 

 

Koristeći se poljem $_FILES, ovako bi se u skripti koja obrađuje poslane podatke dohvatili naziv i veličina datoteke:

 

$imeDatoteke = $_FILES["datoteka"]["name"];
$velicina = $_FILES["datoteka"]["size"];

 

Provjera je li korisnik u obrascu uopće odabrao datoteku, može se izvršiti provjerom postoji li u polju $FILES element za odgovarajuće polje za odabir. Ako ne postoji element $FILES["datoteka"]["name"], datoteka nije poslana.

 

if ($_FILES["datoteka"]["name"])
{
// spremi poslanu datoteku
}

 

 

Također, uputno je provjeriti je li se dogodila greška prilikom slanja pa će potpunija provjera izgledati ovako:

 

if ($_FILES["datoteka"]["name"] && $_FILES["datoteka"]["size"] != 0)
    {
        // spremi poslanu datoteku
    }