PHP greške

PHP greške i kako da ih izbegnete

PHP greške se prirodno mogu javiti tokom pisanja PHP koda i nisu rezervisane samo za početnike. Čak i iskusniji PHP developeri nekada naprave grešku koju kasnije nije lako otkriti u kodu. Zato ćemo u ovom tekstu objasniti najčešće PHP greške, sa njihovim primerima i rešenjima, ali i dati preporuke i primere iz dobre prakse, kako bi vaš PHP kod bio što čistiji i sa što manje grešaka.

Sintaksna greška (Parse error)

Sintaksne greške nastaju kada PHP parser naiđe na sintaksu koja nije u skladu sa PHP pravilima. Ovo može biti posledica nekoliko faktora, kao što su nezatvoreni navodnici, zagrade, ili zaboravljene tačke-zarezi. Sintaksna greška je u suštini „gramatička greška“ u kodu i dovodi do trenutnog zaustavljanja skripte.

Primer greške:

<?php
echo "Hello world; // Nedostaje zatvoreni navodnik

Izlaz:

Parse error: syntax error, unexpected end of file in /path/to/file.php on line 2

Da biste ispravili sintaksne greške, potrebno je da pažljivo pregledate strukturu koda i osigurate da su svi elementi pravilno zatvoreni ili napisani.

  • Koristite alate kao što su PHP_CodeSniffer ili PHPLint za otkrivanje i automatsku identifikaciju sintaksnih grešaka.
  • Proverite da li su sve zagrade i navodnici zatvoreni kako treba, jer su nezatvoreni elementi najčešći uzrok sintaksnih grešaka.
  • Pregledajte sve prazne linije i razmake, ponekad i najmanji slučajni karakter ili dodatni razmak može da izazove grešku u kodu.

Rešenje:

<?php
echo "Hello world";

Da biste izbegli sinatksnu grešku koristite moderne editore koda ili IDE-ove poput PHPStorm ili VS Code sa ekstenzijama za PHP, jer oni omogućavaju brzo otkrivanje sintaksnih grešaka i daju povratnu informaciju u realnom vremenu.

U PHPStorm-u možete da omogućite automatsku proveru sintakse tokom kucanja:
1. Idite na File > Settings > Editor > Inspections.
2. Aktivirajte opciju PHP Code Quality Inspection.

Sa ovim podešavanjem editor će automatski označavati greške u sintaksi tokom unosa, omogućavajući vam brzo ispravljanje pre pokretanja koda.

PHPStorm smo predstavili u našem tekstu Popularni alati za PHP development, pa ukoliko vas zanima više o ovom odličnom alatu, preporučujemo da pročitate tekst.

Failed to open stream: No such file or directory

Ova greška se javlja kada PHP ne može da pronađe datoteku koju je potrebno uključiti u skriptu ili nema dozvolu da joj pristupi. Do ove greške obično dolazi pri korišćenju funkcija kao što su include(), require(), fopen() ili file_get_contents(). Greška ukazuje na to da je putanja do fajla neispravna ili da fajl jednostavno ne postoji.

Primer PHP greške:

<?php
include("nepostojeci_fajl.php");

Izlaz:

Warning: include(nepostojeci_fajl.php): Failed to open stream: No such file or directory in /path/to/file.php on line 2

Da biste izbegli ovu grešku, proverite da li fajl zaista postoji u naznačenoj putanji, i da li PHP ima prava za pristup fajlu.

  • Proverite putanju sa funkcijom realpath() da biste utvrdili postoji li fajl na očekivanoj lokaciji:
$filePath = realpath("nepostojeci_fajl.php");
echo $filePath ?: "Fajl nije pronađen!";
  • Proverite dozvole za pristup pomoću is_readable() kako biste bili sigurni da skripta može pročitati fajl:
if (is_readable("nepostojeci_fajl.php")) {
include("nepostojeci_fajl.php");
} else {
echo "Fajl nije dostupan za čitanje.";
}

Da biste izbegli ovu grešku koristite apsolutne putanje za datoteke umesto relativnih. To povećava stabilnost koda i smanjuje mogućnost grešaka, pogotovo kada se radi u većim projektima.

Koristite __DIR__ za generisanje apsolutne putanje, što pomaže u lociranju fajla bez obzira na trenutni radni direktorijum.

<?php
include(__DIR__ . "/fajl.php");

Ovaj način osigurava da PHP uvek zna tačnu lokaciju fajla, čak i u složenijim direktorijumskim strukturama.

Cannot redeclare function

Ova greška se javlja kada funkcija bude definisana više puta u istom fajlu ili u više uključenih fajlova. PHP ne dopušta višestruko deklarisanje funkcija sa istim imenom unutar iste skripte, što može da prouzrokuje zaustavljanje programa.

Primer PHP greške:

<?php 
function prikaziPoruku() { 
echo "Pozdrav!"; 
} 

function prikaziPoruku() {
 echo "Dobar dan!"; 
}

Izlaz:

Fatal error: Cannot redeclare prikaziPoruku() in /path/to/file.php on line 5

Izbegavajte višestruko definisanje funkcija tako što ćete uključivati fajlove sa include_once ili require_once, ili proveriti da li funkcija već postoji.

  • Koristite include_once ili require_once za učitavanje fajlova sa funkcijama, kako biste izbegli višestruko uključivanje:
include_once("fajl_sa_funkcijom.php");
  • Proverite da li funkcija postoji pre njene deklaracije, kako biste izbegli redefinisanje:
if (!function_exists('prikaziPoruku')) {
function prikaziPoruku() {
echo "Pozdrav!";
}
}

Kako biste izbegli ovu grešku, u većim projektima preporučuje se korišćenje objektnog programiranja (OOP) i organizovanje funkcija u klase, što smanjuje rizik od konflikta u nazivima.

Umesto globalnih funkcija, definišite metode unutar klasa kako biste održali bolju strukturu koda i izbegli konflikt:

<?php 
class Poruka { 
public static function prikazi() { 
echo "Pozdrav!"; 
} 
} 
// Poziv funkcije iz klase 
Poruka::prikazi();

Undefined constant

Ova greška se javlja kada pokušate da koristite konstantu koja nije prethodno definisana. U PHP-u, nedefinisane konstante se ne tretiraju kao promenljive, i kada PHP naiđe na nedefinisanu konstantu, on će prikazati obaveštenje ili upozorenje.

Primer PHP greške:

<?php
echo NEDEFINISANA_KONSTANTA;

Izlaz:

Notice: Use of undefined constant NEDEFINISANA_KONSTANTA - assumed 'NEDEFINISANA_KONSTANTA' in /path/to/file.php on line 2

Da biste izbegli ovu grešku osigurajte da su konstante definisane pre korišćenja i da ih pravilno pišete.

  • Definišite konstantu sa define() pre nego što je pozovete:
define("KONSTANTA", "Vrednost konstante");
echo KONSTANTA;
  • Proverite postojanje konstante pre upotrebe koristeći defined(), što omogućava sigurnije pozivanje konstanti:
if (defined("KONSTANTA")) {
echo KONSTANTA;
} else {
echo "Konstanta nije definisana.";
}

Uvek definišite konstante na početku skripte kako biste smanjili šanse za konfuziju i greške.

Grupišite sve konstante na početku glavnog fajla kako bi sve bile lako dostupne kroz ostatak koda:

<?php
define("BAZA", "moja_baza");
define("SERVER", "localhost");

Class not found

Greška „Class not found“ se javlja kada PHP ne može da pronađe definiciju klase koja je potrebna za instanciranje objekta. Obično je prouzrokovana neispravnim imenima, zaboravljenim uključivanjem fajlova ili nedostatkom odgovarajuće autoloading funkcionalnosti.

Primer PHP greške:

<?php
$obj = new NepostojecaKlasa();

Izlaz:

Fatal error: Uncaught Error: Class 'NepostojecaKlasa' not found in /path/to/file.php:2

Da biste izbegli ovu grešku pobrinite se da je datoteka koja sadrži klasu uključena u skriptu, ili koristite autoloading sistem za automatsko učitavanje klasa.

  • Koristite autoloading funkcionalnost kao što je Composer autoloader koji automatski uključuje potrebne klase kada su pozvane:
require 'vendor/autoload.php';
$obj = new MojaKlasa();
  • Koristite include ili require za eksplicitno uključivanje fajlova sa klasama, ukoliko ne koristite autoloader:
include("MojaKlasa.php");
$obj = new MojaKlasa();

Korišćenje PSR-4 autoloading standarda sa Composer-om omogućava automatsko učitavanje klasa u PHP projektima.

{
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
}

Nakon što postavite autoloading pravila, pokrenite composer dump-autoload, što omogućava automatsko učitavanje klasa iz direktorijuma src/.

Call to undefined function

Greška „Call to undefined function“ se javlja kada skripta pozove funkciju koja nije definisana, što se često dešava zbog tipografskih grešaka ili zaboravljenog uključivanja fajla sa definicijom funkcije.

Primer PHP greške:

<?php
izracunaj();

Izlaz:

Fatal error: Uncaught Error: Call to undefined function izracunaj() in /path/to/file.php:2

Da biste izbegli ovu grešku osigurajte da su sve funkcije učitane u skriptu pre nego što ih pozovete.

  • Proverite uključivanje fajla sa funkcijom: Pazite da fajl koji sadrži definiciju funkcije bude uključen.
include("funkcije.php");
izracunaj();
  • Koristite function_exists() za proveru pre pozivanja funkcije kako biste izbegli grešku:
if (function_exists('izracunaj')) {
izracunaj();
} else {
echo "Funkcija nije definisana.";
}
  • Koristite require_once: Ovo osigurava da se fajl uključi samo jednom, što smanjuje šanse za višestruko uključivanje.
require_once("funkcije.php");

Preporučuje se organizacija funkcija u module ili biblioteke koje možete uključivati kada su potrebne, čime se smanjuje rizik od grešaka.

Uncaught Error: Undefined variable

Ova greška nastaje kada se koristi promenljiva koja nije prethodno definisana ili inicijalizovana. PHP generiše obaveštenje ili upozorenje za nedefinisane promenljive.

Primer PHP greške:

<?php
echo $neDefinisanaPromenljiva;

Izlaz:

Notice: Undefined variable: neDefinisanaPromenljiva in /path/to/file.php on line 2

Da biste izbegli ovu grešku, inicijalizujte sve promenljive pre njihove upotrebe.

<?php
$neDefinisanaPromenljiva = ""; // Inicijalizacija promenljive
echo $neDefinisanaPromenljiva;

Koristite isset() ili empty() da proverite da li je promenljiva definisana pre nego što joj pristupite:

if (isset($neDefinisanaPromenljiva)) {
echo $neDefinisanaPromenljiva;
} else {
echo "Promenljiva nije definisana.";
}

Takođe, preporuka je da inicijalizujete sve promenljive na početku skripte, posebno u složenijim projektima sa više promenljivih, kako biste osigurali konzistentnost koda.

Too few arguments to function

Ova greška se javlja kada funkcija bude pozvana sa manjim brojem argumenata nego što je potrebno, ili sa argumentima koji nisu opcionalni.

Primer PHP greške:

<?php 
function saberi($a, $b) { 
return $a + $b; 
} 

echo saberi(5); // Nedostaje drugi argument

Izlaz:

Fatal error: Uncaught ArgumentCountError: Too few arguments to function saberi(), 1 passed and exactly 2 expected in /path/to/file.php:2

Da biste izbegli ovu grešku, dodajte podrazumevane vrednosti za argumente funkcije, ili proverite broj argumenata pre pozivanja.

  • Postavite podrazumevane vrednosti za argumente kada je to moguće, čime se omogućava fleksibilnost:
<?php 
function saberi($a, $b = 0) { 
return $a + $b; 
} 
echo saberi(5); // Rezultat: 5
  • Koristite func_get_args() za rukovanje promenljivim brojem argumenata:
<?php 
function saberiSve() { 
$argumenti = func_get_args(); // Dohvatanje svih prosleđenih argumenata 
return array_sum($argumenti); 
} 
echo saberiSve(5, 10, 15); // Rezultat: 30

Kada definišete funkcije koje prihvataju argumente, dodajte podrazumevane vrednosti ili koristite funkcije poput func_get_args() za veći broj argumenata.

Zaključak

Razumevanje uobičajenih PHP grešaka i načina za njihovo rešavanje je izuzetno važno za pisanje čistog i kvalitetnog PHP koda. Zato smo u ovom tekstu predstavili neke od najčešćih PHP grešaka na koje možete naići tokom svog rada sa PHP-om.

Primenom ovih saveta moći ćete da se fokusirate na suštinu vašeg koda, a ne na rešavanje grešaka. Takođe, usvajanjem ovih dobrih praksi, vaše PHP aplikacije biće bolje i efikasnije, a vi ćete brže napredovati kao PHP developer.

Na kraju, ukoliko vam je potreban monitoring vaših servera ili servisa, upoznajte se sa našom uslugom monitoringa koja vam omogućava da na vreme saznate i preduzmete potrebne korake, ukoliko registrujemo da može doći do problema u radu vaših servisa ili servera.

Slični postovi:

PHP biblioteke za optimizaciju web development-a
Laravel 11 – šta je novo?

Bez komentara

Оставите одговор

Ваша адреса е-поште неће бити објављена. Неопходна поља су означена *