Грешки в 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

ODP
Автоматизирано функционално тестване на уеб приложения със Selenium
ODP
Безмилостно тестване на уеб приложения със Selenium
PDF
Aarne Markkula vastuullisuus_energiansäästö_101214
PDF
Marek Prokop - Jak píšeme čaj týdne
PDF
Building con 1 (arc 1523) project 1 brief aug 2014
PDF
Confezioni Natalizie
PDF
PDF
Mitigation of the Harmonics under Reactive Power Compensation by SHPF-TCR Usi...
Автоматизирано функционално тестване на уеб приложения със Selenium
Безмилостно тестване на уеб приложения със Selenium
Aarne Markkula vastuullisuus_energiansäästö_101214
Marek Prokop - Jak píšeme čaj týdne
Building con 1 (arc 1523) project 1 brief aug 2014
Confezioni Natalizie
Mitigation of the Harmonics under Reactive Power Compensation by SHPF-TCR Usi...

Viewers also liked (19)

PDF
Reduced Test Pattern Generation of Multiple SIC Vectors with Input and Output...
PPTX
Сільське господарство
DOCX
logline ini mungkin bakal gua kasih buat tugas doi:3
PDF
Veteran appreciation briefing (29.90 plan most states)
PDF
A Review of Performance of Insulating Material in Buildings
DOCX
بحث التقن K7
ODP
Estórias de Encontar - Conto de Natal - Madalena.
PDF
BUS04FEB10MAI1FUL028
PDF
Photo of the week V2.0
PPTX
KP Rus Speedway 2015
PDF
Attacks Prevention and Detection Techniques In MANET: A Survey
PDF
Toan 1 - Chuong1
PPTX
Проектная деятельность "Город и деревня"
DOCX
Khoa hóa học
PPTX
конкурс творчих робіт «як я розумію толерантність
PDF
Certificate of Training - Emergency Procedures - General Evac & First Response
PDF
Seminar 08-10-2014 H. van der Jagt Willems- Time to benefit
DOC
PDF
An automatic filtering task in osn using content based approach
Reduced Test Pattern Generation of Multiple SIC Vectors with Input and Output...
Сільське господарство
logline ini mungkin bakal gua kasih buat tugas doi:3
Veteran appreciation briefing (29.90 plan most states)
A Review of Performance of Insulating Material in Buildings
بحث التقن K7
Estórias de Encontar - Conto de Natal - Madalena.
BUS04FEB10MAI1FUL028
Photo of the week V2.0
KP Rus Speedway 2015
Attacks Prevention and Detection Techniques In MANET: A Survey
Toan 1 - Chuong1
Проектная деятельность "Город и деревня"
Khoa hóa học
конкурс творчих робіт «як я розумію толерантність
Certificate of Training - Emergency Procedures - General Evac & First Response
Seminar 08-10-2014 H. van der Jagt Willems- Time to benefit
An automatic filtering task in osn using content based approach
Ad

Similar to B6 t6 errors (17)

PPT
B5 t5 if_else_for_while
PPT
B5 t5 if_else_for_while
PPT
B4 t4 include_files
PPT
B4 t4 include_files
PPT
B4 t4 include_files
PPT
B1 t1 php_basics
PPT
B1 t1 php_basics
ODP
Чести проблеми в сигурността на уеб проектите
PDF
Php sec referat
PDF
Защита при създаване на PHP-приложения в интернет
PDF
500085 presentation
DOCX
Php security
PPT
B8 t8 files
PPT
B8 t8 files
PPTX
Php security
ODP
Php sec
DOCX
Защита при създаването на PHP-приложения
B5 t5 if_else_for_while
B5 t5 if_else_for_while
B4 t4 include_files
B4 t4 include_files
B4 t4 include_files
B1 t1 php_basics
B1 t1 php_basics
Чести проблеми в сигурността на уеб проектите
Php sec referat
Защита при създаване на PHP-приложения в интернет
500085 presentation
Php security
B8 t8 files
B8 t8 files
Php security
Php sec
Защита при създаването на PHP-приложения
Ad

More from Asiya Petrova (11)

PPT
B7 t7 arrays
PPT
B3 t3 cookies
PPT
B2 t2 variables
PPT
B9 t9 db_my_sql
PPT
A1 install xampp
PPT
B9 t9 db_my_sql
PPT
B7 t7 arrays
PPT
B6 t6 errors
PPT
B3 t3 cookies
PPT
A1 install xampp
PPT
B2 t2 variables
B7 t7 arrays
B3 t3 cookies
B2 t2 variables
B9 t9 db_my_sql
A1 install xampp
B9 t9 db_my_sql
B7 t7 arrays
B6 t6 errors
B3 t3 cookies
A1 install xampp
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