Статья "Обработка ошибок в PHP"

_RVK_

Новичок
Статья "Обработка ошибок в PHP"

Критика приветствуеся, особенно дельная. Поправим, дополним... Это моя первая статья, но прошу говорить честно, может лучше чтоб и последняя сразу :)
 

Oleg Marchuk

Человек
Вопрос на засыпку. Почему в цикле foreach нельзя подавить сообщение об ошибке, если аргумент не массив, с помощью @?
:)
 

lucas

Guest
Можно, я скопирую ответ из мануала? :D

-~{}~ 19.07.04 20:48:

По-моему, статья хорошая для новичков, но слегка устаревшая. :)
 

_RVK_

Новичок
Oleg Marchuk потому что есть функция is_array() и проверять нужно до цикла а не вовремя...

-~{}~ 19.07.04 19:15:

lucas почему устаревшая, потому что на носу PHP5?
 

Макс

Старожил PHPClub
Файл может исчезнуть вследствие сотни причин, и вы должны предусмотреть это. Функция file_exists() поможет вам в этом.
ИМХО лучше [m]is_file[/m] + проверить на чтение [m]is_readable[/m]

Если вы используете данные пользователя для формирования SQL запросов, обязательно используйте функцию addslashes() или mysql_escape_string().
в этой фразе тоже неточности. Думаю про magic_quotes_gpc ты в курсе ?

во-первых, синтаксическая ошибка,
во-вторых, ИМХО стоит обрабатывать и default в этом случае

foreach ($_errors as $erroro) print $error.'<br>';
здесь тоже ошибка

ЗЫ
насчет исключений тоже не все так просто.
Ведь многие функции их не генерируют. Я об этом тему поднимал в http://phpclub.ru/talk/showthread.php?s=&threadid=52470&
 

Alexandre

PHPПенсионер
Для начала не плохо.
Замечаний по существу нет,
могу, как злобный критик, высказать непосуществу, т.е. это будет по форме, а не по содержанию:

Основной недостаток: статья слабоструктурированная, я бы сказал - нет комплексности и кажется немного расплывчатой.

А если быть по точнее - надо более четко было отнестись к анализу возникновения ошибок, и как логический вывод -принципы их предопределения и устранения.

Как следствие отсутствия этого - нет хорошего логического перехода от одной части статьи к другой и они кажутся не связанными между собой.

Но это слабое место многих статей и авторов, в частности и моих тоже.

Из замечаний по содержанию хочется отметить, что многих как раз интересуют особонности PHP 5, по этому часть Обработка ошибок в PHP 5 надо расширить с конкретными примерами.

кстати, почему-то забыли set_error_handler (), trigger_error()
Многих как раз очень интересуются примерами с использованием этих возможностей.

Не судите злобно...
Человек молодец - выражать свои мысли правильно - это искусство
 

_RVK_

Новичок
ИМХО лучше is_file + проверить на чтение is_readable
Согласен.
в этой фразе тоже неточности. Думаю про magic_quotes_gpc ты в курсе ?
Я в курсе но об этом хорошо расказано в факе. Моя же цель обработка ошибок.
во-первых, синтаксическая ошибка,
во-вторых, ИМХО стоит обрабатывать и default в этом случае
Ошибку исправим. Что значит обрабатывать default?
здесь тоже ошибка
Просто невнимательность.

Спасибо за конкретные замечания. Все по существу. Учту.

-~{}~ 20.07.04 12:29:

А если быть по точнее - надо более четко было отнестись к анализу возникновения ошибок, и как логический вывод -принципы их предопределения и устранения.
Согласен. Попробую добполнить статью в этом ключе.
Из замечаний по содержанию хочется отметить, что многих как раз интересуют особонности PHP 5, по этому часть Обработка ошибок в PHP 5 надо расширить с конкретными примерами.
Все никак не решусь установить PHP 5 и попробовать его в деле. А так согласен. Маловато об этом написано.
кстати, почему-то забыли set_error_handler (), trigger_error()
Многих как раз очень интересуются примерами с использованием этих возможностей
Я и не забыл :) Сначала написал а потом сознательно удалил. Идеология статьи обработка ошибок ДО их появления. set_error_handler () просто устанавливает иной обработчик, причем в основном для исключений E_USER_*... но тогда чем хуже встроенный? trigger_error() в том же русле, хотя вы можете и по спорить, это мое мнение, может оно и неправильное.
 

Макс

Старожил PHPClub
Ошибку исправим. Что значит обрабатывать default?
Это я наверное невнимательно код просамтривал. Не заметил, что у тебя там обрабатывается ошибка по умолчанию :
PHP:
    default: 
        print 'Произошла неизвестная ошибка'; 
        $location='index.php'; 
    break;
-~{}~ 20.07.04 12:50:

PS
про set_error_handler статья на деталях уже есть.
Думаю можно просто на нее ссылочку сделать.
 

_RVK_

Новичок
про set_error_handler статья на деталях уже есть.
Думаю можно просто на нее ссылочку сделать.
Maxim Matyukhin Да, и в мане есть хороший пример своего обработчика.

-~{}~ 20.07.04 18:44:

Подкоректировал статью с учетом замечаний.
Alexandre как теперь по форме, лучше?
 

Alexandre

PHPПенсионер
я бы сделал так:

цель написания статьи: научить программиста создавать устойчивые WEB приложения путем предупреждения ошибок. (три слова написать во введении, слово цель можно и не писать но должно быть ясно о чем и для чего)

Возможные ошибки при разработке WEB приложений:
- ош. синтаксиса
- алгоритмические (1 и 2 не являются целью статьи )
- сетевые (соединения) (и 3 если приложение не запрашивает другой сервер по fsocketOpen, curl и пр.... ) в том числе и mail
- ошибки БД
- ошибки пользовательских данных
- ош. файловой системы
- пр...

Какие средства в PHP для этого существуют (подзаголовок)
- исключения
- логи
- настройки

Что для чело лучше, написать по маленькому обзацу про каждый

Как предопределить ошибки БД (отдельная глава)
- использование функций БД
- использование функций при формировании SQL запросов (слэши, спецсимволу и пр...)

Пользовательские ошибки (корректность введенных данных) - отдельной главой
- анализ на стадии HTML формы (javascript)
- использование переменных $_ , безопастный режим
- использование функций (trim, replace, htmlspecialchers и др...)
- использование рег выражений.
- и пр...

Файловая система, пользовательские логи и пр - отдельная гл.

Полезные советы - писать про все, что не вошло в предыдущие главы

Примеры по каждому пункту в каждой главе.

Злую @ включить в главу - средства предупреждения ошибок

Обработка ошибок в PHP 5 - исключить, раз нет примеров.

Заключение,
.....
Используя вышеизложенных методов ... позволяет увеличить надежность WEB приложений, соответсчтвенно и повысить престиж компании и программиста, который создавал сайт
(что-то в этом духе)

пока все - но при более детальном анализе можно накопать большего
 

_RVK_

Новичок
Alexandre
ОГО! Ты охватил чуть ли не все области программирования, я даже и незнаю что сказать. С одной стороны это все нужно, с другой, статья задумывалась как начальное наставление для новичков, откуда копать. Про любой из предложенных тобой пунктов, можно отдельную статью написать! "Например предупреждение ошибок при работе с БД". А про формы я вообще молчу... Если сделать так как ты советуешь, то получение ценной информации может превратиться в раскопки древних захоронений... Кстати я думал написать следующую статью про обработку форм, так что получится что это будет продолжение первой.
 

Alexandre

PHPПенсионер
Ты охватил чуть ли не все области программирования
- это не я охватил - это ошибки пролезли во все области программирования
Если сделать так как ты советуешь, то получение ценной информации может превратиться в раскопки древних захоронений...
если написать основное и написать красиво - то получится отличная статья, то что нужно новичкам

Например в статье не надо подробно писать про реги, достаточно их упомянуть, кратко сказать что и как и как лучше их использовать, например для проверки правильности ввода телефонных номеров, урл, маил - один примерчик,
дать ссылку на статью про реги.

реги - это только наглядный пример, тоже относится и к БД и к обработки форм

я понимаю, что тобой сделан большой труд,
но хочу добавить, что правильно изложить в три раза труднее, чем просто написать.

Ты просил как правильно - я ответил.
Думаю старожилы со мной согласятся.

Дерзайте Шура, они золотые:)
 

_RVK_

Новичок
Alexandre наверное ты прав. статье не хватает конкретики. Есть несколько примеров, но они слишком общие для полного понимания сути. Вообще, это сделано специально. В статье изложены идеи, а как применить эти идеи на практике читатель должен решить сам. Наверное это неправильно. Постараюсь доработать, спасибо за замечание.
 

Alexandre

PHPПенсионер
а как применить эти идеи на практике читатель должен решить сам. Наверное это неправильно
правильнее будет, если подсказать читателю, как все это применить.

Написание статей ради написания (или самих статей) - бессмысленно, но наверно, через это проходит каждый.

В результате, кол-во должно перейти в качество. И чем быстрее - тем лучше

недоработанные статьи - действительно наводят только туман, а в худшем случае отпугивают читателя.

К сожалению , хороших критиков не хватает ;)

-~{}~ 22.07.04 12:33:

может здесь сабака зарыта
http://phpclub.ru/talk/showthread.php?s=&postid=360276#post360276
 

Oleg Marchuk

Человек
PHP:
<?php 
function escapestring($string) 
{ 
   if (!get_magic_quotes_gpc()) 
   { 
      return mysql_escape_string($string); 
   } 
   else 
   { 
      return $string; 
   } 
} 
?>
Я бы не рекомендовал эту функцию к использованию. Она злая и не хорошая и может быть источником скрытых ошибок. Как минимум из-за того, что функции addslashes() не эквивалентна функции mysql_escape_string() и как максимум, что они имеют сходное, но не одинаковое предназначение. О путанице между get_magic_quotes_gpc() и mysql_escape_string() я уже вообще молчу.

Предлагаю переписать этот абзац.
 

lucas

Guest
Oleg Marchuk

Только там [в мануале] ответа нет на вопрос "Почему".
Разве? "[Because] The @-operator works only on expressions [and foreach is not an expression]."

Diesel

почему устаревшая
Сорри, неправильное слово подобрал.
ИМХО, статья действительно хорошая, но несколько запоздавшая.
[::мечтательно вздыхая::] Ей бы в факе лежать минимум годик, вот пользы бы было!

Кстати, этой ссылке (http://phpclub.ru/talk/showthread.php?s=&threadid=44525&rand=90) в статье места не найдется?
 
Сверху