Ostatnio przechadzając się po naszym forum zauważyłem, że wiele osób nie umie odczytać co parser php chciał nam przekazać wyrzucając błąd. Poniższy mini-artykulik ma za zadanie wyjaśnić wam jakie rodzaje błędów istnieją w tym języku.
Z reguły są to drobne pomyłki, literówki w poleceniach. Przykładem takiego błędu niech będzie takie polecenie:
echo 'Hello World': // Błędna linijka
?>
Błąd, który otrzymamy będzie brzmiał mniej więcej tak:
Parse error: syntax error, unexpected ':', expecting ',' or ';' in E:xampphtdocslol.php on line 2
Jak widzimy parser pokazuje nam na, której lini jest błąd (a w tym przypadku nawet jaki znak jest błędny).
Błąd, który pojawia się w momencie gdy staramy się użyć nie istniejącej funkcji. Często występuje przez literówki, które popełniamy przy używaniu/tworzeniu funkcji. Dla przykładu:
function hello(){
echo 'Hello World';
}
hallo(); // Błędna linijka
?>
Błąd wywołany przez ten kod może brzmieć tak:
Fatal error: Call to undefined function hallo() in E:xampphtdocslol.php on line 5
Błąd wyrzucany, gdy staramy się użyć nie istniejącej klasy. Jest on popełniany z podobnych powodów jak poprzedni błąd. Dla przykładu:
class hello{
var $hello;
function sayHello(){
$this->hello = "Hello World";
}
}
$obiekt = new hallo; // Błędna linijka
?>
Błąd wywołany przez ten kod może brzmieć tak:
Fatal error: Class 'hallo' not found in E:xampphtdocslol.php on line 8
Kolejny błąd, który dotyczy programowania obiektowego. Mówi on, iż skrypter próbuje odwołać się do zmiennej jak do obiektu. Dla przykładu:
class hello{
var $hello;
function sayHello(){
$this->hello = "Hello World";
}
}
$obiekt = new hello;
$obiekt->sayHello();
$obiekt->sayBye();
?>
Błąd, który zostanie nam zwrócony:
Fatal error: Call to undefined method hello::sayBye() in E:xampphtdocslol.php on line 10
Komunikat, który użytkownik może otrzymać, gdy skrypt wywołuje się za długo, co może być spowodowane jego nieskończonością czy też głupotą autora. Ten kod po dłuższym czasie na niektórych serwerach powinien właśnie taki błąd pokazać:
for($i=1;$i>0;$i++){
echo 'a';
}
?>
Skrypt, który wyświetla ten błąd przeważnie korzysta z sesji, a po funkcji session_start(); dołączane ma np. arkusze stylów .css. By usunąć taki błąd przed session_start(); można dopisać funkcję ob_start(); Będzie też jeśli wysyłamy jakiś kod html a potem rzucamy w php nagłówek header(); Dla przykładu:
To jest tekst
header("Content-Type: image/gif");
?>
Pamiętacie przysłowie "Nie dziel przez zero cholero"? Tego właśnie dotyczy ten błąd. Dozwolenie przez zero nie dozwolone jest nie tylko w szkole ale także w programowaniu.
echo 2/0;
?>
Pokazuje nam błąd
Warning: Division by zero in E:xampphtdocslol.php on line 2
Błąd dotyczący próby otworzenia pliku np. .txt lub dołączenia poprzez include czy require, który nie istnieje w skazanej przez użytkownika lokacji.
include("plik_nieistnieje.php");
?>
Wywoła błąd (oczywiście jeśli plik plik_nieistnieje.php nie będzie we wskazanej lokacji.
Warning: include(plik_nieistnieje.php) [function.include]: failed to open stream: No such file or directory in E:xampphtdocslol.php on line 2
Warning: include() [function.include]: Failed opening 'plik_nieistnieje.php' for inclusion (include_path='.;E:xamppphppear') in E:xampphtdocslol.php on line 2
Jeśli mamy skrypt składający się z dużej ilości warunków czy też pętli a nie dbamy o estetykę kodu to może pojawić się błąd Unexpected $end. Następujący kod wyrzuci właśnie taki błąd
if($a > 2){
?>
Błąd:
Parse error: syntax error, unexpected $end in E:xampphtdocslol.php on line 3
Jak naprawić? Przeważnie wystarczy dopisać } przed ?>
Jak zauważyliście każdy rodzaj błędu podaje linijkę w, której coś w naszym kodzie jest źle, jest to podstawą do zlokalizowania i usunięcia błędu. Dla pewności należy sprawdzać zarówno linijkę przed jak i linijkę po!
Są to tylko błędy niezwiązane z bazami danych. Jeśli o jakimś nie wspomniałem, proszę o dopisanie bądź poinformowanie mnie o tym na PW na forum.