Писец, сколько людей упёртых не там, где надо. Нахватались поначалу «правильных советов от великих гуру» и теперь остальным мозг выносят. «Никогда не используйте eval», «никогда не используйте @ в PHP»…
Действительно ли никогда нельзя использовать собаку (@) в пыхе? Давайте просто головой подумаем.
Итак, как можно бороться с ошибками в программном коде? Есть два основных способа:
- Путём их игнорирования.
- Путём их корректной обработки.
Как всем нормальным людям ясно, первый способ (для которого часто и используется собака) ведёт нас прямиком в ад. Человека, который не обрабатывает ошибки в коде, никто не будет уважать, не подаст ему руки и никакая девушка не выйдет за него замуж.
Нам нужна корретная обработка. Однако, ошибки бывают разные и способы их корректной обработки тоже разные.
Первый тип ошибок: ошибки в программе. Синтаксическая ошибка, в запросе опечатались, лень было проверить существование запрашиваемого ключа в массиве и т.п. Аналог проверяемых исключений (RuntimeException). Корректная обработка подобных ошибок может быть только одна — исправление программного кода на этапе разработки. И для этого нам нужно чётко отлавливать их появление и ни в коем случае не подавлять сообщения о них. Здесь собака действительно вредна.
Второй тип — непроверяемые. Сервер базы данных отвалился, сокет не открывается. На этапе разработки мы не можем устранить возможность подобных происшествий. Единственное, что можем, это обрабатывать эти ситуации. Пример:
$lid = mysql_connect($host, $user, $password); if (!$lid) { throw new Exception('MySQL fail'); }
Мы не спрятали голову в песок. Мы корректно обработали возможную ошибку. Но вот незадача — несмотря на это, mysql_connect()
всё равно выкинет совершенно уже ненужный нам Warning
.
К чёрту Warning
!
$lid = @mysql_connect($host, $user, $password); if (!$lid) { throw new Exception('MySQL fail'); }
Вывод: слушайте умных дядей, но и своей головой думайте.
Ага, согласен, сам так же делаю. Хотя я часто и нотайсы глушу вообще, на формы к примеру:
<input value="" />
Просто мне влом писать каждый раз:
<input value="" />
и т.п.
>Писец, сколько людей упёртых не там, где надо.
Это про меня? Как-то такое от тебя уже слышал в свой адрес…
adw0rd, 4.03.2010, 14:32
Поправь мой каммент, а то все теги съело…
adw0rd, 4.03.2010, 14:32
В первом было
Во втором было
adw0rd, 4.03.2010, 14:33
Все, заебал твой парсер камментов…
adw0rd, 4.03.2010, 14:34
Полная чепуха
Ewg, 4.03.2010, 14:36
>Все, заебал твой парсер камментов…
В твоём вордпрессе иной? поделись
>Полная чепуха
Это да
vasa_c, 4.03.2010, 15:04
>Это про меня? Как-то такое от тебя уже слышал в свой адрес…
Нет, не про тебя
vasa_c, 4.03.2010, 15:13
1) ГО, у тебя из RSS’ки ссылки ведут на 404
2) вот еще вариантец корректной обработки подключения к БД:
$er = error_reporting(0);
$id = mysql_connect(/*…*/);
error_reporting($er);
if (!$id)
throw …
3) на ундефайнед индекс при отправки форм я забиваю. Но: будет у меня класс для обработки параметров $_GET, $_POST — тогда эти нотайсы сами уйдут
Абырвалг, 4.03.2010, 15:25
>В твоём вордпрессе иной? поделись
хз, мой так себя не ведет… надо смотреть конфиги в админке и сравнивать, приезжай на выходных — сравним :)
adw0rd, 4.03.2010, 15:29
>ГО, у тебя из RSS’ки ссылки ведут на 404
Хм, спасибо за информацию, но у меня нормально вроде.
Все ссылки или только эта?
vasa_c, 4.03.2010, 15:40
ссылка на запись — http://feedproxy.google.com/~r/blgo/~3/kszmTccyqEc/ , редиректит на
http://blgo.ru/blog/2010/03/04/baddo/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+blgo+%28%D0%91%D0%BB%D0%BE%D0%B3+%D0%93%D0%9E%29
Клиент — мозилла сандберд, последней версии
Абырвалг, 4.03.2010, 16:39
Ясно, это URL сначала в вордпрессе обрезался, а я его изменил. Видимо успел подхватиться первый.
Раньше при подобном со старого адреса редиректило на новый, а теперь, почему то нет.
Спасибо
vasa_c, 4.03.2010, 17:19
Слушай, а нахуй вообще этот фидбернер нужен? Я просто еще на одном сайте заметил косяки с ним.
Абырвалг, 4.03.2010, 21:57
Я не знаю. Мне посоветовали те, кто лучше меня в этих вещах разбирается.
Мне он удобен тем, что ведёт статистику подписчиков.
vasa_c, 4.03.2010, 22:16
* Статистика
* Проксирование/CDN (снижение нагрузки, если она есть)
И вообще для кого гугл изобрели? — http://ru.wikipedia.org/wiki/FeedBurner
adw0rd, 5.03.2010, 9:43
ну вообще, для того чтобы все таки не ставить собаку в продакшен окружении делается
ini_set(‘log_errors’,1);
ini_set(‘display_errors’,0);
error_reporting(E_ALL);
ini_set(‘error_log’,’syslog’);
и ставится какой нибудь Syslog-NG с веб интерфейсом или Splunk, который срет в БД логами
а в разработке соответсвенно
ini_set(‘log_errors’,1);
ini_set(‘display_errors’,1);
error_reporting(E_ALL);
ini_set(‘error_log’,’php5-error.log’);
как определять DEV и PRODUCTION окружения? ну например по HTTP_HOST_NAME
согласитесь при РАЗРАБОТКЕ MySQL сервер отваливаться не должен, и варнинг там как раз будет не лишним, а вдруг мы забыли (поленились) корректно обработать ошибку, все же не проконтролируешь?
Slach, 27.04.2010, 6:36
>ну вообще, для того чтобы все таки не ставить собаку в продакшен окружении делается
ну, скорее это делается в php.ini
>который срет в БД логами
на мой взгляд в случае корректной обработки ошибки, доморощенное php-сообщение не должно уже никуда проходить, ни на экран, ни в логи, пусть уж туда падает исключение.
>вдруг мы забыли (поленились) корректно обработать ошибку
но ведь собака ставится не один раз и сразу давит все сообщения, она ставится в конкретном месте, где мы уже конкретно обрабатываем ошибку :)
vasa_c, 27.04.2010, 10:01
Не согласен. На продакшне нужно иметь display_errors = off и тогда этот варнинг, что важно, упадет в лог! И спустя пару дней, копая, его можно там найти.
Ошибка — это же не ругань учителя, это сообщение, что в конкретный момент времени что-то конкретное пошло неправильно. И закрывать на это глаза, ну, глупо.
ЗЫ. Побочный фактор: использование собаки наносит громадный удар по скорости обработки — до 700% падение скорости формирования ответа скрипта.
Горбунов Олег, 29.04.2010, 14:49
ГО, извини, не понял, с чем ты не согласен.
Закрывать глупо, да — нужно обрабатывать.
>использование собаки наносит громадный удар по скорости обработки – до 700% падение скорости
Вот здесь неокрепшие умы часто ужасаются. Нужно понимать, 700% от чего.
vasa_c, 29.04.2010, 17:33
Ну как с чем — с приведенным примером )
Ибо в твоем случае ошибка обработается, только если у тебя кто-то их обрабатывает. В противном случае, исключение сплывет до верху — и сюрприз! сгенерит опять варнинг )
Поэтому если ты хотел показать, как оно надо — оно не получилось )
Неокрепшие умы всегда ужасаются, это их свойство ;)
Просто твоя формулировка «собака и евал не так плохо как говорят другие плохие дяди» ничем не лучше чем когда «другие плохие дяди говорят что евал и собака — это плохо, очень плохо». Напиши как правильно ошибка обрабатывать — тогда тебе будет слава великая, и станешь ты первым среди равных джедаев! ;)
Горбунов Олег, 30.04.2010, 12:05
Согласен со статьей. Надо было еще привести пример с @getimagesize, когда она используется для определения «наличия изображения в файле».
Олег, тот что Горбунов, хватит переживать так за неокрепшие умы, они всё равно всё копипастят… ;))
kostyl, 16.09.2010, 14:13