Witajcie!
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.
1. Parse error - błąd składni
Z reguły są to drobne pomyłki, literówki w poleceniach. Przykładem takiego błędu niech będzie takie polecenie
Kod:
<?php
echo 'Hello World': // Błędna linijka
?>
Błąd, który otrzymamy będzie brzmiał tak
Kod:
Parse error: syntax error, unexpected ':', expecting ',' or ';' in E:\xampp\htdocs\lol.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).
2. Call to undefined function - funkcja nie istnieje
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
Kod:
<?php
function hello(){
echo 'Hello World';
}
hallo(); // Błędna linijka
?>
Błąd wywołany przez ten kod może brzmieć tak
Kod:
Fatal error: Call to undefined function hallo() in E:\xampp\htdocs\lol.php on line 5
3. Cannot instantiate non-existent class
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
Kod:
<?php
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
Kod:
Fatal error: Class 'hallo' not found in E:\xampp\htdocs\lol.php on line 8
4. Call to a member function on a non-object
Kolejny błąd, który dotyczy programowania obiektowego. Mówi on, iż skrypter próbuje użyć metody (funkcji) w klasie, która nie została wczeżniej weń zdefiniowana. Dla przykładu
Kod:
<?php
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
Kod:
Fatal error: Call to undefined method hello::sayBye() in E:\xampp\htdocs\lol.php on line 10
5. PHP Timed out!
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ć:
Kod:
<?php
for($i=1;$i>0;$i++){
echo 'a';
}
?>
6. Headers already sent
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:
Kod:
To jest tekst
<?php
header("Content-Type: image/gif");
?>
// Kiri
7. Division by zero...
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.Pokazuje nam błąd
Kod:
Warning: Division by zero in E:\xampp\htdocs\lol.php on line 2
8. Failed to open stream
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.
Kod:
<?php
include("plik_nieistnieje.php");
?>
Wywoła błąd (oczywiżcie jeżli plik plik_nieistnieje.php nie będzie we wskazanej lokacji.
Kod:
Warning: include(plik_nieistnieje.php) [function.include]: failed to open stream: No such file or directory in E:\xampp\htdocs\lol.php on line 2
Warning: include() [function.include]: Failed opening 'plik_nieistnieje.php' for inclusion (include_path='.;E:\xampp\php\pear\') in E:\xampp\htdocs\lol.php on line 2
9. Unexpected $end
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
Kod:
<?php
if($a > 2){
?>
Błąd:
Kod:
Parse error: syntax error, unexpected $end in E:\xampp\htdocs\lol.php on line 3
Jak naprawić? Przeważnie wystarczy dopisać } przed ?>
Dzięki Aven
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.
Zakładki