SlideShare a Scribd company logo
1 of 14
Грешки в PHP 
Тема 6 
12/11/14 1
Съдържание 
1. Грешки на интерпретатора 
(парсер) 
2. Фатални грешки 
3. Предупреждения 
4. Забележки 
5. Управление на съобщенията за 
грешка 
12/11/14 2
Грешките и PHP 
 Предимство на PHP пред другите скриптови езици 
са съобщенията за грешка; 
 Няма нужда да се ползва log-a; 
 Често съобщенията за грешка казват какво точно 
трябва да направите, за да премахнете проблема 
и на кой ред се намира некоректния код; 
 Грешките в PHP - три категории: 
 Синтактични; 
 Семантични; 
 Логически. 
12/11/14 3
Процес 
 Изпълнение на PHP скрипт от страна на сървъра: 
 При заявка за определен скрипт, сървърът го подава 
на PHP парсера (интерпретатора); 
 Той първо го "парсва" , иначе казано "смила" и едва 
след това изпълнява. 
 Важно е да се подчертае, че парсерът обработва 
целия скрипт преди да започне да го изпълнява; 
 На това ниво на предварителна обработка могат да се 
появят синтактичните грешки. -- изпълнението спира! 
 Ако тук всичко е наред, то следва изпълнението на кода, 
процес при който биха могли да се появят семантичните 
грешки. 
 Най-сложни и за откриване, и поправяне са логическите 
грешки, които не водят до преки съобщения за проблеми, 
но могат да доведат до некоректно изпълнение на скрипта. 
12/11/14 4
1. Грешки на парсера – 
Синтактичните грешки 
<?php 
$ime=Иван"; 
echo $ime; 
?> 
 Parse error: parse error, unexpected '"' in 
/www/idg-web. 
001/pcworld/php/parse_error_primer.php on 
line 2 
12/11/14 5
Синтактични грешки (2) 
 ../uroci/t6/ ex61.php 
<?php 
if ($name=="Иван") 
echo "Здравейте, Иван!"; 
} 
else { 
echo "Вие не сте Иван!"; 
} 
?> 
 Резултат:Parse error: syntax error, 
unexpected '}' in 
D:php_testurocit6ex61.php on 
line ... 
<? 
if ($name=="Иван") { 
echo "Здравейте, Иван!"; 
} 
else { 
echo "Вие не сте Иван!"; 
?> 
12/11/14 6
2. Семантични 
 Фатални грешки 
 Фаталните грешки са една от разновидностите на 
семантичните; 
 Появяват в процеса на изпълнение на скрипта: 
 най-често се причиняват от извикване на несъществуващи и 
недефинирани функции или файлове. 
 изпълнението се прекратява. 
<?php 
require "config.php"; //ако не съществува – fatal error 
if (!$user) { 
not_auth(); //ако не съществува – fatal error 
} 
?> 
12/11/14 7
2. Семантични 
 Предупрежденията са друга разновидност 
на семантичните грешки: 
 Също се появяват в процеса на изпълнение, но 
той продължава и след тях. 
 Предизвикват се от грешки, които не са 
фатални за цялостния ефект, макар че най - 
често водят до грешно изпълнение на кода. 
12/11/14 8
Предупреждения (2) 
 Нека вземем предния пример, но ще сменим функцията за 
включване на файл от "require" на "include”: 
<?php 
include "config.php"; 
if (!$user) { 
header ("location: login.php"); 
12/11/14 9 
} ... 
?> 
 Понеже сме използвали "include", ще получим предупреждение 
за невъзможността да се включи указания файл, но 
изпълнението на скрипта ще продължи.
Например: 
4. Забележки 
Напълно възможно е да допуснем грешка в името на някоя 
променлива при писането на кода. Разбира се това ще 
причини множество проблеми и няма да ни доведе до 
желания резултат. Използвайки забележките, можем да 
открем подобни грешки. 
Инициализирането става автоматично, в момента в който 
на променливата се присвоява някаква стойност. В случая 
ние разчитаме на променливата $user (предния пример) за 
да проверим дали потребителят вече се е идентифицирал 
или не. Ако обаче показването на забележки е включено, 
тогава ще видим изписаното на екрана съобщение, че се 
опитваме да използваме недефинираната променлива в 
случаите, когато потребителят все още не се е 
идентифицирал. 
 Забележките са този вид съобщения, с чиято помощ можете да се 
преборите с логическите грешки в скриптовете си. 
 Под логически грешки се разбират неточности в кода, които не 
възпрепятстват изпълнението му, но водят до грешни резултати. Те 
могат да са резултат от грешка на изписването или на недобре 
съставен алгоритъм. 
 По подразбиране, настройките на PHP за показване на грешки са така 
направени, че забележките не се изписват на екрана. 
 Това е напълно логично, защото в противен случай не бихме могли да 
използваме конструкции като тези, показани в предния пример. 
 Ако го изпълните на сървър с PHP, настроен да показва всичкии грешки, 
ще получите дълго съобщение за грешка, което твърди, че се опитвате да 
използвате неинициализирана променлива. 
 Използването на забележки е особено полезно в стадиите на 
тестване на сайта. 
12/11/14 10
5. Управление на 
съобщенията за грешка 
 Можете да управлявате извеждането на 
съобщенията чрез директивата error_reporting – в 
началото на скрипта. 
 число error_reporting ( [число ниво]); 
 Чрез тази директива се задава ниво на 
съобщаването за открити грешки чрез число или 
константа: 
 Връща старата стойност на нивото. Препоръчва се 
използването на константи, а не на числа. 
 Директивата може да се използва както в конфигурационния 
файл на PHP, като в този случай ще се отнася до всички 
скриптове, така и в отделните скриптове по отделно. 
12/11/14 11
Начини 
 error_reporting(0) – подтискане на изписването на каквито и да 
било съобщения за грешка ; 
// Съобщаване на всички грешки 
error_reporting (E_ALL); 
//Положението по подразбиране, при което се съобщават всички 
грешки, освен забележките 
error_reporting (E_ALL ^ E_NOTICE); 
// Ако искате да виждате и забележките, поставете това в началото 
на скрипта 
error_reporting (E_ERROR | E_WARNING | E_PARSE | E_NOTICE); 
12/11/14 12
6. Прихващане на грешките 
 Правилното обработване на грешките е особено 
важно за преставянето на един сайт. За съжаление, 
често се подценява; 
 Трябва да имате предвид, че служебните съобщения 
на PHP могат да ударят доста сериозно доверието на 
потребителите към сайта; 
 Има най-различни начини да осигурите свое, 
интелигентно решение за обработка на грешките. 
 Повечето функции в PHP връщат резултат, ако се изпълнят 
или "0", ако нещо им попречи. 
 можете да се възползвате от това и да се подсигурите срещу 
непредвидените обстоятелства. В такива случаи можете да 
използвате и символа "@", който, поставен пред името на 
функцията подтиска извеждаето на съобщения за грешка 
next slide. 
12/11/14 13
Пример 
../uroci/t6/ ex62.php 
 за да се подсигурим срещу невъзможноост да бъде зареден 
нужния файл "config.php". 
<?php 
if (!@include "config.php") { 
echo "<b>Сайтът не може да обработи заявката Ви в момента! 
</b><br><br> Моля опитайте по-късно! <br>Извиняваме се за 
причиненото неудобство!"; 
exit; 
} if (!$user) { 
header ("location: login.php"); 
} 
?> 
12/11/14 14

More Related Content

Viewers also liked

Viewers also liked (12)

K5 model fungsional
K5 model fungsionalK5 model fungsional
K5 model fungsional
 
Onlinescorecard hfdst8
Onlinescorecard hfdst8Onlinescorecard hfdst8
Onlinescorecard hfdst8
 
A1 install xampp
A1 install xamppA1 install xampp
A1 install xampp
 
4
44
4
 
Open road presentation-dec-2014
Open road presentation-dec-2014Open road presentation-dec-2014
Open road presentation-dec-2014
 
Shevchenko
ShevchenkoShevchenko
Shevchenko
 
基督徒的交通记录 / 一位老弟兄
基督徒的交通记录 / 一位老弟兄基督徒的交通记录 / 一位老弟兄
基督徒的交通记录 / 一位老弟兄
 
Kansrekening les4 gvan alst
Kansrekening les4 gvan alstKansrekening les4 gvan alst
Kansrekening les4 gvan alst
 
A study of the effects of machining parameters on surface roughness using res...
A study of the effects of machining parameters on surface roughness using res...A study of the effects of machining parameters on surface roughness using res...
A study of the effects of machining parameters on surface roughness using res...
 
MSDS CosmoMix-Res
MSDS CosmoMix-ResMSDS CosmoMix-Res
MSDS CosmoMix-Res
 
Chương 1
Chương 1Chương 1
Chương 1
 
Travail 2
Travail 2Travail 2
Travail 2
 

Similar to B6 t6 errors

The better PHP API (BG)
The better PHP API (BG)The better PHP API (BG)
The better PHP API (BG)boen_robot
 
Lotus Domino Admin Blast: LCTY 2011
Lotus Domino Admin Blast: LCTY 2011Lotus Domino Admin Blast: LCTY 2011
Lotus Domino Admin Blast: LCTY 2011IBS Bulgaria
 
1. vb sredi za programirane. ide. gui
1. vb sredi za programirane. ide. gui1. vb sredi za programirane. ide. gui
1. vb sredi za programirane. ide. guidnaidenowa
 
1. vb sredi za programirane. ide. gui
1. vb sredi za programirane. ide. gui1. vb sredi za programirane. ide. gui
1. vb sredi za programirane. ide. guidnaidenowa
 
Как се става програмист?
Как се става програмист?Как се става програмист?
Как се става програмист?Svetlin Nakov
 
Защита при създаването на PHP-приложения
Защита при създаването на PHP-приложенияЗащита при създаването на PHP-приложения
Защита при създаването на PHP-приложенияNikolay Milkov
 
13.асемблерни езици за програмиране. работа с езици от високо ниво
13.асемблерни езици за програмиране. работа с езици от високо ниво13.асемблерни езици за програмиране. работа с езици от високо ниво
13.асемблерни езици за програмиране. работа с езици от високо нивоdnaidenowa
 
Php sec referat
Php sec referatPhp sec referat
Php sec referatDido_mn
 
Защита при създаване на PHP-приложения в Интернет
Защита при създаване на PHP-приложения в ИнтернетЗащита при създаване на PHP-приложения в Интернет
Защита при създаване на PHP-приложения в Интернетeismail
 
Php security
Php securityPhp security
Php securityphristov
 

Similar to B6 t6 errors (18)

B4 t4 include_files
B4 t4 include_filesB4 t4 include_files
B4 t4 include_files
 
B4 t4 include_files
B4 t4 include_filesB4 t4 include_files
B4 t4 include_files
 
B4 t4 include_files
B4 t4 include_filesB4 t4 include_files
B4 t4 include_files
 
The better PHP API (BG)
The better PHP API (BG)The better PHP API (BG)
The better PHP API (BG)
 
Lotus Domino Admin Blast: LCTY 2011
Lotus Domino Admin Blast: LCTY 2011Lotus Domino Admin Blast: LCTY 2011
Lotus Domino Admin Blast: LCTY 2011
 
B1 t1 php_basics
B1 t1 php_basicsB1 t1 php_basics
B1 t1 php_basics
 
B1 t1 php_basics
B1 t1 php_basicsB1 t1 php_basics
B1 t1 php_basics
 
коригиране на грешки
коригиране на грешкикоригиране на грешки
коригиране на грешки
 
Drupal Security
Drupal SecurityDrupal Security
Drupal Security
 
1. vb sredi za programirane. ide. gui
1. vb sredi za programirane. ide. gui1. vb sredi za programirane. ide. gui
1. vb sredi za programirane. ide. gui
 
1. vb sredi za programirane. ide. gui
1. vb sredi za programirane. ide. gui1. vb sredi za programirane. ide. gui
1. vb sredi za programirane. ide. gui
 
Programirane i organizaciq
Programirane i organizaciqProgramirane i organizaciq
Programirane i organizaciq
 
Как се става програмист?
Как се става програмист?Как се става програмист?
Как се става програмист?
 
Защита при създаването на PHP-приложения
Защита при създаването на PHP-приложенияЗащита при създаването на PHP-приложения
Защита при създаването на PHP-приложения
 
13.асемблерни езици за програмиране. работа с езици от високо ниво
13.асемблерни езици за програмиране. работа с езици от високо ниво13.асемблерни езици за програмиране. работа с езици от високо ниво
13.асемблерни езици за програмиране. работа с езици от високо ниво
 
Php sec referat
Php sec referatPhp sec referat
Php sec referat
 
Защита при създаване на PHP-приложения в Интернет
Защита при създаване на PHP-приложения в ИнтернетЗащита при създаване на PHP-приложения в Интернет
Защита при създаване на PHP-приложения в Интернет
 
Php security
Php securityPhp security
Php security
 

More from Asiya Petrova (14)

B8 t8 files
B8 t8 filesB8 t8 files
B8 t8 files
 
B7 t7 arrays
B7 t7 arraysB7 t7 arrays
B7 t7 arrays
 
B6 t6 errors
B6 t6 errorsB6 t6 errors
B6 t6 errors
 
B5 t5 if_else_for_while
B5 t5 if_else_for_whileB5 t5 if_else_for_while
B5 t5 if_else_for_while
 
B3 t3 cookies
B3 t3 cookiesB3 t3 cookies
B3 t3 cookies
 
B2 t2 variables
B2 t2 variablesB2 t2 variables
B2 t2 variables
 
B9 t9 db_my_sql
B9 t9 db_my_sqlB9 t9 db_my_sql
B9 t9 db_my_sql
 
A1 install xampp
A1 install xamppA1 install xampp
A1 install xampp
 
B9 t9 db_my_sql
B9 t9 db_my_sqlB9 t9 db_my_sql
B9 t9 db_my_sql
 
B7 t7 arrays
B7 t7 arraysB7 t7 arrays
B7 t7 arrays
 
B8 t8 files
B8 t8 filesB8 t8 files
B8 t8 files
 
B5 t5 if_else_for_while
B5 t5 if_else_for_whileB5 t5 if_else_for_while
B5 t5 if_else_for_while
 
B3 t3 cookies
B3 t3 cookiesB3 t3 cookies
B3 t3 cookies
 
B2 t2 variables
B2 t2 variablesB2 t2 variables
B2 t2 variables
 

B6 t6 errors

  • 1. Грешки в PHP Тема 6 12/11/14 1
  • 2. Съдържание 1. Грешки на интерпретатора (парсер) 2. Фатални грешки 3. Предупреждения 4. Забележки 5. Управление на съобщенията за грешка 12/11/14 2
  • 3. Грешките и PHP  Предимство на PHP пред другите скриптови езици са съобщенията за грешка;  Няма нужда да се ползва log-a;  Често съобщенията за грешка казват какво точно трябва да направите, за да премахнете проблема и на кой ред се намира некоректния код;  Грешките в PHP - три категории:  Синтактични;  Семантични;  Логически. 12/11/14 3
  • 4. Процес  Изпълнение на PHP скрипт от страна на сървъра:  При заявка за определен скрипт, сървърът го подава на PHP парсера (интерпретатора);  Той първо го "парсва" , иначе казано "смила" и едва след това изпълнява.  Важно е да се подчертае, че парсерът обработва целия скрипт преди да започне да го изпълнява;  На това ниво на предварителна обработка могат да се появят синтактичните грешки. -- изпълнението спира!  Ако тук всичко е наред, то следва изпълнението на кода, процес при който биха могли да се появят семантичните грешки.  Най-сложни и за откриване, и поправяне са логическите грешки, които не водят до преки съобщения за проблеми, но могат да доведат до некоректно изпълнение на скрипта. 12/11/14 4
  • 5. 1. Грешки на парсера – Синтактичните грешки <?php $ime=Иван"; echo $ime; ?>  Parse error: parse error, unexpected '"' in /www/idg-web. 001/pcworld/php/parse_error_primer.php on line 2 12/11/14 5
  • 6. Синтактични грешки (2)  ../uroci/t6/ ex61.php <?php if ($name=="Иван") echo "Здравейте, Иван!"; } else { echo "Вие не сте Иван!"; } ?>  Резултат:Parse error: syntax error, unexpected '}' in D:php_testurocit6ex61.php on line ... <? if ($name=="Иван") { echo "Здравейте, Иван!"; } else { echo "Вие не сте Иван!"; ?> 12/11/14 6
  • 7. 2. Семантични  Фатални грешки  Фаталните грешки са една от разновидностите на семантичните;  Появяват в процеса на изпълнение на скрипта:  най-често се причиняват от извикване на несъществуващи и недефинирани функции или файлове.  изпълнението се прекратява. <?php require "config.php"; //ако не съществува – fatal error if (!$user) { not_auth(); //ако не съществува – fatal error } ?> 12/11/14 7
  • 8. 2. Семантични  Предупрежденията са друга разновидност на семантичните грешки:  Също се появяват в процеса на изпълнение, но той продължава и след тях.  Предизвикват се от грешки, които не са фатални за цялостния ефект, макар че най - често водят до грешно изпълнение на кода. 12/11/14 8
  • 9. Предупреждения (2)  Нека вземем предния пример, но ще сменим функцията за включване на файл от "require" на "include”: <?php include "config.php"; if (!$user) { header ("location: login.php"); 12/11/14 9 } ... ?>  Понеже сме използвали "include", ще получим предупреждение за невъзможността да се включи указания файл, но изпълнението на скрипта ще продължи.
  • 10. Например: 4. Забележки Напълно възможно е да допуснем грешка в името на някоя променлива при писането на кода. Разбира се това ще причини множество проблеми и няма да ни доведе до желания резултат. Използвайки забележките, можем да открем подобни грешки. Инициализирането става автоматично, в момента в който на променливата се присвоява някаква стойност. В случая ние разчитаме на променливата $user (предния пример) за да проверим дали потребителят вече се е идентифицирал или не. Ако обаче показването на забележки е включено, тогава ще видим изписаното на екрана съобщение, че се опитваме да използваме недефинираната променлива в случаите, когато потребителят все още не се е идентифицирал.  Забележките са този вид съобщения, с чиято помощ можете да се преборите с логическите грешки в скриптовете си.  Под логически грешки се разбират неточности в кода, които не възпрепятстват изпълнението му, но водят до грешни резултати. Те могат да са резултат от грешка на изписването или на недобре съставен алгоритъм.  По подразбиране, настройките на PHP за показване на грешки са така направени, че забележките не се изписват на екрана.  Това е напълно логично, защото в противен случай не бихме могли да използваме конструкции като тези, показани в предния пример.  Ако го изпълните на сървър с PHP, настроен да показва всичкии грешки, ще получите дълго съобщение за грешка, което твърди, че се опитвате да използвате неинициализирана променлива.  Използването на забележки е особено полезно в стадиите на тестване на сайта. 12/11/14 10
  • 11. 5. Управление на съобщенията за грешка  Можете да управлявате извеждането на съобщенията чрез директивата error_reporting – в началото на скрипта.  число error_reporting ( [число ниво]);  Чрез тази директива се задава ниво на съобщаването за открити грешки чрез число или константа:  Връща старата стойност на нивото. Препоръчва се използването на константи, а не на числа.  Директивата може да се използва както в конфигурационния файл на PHP, като в този случай ще се отнася до всички скриптове, така и в отделните скриптове по отделно. 12/11/14 11
  • 12. Начини  error_reporting(0) – подтискане на изписването на каквито и да било съобщения за грешка ; // Съобщаване на всички грешки error_reporting (E_ALL); //Положението по подразбиране, при което се съобщават всички грешки, освен забележките error_reporting (E_ALL ^ E_NOTICE); // Ако искате да виждате и забележките, поставете това в началото на скрипта error_reporting (E_ERROR | E_WARNING | E_PARSE | E_NOTICE); 12/11/14 12
  • 13. 6. Прихващане на грешките  Правилното обработване на грешките е особено важно за преставянето на един сайт. За съжаление, често се подценява;  Трябва да имате предвид, че служебните съобщения на PHP могат да ударят доста сериозно доверието на потребителите към сайта;  Има най-различни начини да осигурите свое, интелигентно решение за обработка на грешките.  Повечето функции в PHP връщат резултат, ако се изпълнят или "0", ако нещо им попречи.  можете да се възползвате от това и да се подсигурите срещу непредвидените обстоятелства. В такива случаи можете да използвате и символа "@", който, поставен пред името на функцията подтиска извеждаето на съобщения за грешка next slide. 12/11/14 13
  • 14. Пример ../uroci/t6/ ex62.php  за да се подсигурим срещу невъзможноост да бъде зареден нужния файл "config.php". <?php if (!@include "config.php") { echo "<b>Сайтът не може да обработи заявката Ви в момента! </b><br><br> Моля опитайте по-късно! <br>Извиняваме се за причиненото неудобство!"; exit; } if (!$user) { header ("location: login.php"); } ?> 12/11/14 14