Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Неустойчивая работа скрипта

Сообщения:  [1-10]   [11-12] 

 
 автор: cheops   (28.07.2007 в 12:38)   письмо автору
 
   для: Владимир55   (27.07.2007 в 19:59)
 

Да, собственно ничего сложного нет, нужно только представить две взаимодействующие машины - часть кода (PHP, SQL-запросы - серверная часть) может исполнятся только на одной машине, а другая только на другой (HTML, JS, Flash). Чтобы лететь по воздуху - нужно покупать авиа-билеты, а чтобы ехать по земле воспользоваться автомобилем или купить железнодорожные билеты.

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

   
 
 автор: Владимир55   (27.07.2007 в 19:59)   письмо автору
 
   для: Trianon   (27.07.2007 в 17:29)
 

Вы совершенно правы относительно моей догмы. Надо её менять, буду стараться. Но это не так легко, как хотелось бы!

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

   
 
 автор: Trianon   (27.07.2007 в 17:29)   письмо автору
 
   для: Владимир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 (внутренний, серверный редирект)

И т.д.

Вот такая она - веб-паутина....

   
 
 автор: Владимир55   (27.07.2007 в 16:39)   письмо автору
 
   для: Trianon (лень лезть за паролем)   (27.07.2007 в 02:37)
 

Если так, то конечно...

Странно, что в других аналогичных конструкциях в этом же скрипте нормально работает без exit. Признаться, я и здесь 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

   
 
 автор: Proger   (27.07.2007 в 00:16)   письмо автору
 
   для: Владимир55   (26.07.2007 в 23:32)
 

exit нужен! Если его нет, то скрипт продолжает работу и вывод всех последующих данных на экран юзеру, а если там ещё и какие то данные нужны для вывода, то скрипт просто выдаст с ошибкой "кашу малашу" или вообще до FATAL ERROR дойдёт! Exit рулед!

   
 
 автор: Ziq   (26.07.2007 в 23:36)   письмо автору
 
   для: Владимир55   (26.07.2007 в 23:32)
 

Нет не так, этот код, как и остальной HTML будет передан браузеру полностью, а уж потом клиент решит что делать. Некоторые браузеры некорректно работают с такой конструкцией, поэтому по-моему предпочтительней пользоваться header("Location: url")

P.S. Кстати и в случае с header'ом не лишним было бы воспользоваться функцией exit();

   
 
 автор: Владимир55   (26.07.2007 в 23:32)   письмо автору
 
   для: 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 "Я здесь!";


то эти слова никогда не будут воспроизведены.

Разве не так?

   
 
 автор: Trianon   (26.07.2007 в 22:39)   письмо автору
 
   для: Владимир55   (26.07.2007 в 20:19)
 

>но переход на нужную страницу происходит лишь при наличии оператора exit, который, по идее, совершенно неуместен

Аргументируйте.
Код страницы сформирован полностью..
Теперь остается ждать следующего запроса от браузера - к странице ins-3.php
Почему неуместен exit ?

   
 
 автор: testdriver   (26.07.2007 в 22:10)   письмо автору
 
   для: Владимир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;
}

   

Сообщения:  [1-10]   [11-12] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования