Есть функция в скрипте.
Типа такой:
function error($a)
{
$_SESSION['error']=$a;
return;
}
// код
...
else
{
error($a1);
return;
}
//код
...
else
{
error($a2);
return;
}
Короче связку
else{error($a1);return;}приходится много раз делать.
Я понимаю, что смысл return внутри функции и внутри самого скрипта разный, но нет ли способа не писать 20 раз это в скрипте, чтоб выйти, а писать только
else error($a1);например?
Можно конечно писать на прямую $_SESSION['error']='1a'; и т.д. но смысл тот же.
Спустя 2 минуты, 45 секунд (14.06.2012 - 13:33) inpost написал(а):
Зачем тебе return писать? Вообще не понимаю...
Спустя 5 минут, 8 секунд (14.06.2012 - 13:38) GET написал(а):
inpost
ну да внутри функции можно не писать...
но чтоб выйти из скрипта не дожидаясь завершения скрипта и не писать проверок типа продолжить если ошибок выше нет
ну да внутри функции можно не писать...
но чтоб выйти из скрипта не дожидаясь завершения скрипта и не писать проверок типа продолжить если ошибок выше нет
Спустя 1 минута, 11 секунд (14.06.2012 - 13:40) GET написал(а):
Чтоб сразу остановить скрипт и вернутся назад...в браузере там ничего не выводится это обработчик ошибок
Спустя 11 минут, 27 секунд (14.06.2012 - 13:51) inpost написал(а):
A.B.C.
return пишется ВНУТРИ функции, а не при её вызове... там то ему точно нет места. Ты что-то сам запутался в том, что тебе надо.
return пишется ВНУТРИ функции, а не при её вызове... там то ему точно нет места. Ты что-то сам запутался в том, что тебе надо.
Спустя 3 минуты, 54 секунды (14.06.2012 - 13:55) GET написал(а):
inpost
return - тот что в функции выйдет из нее, вернет значение и т.д. я про return, который вернется из инклюдиемого файла...внутри которого функция, чтоб он и из функции вышел и из подключаемого файла одновременно.
return - тот что в функции выйдет из нее, вернет значение и т.д. я про return, который вернется из инклюдиемого файла...внутри которого функция, чтоб он и из функции вышел и из подключаемого файла одновременно.
Спустя 2 минуты (14.06.2012 - 13:57) GET написал(а):
index.php
include'1.php';
1.php
include'1.php';
1.php
function error($a)
{
$_SESSION['error']=$a;
return;
}
// код
...
else
{
error($a1);
return;// вернутся в index.php
}
Спустя 6 минут, 39 секунд (14.06.2012 - 14:04) inpost написал(а):
А, понял. Нет, по крайней мере я не знаю. Ты выходишь только из данного уровня через return.
Спустя 14 секунд (14.06.2012 - 14:04) TMake написал(а):
A.B.C. exit('Error'); тебе поможет раз и на всегда.
вообще не вижу смысла для такой реализации как у тебя.
Пользуйся throw new Exception();
вообще не вижу смысла для такой реализации как у тебя.
Пользуйся throw new Exception();
Спустя 1 минута, 43 секунды (14.06.2012 - 14:06) GET написал(а):
Да...это не реально наверное, я просто подумал, может типа exit; метод существует только он не останавливает скрипт полностью, а выходит из текущего, даже если находится внутри функции.
stepan Я хочу ошибку в логи занести, а не просто exit;
stepan Я хочу ошибку в логи занести, а не просто exit;
Спустя 8 минут, 31 секунда (14.06.2012 - 14:14) GET написал(а):
Цитата |
Пользуйся throw new Exception(); |
спасибо, даже не знал про это.
Спустя 15 минут, 46 секунд (14.06.2012 - 14:30) neadekvat написал(а):
Исключение останавливает выполнение программы. Не надо пихать его везде и всюду.
По тому, что ты показал:
По тому, что ты показал:
function log($msg)
{
file_put_contents('log.log', $msg, FILE_APPEND);
}
function some()
{
...
return err($msg); // NULL
}
Спустя 34 минуты, 23 секунды (14.06.2012 - 15:04) GET написал(а):
Спасибо.
Еще вопрос хотел задать по ошибкам.
Если я перехватываю все ошибки при помощи set_error_handler, записываю их в лог файл, тогда в запросах к БД нужно ставить
Правильно я понял? Существуют ли ошибки некритичные mysql_error(), т.е. как бы предупреждения из за которых останавливать (or die) скрипт не надо.
Ну например часть информации вышла в цикле запроса а какая-нибудь строка некорректна или типа того, как тогда быть?
Еще вопрос хотел задать по ошибкам.
Если я перехватываю все ошибки при помощи set_error_handler, записываю их в лог файл, тогда в запросах к БД нужно ставить
or die(mysql_error());чтоб и прекратить работу скрипта и занести ошибку.
Правильно я понял? Существуют ли ошибки некритичные mysql_error(), т.е. как бы предупреждения из за которых останавливать (or die) скрипт не надо.
Ну например часть информации вышла в цикле запроса а какая-нибудь строка некорректна или типа того, как тогда быть?
Спустя 6 минут, 42 секунды (14.06.2012 - 15:11) neadekvat написал(а):
Запросы обычно делают через обертку, чтобы это было явно:
Если при запросе к бд есть ошибка, то на сайте не должно отображаться ничего, кроме, собственно, сообщения для пользователя о том, что сайт временно недоступен.
function sql_query($sql)
{
$query = mysql_query($sql);
if ($query)
return $query;
// записываем ошибку в лог, останавливаем выполнение скрипта
}
Если при запросе к бд есть ошибка, то на сайте не должно отображаться ничего, кроме, собственно, сообщения для пользователя о том, что сайт временно недоступен.
Спустя 3 минуты, 14 секунд (14.06.2012 - 15:14) GET написал(а):
Спасибо.
Спустя 2 минуты, 56 секунд (14.06.2012 - 15:17) johniek_comp написал(а):
я делаю так
а метод write мне еще останавливает скрипт и выводит что сайт не доступен
mysql_query() or die($logs->write(mysql_error()));
а метод write мне еще останавливает скрипт и выводит что сайт не доступен
Спустя 10 минут, 34 секунды (14.06.2012 - 15:28) GET написал(а):
johniek_comp
разве or die не останавливает?
разве or die не останавливает?
Спустя 7 минут, 27 секунд (14.06.2012 - 15:35) TMake написал(а):
Цитата (A.B.C. @ 14.06.2012 - 16:28) |
разве or die не останавливает? |
Все верно, останавливает.
Тебе только исключение нужно, а кошерно бит орехи кувалдой не профессионально.
Спустя 4 минуты, 27 секунд (14.06.2012 - 15:40) GET написал(а):
stepan
не понимаю...остановка же не в самом методе write, там как я понимаю идет запись ошибки и вывод странички о недоступности сайта, так ведь. Т.е. это последние что делает скрипт перед die.
не понимаю...остановка же не в самом методе write, там как я понимаю идет запись ошибки и вывод странички о недоступности сайта, так ведь. Т.е. это последние что делает скрипт перед die.
Спустя 7 минут, 58 секунд (14.06.2012 - 15:47) TMake написал(а):
A.B.C. организовано логирование. apache и так логирует все что нужно, поэтому это лишнее, конечно если оно не используется для чего то...
Спустя 3 минуты, 22 секунды (14.06.2012 - 15:51) GET написал(а):
Ок. Спасибо.
Спустя 9 минут, 6 секунд (14.06.2012 - 16:00) killer8080 написал(а):
Цитата (A.B.C. @ 14.06.2012 - 15:04) |
Если я перехватываю все ошибки при помощи set_error_handler, записываю их в лог файл, тогда в запросах к БД нужно ставить or die(mysql_error()); чтоб и прекратить работу скрипта и занести ошибку. |
Во первых set_error_handler() не перехватывает все ошибки.
Во вторых конструкцию or die(mysql_error()); в продакшине, уже можно считать уязвимостью, т.к. через неё взломщик может получить информацию о внутренней структуре каталогов сервера, названиях и структуре таблиц бд, и т.п. и использовать собранную инфу для атаки. Поэтому её допустимо использовать только при отладке, и главное не забывать убирать.
Поэтому все ошибки перехватывать и писать в лог, как уже писали выше, а юзеру показывать стандартную страницу с ошибкой, и не забывать при этом выдавать 503 статус код, чтоб поисковики не приняли текст ошибки за реальный контент. По перехвату ошибок на дклабе есть хорошая статейка.
Спустя 2 часа, 32 минуты, 1 секунда (14.06.2012 - 18:32) johniek_comp написал(а):
я примерно описал, а не скопировал код с проекта! вы что настолько тупые???
Спустя 1 час, 35 минут, 24 секунды (14.06.2012 - 20:07) killer8080 написал(а):
Цитата (johniek_comp @ 14.06.2012 - 18:32) |
я примерно описал, а не скопировал код с проекта! вы что настолько тупые??? |
Чё за реплика
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.