Автор Тема: php error reporting  (Прочетена 10231 пъти)

0 Потребители и 1 Гост преглежда(т) тази тема.

Avalanche

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 65
  • -Получени: 275
  • Публикации: 2602
  • meow
php error reporting
« -: 30 Май 2011, 00:26:36 »
Тупаров даде добра идея преди да направим тема за грешките и "не грешките". Та реших да бъда полезен като аз я създам. Моля да бъде прегледана от модераторите, променена и дори изтрита, ако сметнат, че е прекалено объркваща и трудна за разбиране!




Показването на грешките/предупрежденията може да бъде променяно във файла php.ini, който съдържа всички настройки на Php или чрез създаване на отделен php.ini (използва се при някои хост компании (имам опит с host.bg - те го правят по този начин)). error_reporting().




Ще разгледам няколко конкретни примера от други теми:
Код: PHP
  1. Notice: Undefined index: is_logged in C:\Program Files\EasyPHP-5.3.6.0\www\mcf\functions.php on line 22
  2.  
  3. Notice: Undefined variable: error_array in C:\Program Files\EasyPHP-5.3.6.0\www\mcf\register.php on line 27

Това не са грешки! В този пример имаме недефиниран индекс и недефинирана променлива. Дори да бяха дефинирани, действието на кода нямаше да се промени! В php не е нужна дефиницията на променливи, за да бъдат използвани. Ако пишехме C++ или някои друг подобен език, нашето приложение въобще нямаше да се компилира/стартира/покаже.
Сега ще си кажете, е добре - щом няма проблем с това дали е дефинирана или не, по-добре да го изключа за да не ми пречи. Да, ама не! Точно тези предупреждения могат да бъдат много полезни. Пример: Имаме заявка към База Данни с потребители, присвоили сме информацията в масив и се опитваме да достъпим информацията по дадем ключ, примерно ключа ни е истинското име на потребителя - "real_name". Обаче в бързината или каквато и да е причина, ние пишем "realname". Да кода ще работи, но няма да видим как се казва потребителя. И вместо да се лутаме къде е грешката, веднага ще се покаже notice, че такова животно като "realname" - няма. И в крайна сметка, ако толкова ви дразнят - ми дефинирайте ги, така няма да ви вадят очите!





Код: PHP
  1. Deprecated: Function ereg() is deprecated in C:\Program Files\EasyPHP-5.3.6.0\www\mcf\register.php on line 36
Това не е грешка!Времената се менят, тенденциите също и някои от функциите на php се премахват. Но за наша радост препоръчват използването на други, така че просто потърсете в сайта на php за конкретната функция и веднага ще видите голям червен балон, предупреждащ да не се използва, и малко по-надолу предложения какво да използваме.





Код: PHP
  1. Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\Program Files\EasyPHP-5.3.6.0\www\mcf\register.php on line 54
Това също не е грешка! Кода не работи както трябва, но ще се изпълни преди и след предупреждението. Няма да влизам в подробностти какъв е причинителя на грешката, но е със сигурност нещо с базата данни, въобще щом е mysql_нещо_си (pg_нещо_си) - погледнете си кода по заявките!




Код: PHP
  1. Fatal error: Call to undefined function db_init() in E:\xampp\htdocs\zzz\index.php on line 3
Това вече е грешка! Кодът няма да се изпълни след показването на грешката.





Код: PHP
  1. Parse error: syntax error, unexpected '}' in E:\xampp\htdocs\zzz\index.php on line 3
Това е грешка! Кодът не се изпълнява. Имаме пропусната отваряща/затваряща скоба.





Това са най-честите съобщения за предупреждения/грешки. Препоръчвам ви да оставите всички errors/notices/warnings включени, въпреки че по подразбиране са изключени, може да си спестите малко нерви, тях за жалост никой не може да ни ги плати.
Код: PHP
  1. E_ALL | E_STRICT  (Show all errors, warnings and notices including coding standards.)
"Компютрите не правят каквото искаме, а каквото им кажем." Ако разбереш какво значи това няма да имаш големи проблеми, нито с никоя ОС, нито език, или софтуер.
Аз не съм програмист между другото!

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 191
  • Публикации: 3624
Re:php error reporting
« Отговор #1 -: 30 Май 2011, 01:21:16 »
Добра работа  ;)
Модераторите да я закачат и всеки който има нещо да добави към нея да го направи.
Аз ще добавя няколко неща, но не днес
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

federer_11

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 0
  • -Получени: 1
  • Публикации: 931
  • ULTRAS LEVSKI
Re:php error reporting
« Отговор #2 -: 30 Май 2011, 13:10:32 »
Сега да бяхме казали в кои случаи хвърля Fatal Error, кога Warning. Иначе браво, добра работа! :)
(x)HTML, CSS, PHP, MySQL, XML, WML, JavaScript (jQuery)

HD

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 208
  • -Получени: 165
  • Публикации: 3077
Re:php error reporting
« Отговор #3 -: 30 Май 2011, 13:37:37 »
Темата може да се допълва..

federer_11

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 0
  • -Получени: 1
  • Публикации: 931
  • ULTRAS LEVSKI
Re:php error reporting
« Отговор #4 -: 30 Май 2011, 16:10:04 »
Препоръчвам включен error_reporting при работещо приложение и записване на грешките в log файл. И директивата show_errors = Off, за да не се изненадват потребителите с неочаквани съобщения. Добре е да се предвиди отделна страница за това. ;)
(x)HTML, CSS, PHP, MySQL, XML, WML, JavaScript (jQuery)

wuser

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 85
  • -Получени: 49
  • Публикации: 2761
Re:php error reporting
« Отговор #5 -: 30 Май 2011, 22:59:25 »
Залепих я. Добро предложение Джаз, Ако не ме  бяха изпреварили, аз щях да я напиша тая тема. Наистина много станаха въпросите.
Мъдростта на патилото
Perl Monks: PHP - it's "training wheels without the bike" -- Randal L. Schwartz


Дееба... чувствам се все едно обяснявам на майка ми как да си отвори пощата
"не работи"
WTF?!?!? к'во значи че не работи?
Не ти се компилира, дава ти грешка, вади ти грешни резултати, компютърът ти се изключва като го напишеш или на целия квартал му спира тока?
Stilgar

martoo

  • Jr. Member
  • **
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 76
Re:php error reporting
« Отговор #6 -: 30 Юли 2011, 17:34:42 »
Добре де ами къде и как трябва да ги дефинирам тези променливи ,че да ми изчезне това предупреждение? Вярно кода си работи но съобщението ми се появява в индекс страницата.php.ini go нагласих но пак същото.Прокта е на codeigniter.


<div id="nav-right">
    <ul>
      <li><a href="#">ABOUT US</a></li>
      <li><a href="#">PRODUCTS</a></li>
      <li><a href="#">SERVICES</a></li>
      <li><a href="#">SHOPPING CART</a></li>
      <li><a href="#">NEW GADGETS</a></li>
                           <?php if ($_SESSION['type']==1): ?>
                            <li><a href="#">ADMIN</a></li>
                           <?php  endif;?> 
                         
    </ul>
    </div>

Етого и съобщението:

A PHP Error was encountered

Severity: Notice

Message: Undefined variable: _SESSION

Filename: core/Loader.php(679) : eval()'d code

Line Number: 23

echeveria

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 72
  • -Получени: 94
  • Публикации: 4836
Re:php error reporting
« Отговор #7 -: 30 Юли 2011, 18:00:41 »
Съобщенията генерирано от СИ не са стандартни за Зенд, така че тях не може да премахнеш от рнр.ини, все пак рестартира ли сървъра когато промени нещо от файла?
Днес Печатарите използват парите за да купят мозъците на онези, които ги превъзхождат, за да ги накарат да им служат и така да се превърнат в жертва на посредствеността. Това ли е причината, поради която ги наричате благо?
<iframe src="http://www.corbindavenport.com/ubuntu/widget.html" style="width:

martoo

  • Jr. Member
  • **
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 76
Re:php error reporting
« Отговор #8 -: 30 Юли 2011, 18:08:12 »
Да рестартирах го.

Avalanche

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 65
  • -Получени: 275
  • Публикации: 2602
  • meow
Re:php error reporting
« Отговор #9 -: 30 Юли 2011, 18:20:32 »
Абе това май си е "така", трябва да се махне съобщението ако вместо това направиш:

Код: PHP
  1. $type = $_SESSION['type']; //дефинираме променлива
  2.  
  3. if ($type == 1):
  4.       <li><a href="#">ADMIN</a></li>
  5. endif;
  6.  
  7.  
"Компютрите не правят каквото искаме, а каквото им кажем." Ако разбереш какво значи това няма да имаш големи проблеми, нито с никоя ОС, нито език, или софтуер.
Аз не съм програмист между другото!

martoo

  • Jr. Member
  • **
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 76
Re:php error reporting
« Отговор #10 -: 30 Юли 2011, 18:32:37 »
Не пак същото. И едно малко пояснение когато изпълня скрипта и АDMIN полето се появи в индекса съобщението изчезва.

martoo

  • Jr. Member
  • **
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 76
Re:php error reporting
« Отговор #11 -: 30 Юли 2011, 18:58:42 »
Е разгиле 8) оправисе ето така.

"...когато прилагаш $_POST $_GET $_SESSION $_REQUEST $_COOKIE $_FILES ... и т.н. трябва да минеш проверка.
"

<?php    if (isset ($_SESSION)  && $_SESSION['type']==): ?>
                               <li><a href="#">ADMIN</a></li>
                                
                                
                            <?php endif;?>
« Последна редакция: 30 Юли 2011, 19:04:18 от martoo »

edembg

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 2
  • Публикации: 47
Re: php error reporting
« Отговор #12 -: 19 Септември 2011, 08:08:22 »
Като логика е правилно, но като изпълнение - не.
Вярно е, че масива $_SESSION е дефиниран, когато има стартирана сесия, но не винаги е така. Масива е дефиниран и когато си работил с него (присвоил си променлива, бес да си стартирал сесия). Тка че проверката, която правиш няма да ти даде абсолютна сигурност в това дали имаш стартирана сесия или не.
По-добре е да ползваш session_id() за проверката http://php.net/manual/en/function.session-id.php
Проверката трябва да исглежда така:
if (session_id()  != '' && $_SESSION['type] == 1 )
Така със сигурност ще знаеш има ли стартирана сесия или не.
И най-ярките личности си плащат тока