| |
|
|
| | Задача очень простая: если в переменной $out есть фраза "error code", то надо перейти на страницу с именем ins-3.php
Я написал этот фрагмент так:
$flag_error = strstr($out, "error code");
if ($flag_error)
{
echo "<br><br><br>НАЙДЕН КОД ОШИБКИ <br><br><br>";
echo "<HTML><HEAD><META HTTP-EQUIV='Refresh' CONTENT='0; URL=ins-3.php;'></HEAD></HTML>";
exit;
}
|
Мелькает надпись НАЙДЕН КОД ОШИБКИ, но переход на нужную страницу происходит лишь при наличии оператора exit, который, по идее, совершенно неуместен! Но без него скрипт не работает.
Почему так? | |
| |
|
|
| |
|
|
| |
для: Владимир55
(26.07.2007 в 20:19)
| | | А если так?
$flag_error = strstr($out, "error code");
if ($flag_error)
{
echo "<HTML><HEAD><META HTTP-EQUIV='Refresh' CONTENT='0; URL=ins-3.php;'></HEAD><BODY><br><br><br>НАЙДЕН КОД ОШИБКИ<br><br><br></BODY></HTML>";
exit;
}
|
| |
| |
|
|
| |
|
|
| |
для: Владимир55
(26.07.2007 в 20:19)
| | | >Задача очень простая: если в переменной $out есть фраза "error code", то надо перейти на >страницу с именем ins-3.php
>...
>Мелькает надпись НАЙДЕН КОД ОШИБКИ, но переход на нужную страницу происходит лишь >при наличии оператора exit, который, по идее, совершенно неуместен!
В рамках освещенной вами задачи, этот оператор очень даже уместен.
И если вам эта запись "НАЙДЕН КОД ОШИБКИ" не обязательна, то проще заменить вот на такой код:
$flag_error = strstr($out, "error code");
if ($flag_error)
{
header("location: ins-3.php");
exit;
}
|
| |
| |
|
|
| |
|
|
| |
для: Владимир55
(26.07.2007 в 20:19)
| | | >но переход на нужную страницу происходит лишь при наличии оператора exit, который, по идее, совершенно неуместен
Аргументируйте.
Код страницы сформирован полностью..
Теперь остается ждать следующего запроса от браузера - к странице ins-3.php
Почему неуместен exit ? | |
| |
|
|
| |
|
|
| |
для: Trianon
(26.07.2007 в 22:39)
| | | Признаться, я полагал код
echo "<HTML><HEAD><META HTTP-EQUIV='Refresh' CONTENT='0; URL=ins-3.php;'></HEAD></HTML>";
|
аналогом безусловного перехода. Что-нибудь типа jump ins-3.php (в ассемблере). А если мы уже перешли на страницу ins-3.php, то какой бы ни был код позже б.п., он ведь уже все равно выполняться не будет.
Разве не так?
И если я напишу
$flag_error = strstr($out, "error code");
if ($flag_error)
{
echo "<HTML><HEAD><META HTTP-EQUIV='Refresh' CONTENT='0; URL=ins-3.php;'></HEAD></HTML>";
echo "Я здесь!";
}
|
то эти слова никогда не будут воспроизведены.
Разве не так? | |
| |
|
|
| |
|
|
| |
для: Владимир55
(26.07.2007 в 23:32)
| | | Нет не так, этот код, как и остальной HTML будет передан браузеру полностью, а уж потом клиент решит что делать. Некоторые браузеры некорректно работают с такой конструкцией, поэтому по-моему предпочтительней пользоваться header("Location: url")
P.S. Кстати и в случае с header'ом не лишним было бы воспользоваться функцией exit(); | |
| |
|
|
| |
|
|
| |
для: Владимир55
(26.07.2007 в 23:32)
| | | exit нужен! Если его нет, то скрипт продолжает работу и вывод всех последующих данных на экран юзеру, а если там ещё и какие то данные нужны для вывода, то скрипт просто выдаст с ошибкой "кашу малашу" или вообще до FATAL ERROR дойдёт! Exit рулед! | |
| |
|
|
| |
автор: Trianon (лень лезть за паролем) (27.07.2007 в 02:37) |
|
| |
для: Владимир55
(26.07.2007 в 23:32)
| | | код echo "<HTML><HEAD>......> " является аналогом не безусловного перехода (которого в php вообще нет)
Он является аналогом оператора печати.
вот его эквиваленты на других языках
cout << "<HTML><HEAD>..."; // С++
\printf("<HTML><HEAD>..."); // C
writeln('<HTML><HEAD>...') // pascal
PRINT 5
5 FORMAT('<HTML><HEAD>...') // Fortran
output('<HTML><HEAD>...') // Algol | |
| |
|
|
| |
|
|
| |
для: Trianon (лень лезть за паролем)
(27.07.2007 в 02:37)
| | | Если так, то конечно...
Странно, что в других аналогичных конструкциях в этом же скрипте нормально работает без exit. Признаться, я и здесь exit вставил лишь для отладки, поскольку долго не мог отловить ошибку. Но теперь, благодаря Вам, я буду стараться писать код корректнее.
Спасибо! | |
| |
|
|
| |
|
|
| |
для: Владимир55
(27.07.2007 в 16:39)
| | | Ваша основная догма в том, что Вы считаете, что программа написана на одном языке и исполняется на одной машине.
В то время как типиный интернет-сеанс - это многочисленная серия взаимных коротких перемежающихся вызовов нескольких различных программ, исполняющихся различными обработчиками.
Грубо:
Исполнение php кода сервером генерирует html-код и заголовок к нему.
В общем случае исполнение html-кода браузером приводит к тому что на экране пользователя отрисовывается страница и следуют новые запросы за стилями , фреймами и картинками.
Исполнение заголовка (header(Location) браузером порождает запрос к другому php-коду
Исполнение html кода Meta Refresh браузером порождает запрос к другому php-коду
Исполнение html-кода < script > порождает Javascript-код
Исполнение Javascript-кода может породить как новый html так и новый php-запрос
Нажатие на ссылку пользователем или отправка им формы также порождает новый запрос к php
Заголовок header(Location) в некоторых случаях может недолететь до драузера и быть исполнен самим сервером apache (внутренний, серверный редирект)
И т.д.
Вот такая она - веб-паутина.... | |
| |
|
|
| |
|
|
| |
для: Trianon
(27.07.2007 в 17:29)
| | | Вы совершенно правы относительно моей догмы. Надо её менять, буду стараться. Но это не так легко, как хотелось бы!
Сейчас так много людей программирует с применением рнр, в том числе далекие от техники и даже школьники. Неужели каждый из них владеет такими фундаментальными знаниями? | |
| |
|
|
| |
|
|
| |
для: Владимир55
(27.07.2007 в 19:59)
| | | Да, собственно ничего сложного нет, нужно только представить две взаимодействующие машины - часть кода (PHP, SQL-запросы - серверная часть) может исполнятся только на одной машине, а другая только на другой (HTML, JS, Flash). Чтобы лететь по воздуху - нужно покупать авиа-билеты, а чтобы ехать по земле воспользоваться автомобилем или купить железнодорожные билеты.
Для вас всё будет в скорости очевидным - вопрос лишь времени и практики. Просто объём информации очень большой - языков и технологий в Web не просто много, а очень много. Поэтому чтобы всё уложить в мозаику необходимо время. | |
| |
|
|