Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программируем на PHP - вопросы и ответы.


Информационный Канал Subscribe.Ru

Здравствуйте! Выпуск номер 66
рассылки сайта РНР для всех!

Вы получили этот выпуск рассылки, так как являетесь подписчиком рассылок сайта http://subscribe.ru Рассылка выходит еженедельно, и предлагает Вам авторские материалы по теме программирования на скриптовом языке гипертекстового препроцессора РНР. Кроме того - есть система вопросов и ответов, обмен ссылками и баннерами, раздел Ваши письма и многое другое.
Форум сайта
Архив рассылки

Сайт автора

Важная информация:

 

Простейшие ошибки

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

  • Самое распространенное - не стоит завершающая оператор точка с запятой. Не ставится она только в конструкции if () {} {} Основной признак - ошибка в следующей строке за тем оператором, в котором нет точки с запятой. В окно браузера, если только это разрешено, посылается сообщение об ошибке, имя и путь к файлу, в котором произошла ошибка и порядковый номер строки (вот где нам пригодится нумерация строк!). Выглядит это следующим образом:

Parse error: parse error in c:\usr\local\public_html\host\virtual\index.phtml on line 2 

  • При сравнении на равенство двух переменных ставится два знака равенства. Исключений нет. Основной признак - скрипт работает, но не так как это от него ожидается. Найти такую ошибку бывает порой очень трудно. Ведь сообщений не появляется, так как с точки зрения парсера тут нет ошибки. Бороться можно только одним способом – внимательно писать сравнения и не забывать об этом правиле.
  • В конструкции if () {} {} отсутствует или стоит лишний завершающий знак - } Исключений нет. Признак этой ошибки очень простой, и позволяет детектировать эту ошибку очень просто. При запуске скрипта на выполнение интерпретатор выдает ошибку в самой последней строчке кода, где стоит завершающий тег ?>. Однако найти где именно не стоит кавычка, бывает не так уж и просто. Придется перелопатить весь код. Иногда меня выручала обычная интуиция – вместо того, что бы искать ошибку, исследуя весь код, я ставил ее в предполагаемом месте и смотрел, как работает программа. Раза с 5-го все получалось. Но это уже из области личных пристрастий.

А вот теперь более сложный вопрос по ошибкам. На самом деле, его следовало бы рассмотреть чуть позже, после того, как мы рассмотрим примеры работы сессий и cookie. Что это такое? Мы познакомимся чуть позже на примерах, и Вы все узнаете. Но раз уж тут у нас разговор зашел об элементарных ошибках программиста, я не могу не упомянуть одну очень важную и нужную проблему. Речь идет о заголовках.

Давайте рассмотрим, как вообще работает браузер с сервером. А работает он с ним по специальному протоколу, который называется «HTTP». Когда Вы вводите адрес в адресной строке браузера и нажимаете ввод, программа посылает именно HTTP-запрос серверу, и на этот запрос сервер всегда отвечает, если только он доступен. Так вот, первыми в ответе сервера всегда идут так называемые «HTTP»-заголовки, и только потом уже могут идти какие-то символы, HTML, или картинки. Сервер устроен так, что заголовки посылаются автоматически перед любыми символами, даже перед пробелом. Это значит, что если хоть один символ ушел в браузер, заголовки уже давно там же и вторично их послать никак нельзя. А PHP умеет работать с этими заголовками, используя их при работе, например, с сессиями, cookie, header и т.д.

Вот тут-то и возникает эта ошибка. Ее текст в окне браузера может выглядеть примерно так: Warning: Cannot add header information - headers already sent by (output started at /site/name.phtml:3) on line 5. Анализ этой строчки дает нам следующее. Ошибка отправки заголовков. Дальше РНР сообщает, в каком скрипте и в какой его строке (output started at /site/name.phtml:3) произошел вывод информации, вызвавший автоматическую посылку заголовков. Очень легко найти и исправить. Может быть там HTML теги, может быть, echo, а может и просто пустая незамеченная строка или пробел перед первым тегом <?.

Очень часто такую ошибку вызывает файл, подключаемый через include, в котором либо есть какой-то вывод, либо пустая строка после закрывающего PHP тега - обнаружить ее очень трудно. Для решения этой проблемы нужно функцию header() (или session_start(), setcookie), поместить ДО любого вывода в браузер. Просто перенести повыше в скрипте.

Эта ошибка появляется не оттого, что у вас в скрипте "что-то написано выше". А потому, что РНР выводит что-то в браузер. Это не обязательно код. Это может быть сообщение об ошибке, может быть пробел или HTML тег. Речь идет о любом символе, отправленном в браузер, а не только о тех, которые браузер отображает неискушенному пользователю. У HTML страниц есть исходный текст, и именно он является результатом работы PHP скрипта, а не то, что показывает на экране браузер пользователю. Добраться до исходного кода HTML можно достаточно легко, надо в браузере найти в меню ВИД-Просмотр HTML-кода.

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

Пример по сравнению чисел 

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

<?php
$w = "4"; // первое число
$e = "6"; // второе число
if ( $w == $e )

{

echo $w+$e; // если 1-е и 2-е равны выводим их сумму

exit;

}
if ( $w > $e ) { echo $w; } else { echo $e; }

// если нет – и одно больше другого – выводим числа
exit;
?> 

Вот и весь скрипт! На входе имеем два числа. Не важно, откуда они берутся, важно то, что мы потом с ними делаем. А делаем мы с ними вот что.

Сначала пытаемся проверить, равны числа или нет. Обратите внимание на двойной знак равенства в операторе if. Дело в том, что если оставить тут один знак равенства, переменной $w будет присвоено значение переменной $e. А в нашем случае надо проверить, равны ли переменные. Это и достигается двумя знаками равенства. Другими словами, если Вам надо провести сравнение, равны ли две переменных, не забудьте поставить два знака равенства - это вторая самая распространенная ошибка начинающих программистов. Поставите один - и будете очень долго искать правды от Вашего скрипта, а работать он в упор не будет.

Если числа равны, выводим их сумму, что достигается простым знаком плюс между переменными и командой «echo» а потом завершаем скрипт, если это надо командой «exit». Этого, кстати можно было бы и не делать, в этом случае интерпретатор пошел бы дальше обрабатывать код, и в конце его нашел бы туже команду, но... Время, братцы, время... Старайтесь не заставлять интерпретатор производить ненужные действия, и он отплатит Вам приличной скоростью работы.

Если же числа не равны, код вывода на экран суммы (обратите внимание, что он заключен в кавычки типа {}) будет проигнорирован, и интерпретатор продолжит свою работу дальше. А дальше у нас идет проверка, какая из переменных больше. Само собой, что если переменные не равны, то одна из них больше, а другая меньше.

Итак, если $w>$e, выводим на экран $w, так как оно больше. А если условие не выполняется (короче - $w<=$e) , выполняется конструкция в скобках после «else». Но так как на равенство мы уже проверяли вначале скрипта, то эта конструкция выполнится, только если $w<$e. Вот тут то и пригодился нам оператор «exit» в предыдущей строке, так как если бы его не было, на экран кроме суммы переменных была бы выдана переменная $e.

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

Наши друзья

http://virtual.brest.by - Виртуальный Брест. Региональный информационно - развлекательный портал города Бреста. Чат, форум, статьи, услуги, объявления, недвижимость, каталог сайтов - это и многое другое ждет Вас на страницах сайта.
http://204040.com - Интернет-магазин компьютерного салона Успех г. Брест
http://tweak.tut.by - http://tweak.bresttelecom.by - Оптимизация и настройка компьютера. Если Вас интересуют различные аспекты настройки Вашего мегагерцевого друга, Вам надо посетить сайт посвященный настройке и оптимизации. Кроме того - список последних версий популярных программ и свежие новости, а так же чат, форум и многое другое!

автор рассылки Андрей Кухарчик / http://virtual.brest.by/php



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу


В избранное