Konon.mob А. Кухарчик РНР: обучение на примерах Просто и доступно изложены основы РНР — популярного языка написания скриптов для Web-страниц. Выполняя несложные примеры, читатель сможет освоить азы программирования на РНР, создать динамическую страницу, счетчик посещения сайта, систему голосования, адресную книгу, интернет-магазин. Описаны типичные ошибки использования сценариев, а также пути их исправления. Книга содержит фрагменты кода, который можно применять при создании собственных проектов. Предназначена прежде всего для начинающих, но может быть полезна и опытным программистам, использующим РНР. Интернет уже давно прочно вошел в нашу жизнь. Прошли те времена, когда многие пользователи персональных компьюте- ров в целях экономии дискового пространства удаляли програм- му Internet Explorer из всеми нами любимой операционной сис- темы, так как просто не нуждались в ней. Теперь даже те, у кого нет доступа к «Паутине», стараются не трогать эту программу, ведь форматы интернета давно уже перешли в другие сферы на- шей компьютерной жизни. Очень часто в формате HTML (см. приложение 1) выпускаются различные электронные книги (например, энциклопедии), журналы и т.д. И все это многооб- разие в обязательном порядке требует наличия на компьютере браузера — программы для просмотра HTML-документов. Яр- кий представитель этого класса — Internet Explorer, благода- ря стараниям корпорации Microsoft давно уже вышедший в лидеры программ такого рода. А уж если в компьютере поселился модем (что по нынешним временам далеко не редкость, цены на модемы сильно снизи- лись), избежать программы-браузера просто невозможно. Ведь хочется же хоть одним глазком посмотреть, а что же там, в боль- шом мире. И когда знакомство с интернетом состоялось, отка- заться от преимуществ Сети не так-то просто. Через некоторое время бестолкового (или толкового) путешест- вия по интернету начинаешь осознавать, что надо как-то реали- зовать себя и обозначиться на бескрайних просторах Глобальной сети. Своя страница в интернете — это даже престижно, и пусть там мало полезного, а счетчик фиксирует только ваши не частые Что такое интернет 8 посещения, сделанное может стать началом серьезного проекта и изменить всю вашу жизнь. Путешествуя по просторам интернета, вы, наверное, не раз обра- щали внимание на адреса страниц, которые порой достигают внешне очень больших размеров и просто приводят в недоумение наличием странных символов. И конечно, все имели дело с фор- мами, которые требовалось заполнить и получить что-то взамен (услуги, вещи и т.д.). Или видели постоянно изменяющиеся стра- ницы, на которых сначала одно, а через минуту — уже другое. Но немногие задумываются над тем, как все это работает. Пред- лагаю вам окунуться в мир программирования. Этот мир во мно- гом ни на что не похож, но у него есть свои законы и правила, свои плюсы и минусы. После первого шага, сделанного в этом мире, идти будет уже гораздо легче. Сегодня практически не осталось человека, который не слышал бы об интернете. Еще с десяток лет назад о нем знали только специалисты узкого профиля, а пользователей можно было пере- считать буквально по пальцам. Но время идет вперед, и то, что еще вчера казалось дорогим и ненужным удовольствием, сегодня не только реальность, но и насущная необходимость. Итак, что такое интернет? Это слово пришло к нам из англий- ского языка и является составляющим от слов «inter» и «net» (между и сеть). Понятно, что это слово должно обозначать какую-то связь между сетями, в которые объединены компьютеры в различных местах. Так оно и есть на самом деле. Интернет — это свободная международная сеть компьютеров, объединяю- щая в себе все страны и все континенты нашей планеты. Впе- чатляет? Да, действительно, работая в интернете, вы с легкостью перемещаетесь между компьютерами (виртуально, конечно), ко- торые могут быть расположены на огромных расстояниях друг от друга. Физически интернет представляет собой сеть из волоконно-оп- тических или медных проводов, соединяющих удаленные друг от друга компьютеры или сети компьютеров, на которых размещена различная информация. Вместо проводов могут применяться Что такое интернет другие современные технологии: радио, лазерная или инфра- красная связь, GPRS и т.д. Впрочем, для нас это пока дело неда- лекого будущего. Компьютеры, обслуживающие интернет, тоже несколько необычные. Это не те «персоналки», которые мы привыкли видеть на работе или дома, а специальные серверы, которые умеют одновременно выполнять сразу несколько важ- ных функций, обеспечивая бесперебойную работу интернета круглосуточно. Для них пишут специальные программы и опера- ционные системы, производят надежное оборудование с повы- шенными требованиями, и управляют всем этим специалисты высокого уровня. Точного дня рождения интернета никто не знает. Известно толь- ко, что первые разработки производились в 1969 году в США. Тогда эти исследования были строго засекречены и предназнача- лись в первую очередь для военных целей. Отпечаток тех далеких дней до сих пор лежит на структуре интернета — он работает практически независимо от конкретных серверов и магистраль- ных линий. Повреждение одного или нескольких каналов пере- дачи данных почти не сказывается на качестве связи, так как Сеть сама перестраивается и направляет информационные пото- ки по целым и наименее загруженным линиям. Основная идея интернета —- отсутствие централизованного управления. Именно этот факт и привел к взрывному развитию Сети. Сегодня интернет — это глобальная информационная сеть, доступная практически каждому желающему. По исследовани- ям на момент написания книги, почти 10 % населения нашей планеты (около 580 млн человек) имеют доступ к интернету. Если развитие Сети пойдет такими же темпами, как в послед- нее десятилетие, то к 2005 году будет преодолен рубеж в 1 млрд пользователей. Самая «интернетизированная» страна сегодня — это, как ни странно, Исландия. Доступ к Сети там имеет почти 70 % населе- ния страны. США занимают в этом списке только пятое место, уступив также Швеции, Дании и Гонконгу. Очень важную роль играет развитие телекоммуникационных услуг в стране и, конеч- но, уровень благосостояния населения. Ведь пользоваться услу- Что такое интернет 10 гами Сети можно не только при помощи настольных, но и кар- манных компьютеров, мобильных телефонов и т.д. Наиболее распространенный и самый старый сервис, предос- тавляемый интернетом, — это электронная почта. Практически мгновенная доставка сообщения привлекает все больше и боль- ше поклонников своей простотой и доступностью. Кроме тек- ста, есть возможность передать любой файл, прикрепляя его к письму. Но сервисом, принесшим интернету его нынешнюю из- вестность, по праву считают WWW (World Wide Web, Всемирная паутина). Она была создана в 1992 году Тимом Бернерсом-Ли из Европейского центра ядерных исследований (CERN), располо- женного в Женеве (Швейцария). К октябрю 1993 года WWW на- считывала около 200 действующих Web-серверов, а уже к июню 1995 года — свыше 6,5 млн. В настоящее время существует более 36 млн Web-серверов, разбросанных по всему миру. Всемирная паутина представляет собой систему связанных друг с другом страниц, использующих так называемый гипертекст. Связь между страницами и связь одного места на странице с другим осуществляют гиперссылки. При помощи простого щелчка мышью по гиперссылке, которая может быть не только в виде текста, но и графического изображения, можно перейти в любое место Сети. Специальный язык разметки гипертекста называется HTML (HyperText Markup Language). Он позволяет разместить на странице текст, картинки, оформить простой текст (выделить курсивом, полужирным, изменить размер, тип или цвет шрифта и т.д.), а также сделать еще много других инте- ресных вещей. Подробнее про HTML читайте в приложении 1. Каждый документ в интернете имеет свой уникальный URL (Uniform Resource Locator, унифицированный указатель ресур- сов). Он является ключом к поиску информации, находящейся в Сети. Введя URL в адресную строку браузера, можно получить полную информацию, содержащуюся на удаленном компьютере, которому присвоен такой адрес. Рассмотрим URL на примере: http://www.wnk.biz/some_directory/index.html Что такое интернет 11 Адрес читается слева направо. Первая его часть — h t t p : / / — указывает тип сервера, которым вы хотите воспользоваться. В частности h t t p : // указывает на протокол HTTP (см. ниже). Вторая часть адреса — www.wnk.biz — доменное имя сервера. Домены — это зоны, на которые делится интернет и которые в свою очередь подразделяются по типу: домен com — обозначает коммерческие организации, edu — учебные и научные, gov — правительственные, mil — военные, n e t — сетевые, org — дру- гие организации. Кроме того, существуют домены, указывающие на страну, в которой расположен данный сервер. Например, by — Беларусь, ru — Россия, ua — Украина, pl — Польша и т.д. Каждой стране присвоен свой уникальный домен. Это все домены первого уровня. Они подчиняются специальной международной организации, созданной для контроля и наблюдения за интерне- том. Именно там недавно было принято решение об открытии но- вых доменов, например: i n f o — информационные ресурсы, b i z — бизнес-ресурсы и т.д. Третья часть — s o m e _ d i r e c t o r y — указывает путь на сервере (каталог some_directory) к файлу, который вы собираетесь от- крыть. Последним следует имя самого файла — index — и его расшире- ние — html. На самом деле, все адреса в Сети, как, впрочем, и любая инфор- мация в компьютере, представлены в виде набора цифр. Каждый сервер имеет свой уникальный адрес, например 192.128.45.194. Это так называемый IP-адрес компьютера, и уже с ним ассоции- руются нормальные имена сайтов, которых на одном сервере с одним IP-адресом может быть очень много. Сайт — это набор различных интернет-документов, объединен- ных под одним адресом. Сайты бывают самых различных тема- тик: поисковые, каталоги, информационные, личные странички, игровые и т.д. Очень многие сайты рекламируют друг друга и, та- ким образом, поднимают свою посещаемость. А высокая посе- щаемость — это залог привлекательности сайта для рекламодате- ля, а значит, возможность заработать. Что такое интернет 12 Вот так устроен интернет. Это только малая часть его возможно- стей, но зато наиболее часто используемая. Зачем нужен интернет? Интернет может служить универсаль- ным средством для многих слоев населения планеты. Именно поэтому он и приобрел такую огромную популярность. Во-пер- вых, это огромное количество информации. Настолько огромное, что существуют специальные сайты — каталоги и поисковики, которые регулярно автоматически просматривают доступные участки Сети и педантично регистрируют содержимое докумен- тов в своих базах данных. Во-вторых, это универсальное средст- во общения. Всевозможные чаты, электронная почта, телекон- ференции — чего только не придумано для того, чтобы упро- стить процесс контакта друг с другом. Интернет вдруг сделал весь мир очень маленьким и легкодоступным. Не представляет никаких трудностей одновременно общаться с друзьями из со- вершенно разных стран и континентов. И все это в реальном времени. В-третьих, интернет представляет собой четвертое сред- ство массовой информации (после газет, радио и телевидения). Пользоваться интернетом в этом качестве гораздо удобнее и эф- фективнее, чем всем остальным, вместе взятым. Кроме того, ус- тойчивость сети к катаклизмам часто играет просто неоценимую роль в развитии событий. Самый свежий пример — пожар на Останкинской телебашне в Москве в 2000 году. Тогда прекрати- ли работу теле- и радиосистемы, но интернет продолжал ис- правно функционировать, и люди могли продолжать получать информацию о развитии событий. Наконец — бизнес. В интер- нете можно не только получить информацию, но и, например, купить что-то в интернет-магазине или поучаствовать в интер- нет-аукционе. А если вы хороший специалист, вам не составит труда найти высокооплачиваемую работу. Не сомневаюсь, каждый найдет для себя что-то в интернете, на- столько он многообразен и универсален. Как пользоваться интернетом у себя дома? Чтобы ходить в ин- тернет, нужен компьютер. Достаточно слабого, подойдет даже старенький 486, но учитывайте то, что современные страницы уже давно не ограничиваются только текстом. Они полны графи- Что такое интернет 13 ки и активного содержимого, что определяет некоторые требова- ния к ресурсам компьютера. И конечно, современные браузе- ры — это объемные и многофункциональные программы, кото- рые также требовательны к системам, на которых они работают. Но в любом случае слабенького Pentuim вполне достаточно, а новые компьютеры даже более чем избыточны. Кроме компьютера нужен модем. Это специальное устройство, преобразующее цифровую информацию (понятную компьютеру) в модулированный аналоговый сигнал (который может быть пере- дан по телефонным линиям), и наоборот, воспринимающее такой сигнал и осуществляющее обратное преобразование. Само собой, наличие телефонной линии обязательно. Модемы бывают самые разные: недорогие и очень дорогие, внутренние и внешние, с до- полнительными возможностями и без них. Для дома будет вполне достаточно недорогого внутреннего модема. Он устанавливается в системный блок компьютера, не требует отдельного питания, прост в настройке и не занимает места на рабочем столе. Стои- мость такого устройства крайне мала, по сравнению со стоимо- стью компьютера, и приобретать его надо. Компьютер без модема сегодня — это то же самое, что телевизор без антенны. Если модем есть, нужно настроить соединение с провайдером. Провайдер — это организация, предоставляющая услуги по под- ключению к компьютерным сетям, в частности к интернету. Су- ществует такая услуга, как беспарольный доступ к интернету. Суть ее в том, что не надо заключать договор с провайдером, нет абонентской платы, а счет приходит вместе со счетом за телефон и включает в себя поминутную оплату времени, проведенного в интернете за прошедший месяц. Такой подход очень удобен, так как позволяет подключиться с любого компьютера без за- ключения договора и работать тогда, когда это необходимо. Приглашаю и вас приобщиться к интернету и внести в его разви- тие свой посильный вклад. Это совсем не так сложно, как кажет- ся на первый взгляд. Часть II Готовимся к созданию Web-страниц Самое главное в этом деле, как и в любом другом, — решиться. Далеко не так просто, как кажется на первый взгляд, принять ре- шение и начать делать все с нуля, на собственном опыте узнавая все «прелести» сайтостроительства. А тем более такого сложного, как, например, интернет-магазин. Честно говоря, я вам даже немного завидую. Вы сейчас держите в руках эту книгу и, может быть, даже думаете, читать ее или нет, нужно мне это программирование или просто воспользоваться го- товыми решениями? У меня, к сожалению, такого выбора просто не было. Я вынужден был заняться программированием просто потому, что так было надо для меня и для моей работы. Хотя, если посмотреть с другой стороны, это было даже к лучшему, иначе я просто не смог бы получить тот огромный (это мне так кажется) опыт разработки не только собственного интернет-магазина, чата, форума и т.д., но и многих других сервисов. Можно долго взвешивать все за и против выбора готового реше- ния, но я приведу довод, который перевешивает все остальные. В собственноручно сделанном проекте вы сможете быть хозяи- ном и не зависеть от каких бы то ни было разработчиков. Хочу, тут баннер поставлю, хочу, здесь форму для подписки на новости размещу. И это уже не говоря о том, что так выйдет не только на- много дешевле, но и перспективней! В процессе создания своих программ (пусть сначала небольших) закладывается база для сле- дующих, еще более серьезных проектов. Есть, правда, и минусы, как и в любом серьезном деле. Самый большой из них — время. Время, время и еще раз время. Это Железо, железо и еще раз железо... 15 часы, дни и ночи, убитые перед монитором в бесчисленных экс- периментах. Так что подумайте еще раз перед тем, как мы нач- нем. Тем более что я не всегда буду давать практически готовые решения, и вам просто придется многое додумывать и изобре- тать. Я стараюсь показать путь, а идти по нему придется уже са- мостоятельно. Иначе было бы неинтересно, правда? Итак — вперед... Железо, железо и еще раз железо... Как ни жаль, но без компьютера, желательно своего, «домаш- него», нам просто не обойтись. Почему именно домашнего? Объясняю. Когда я прихожу на работу в офис, то просто не могу написать ни строчки кода. Все ходят, что-то спрашивают, куда-то зовут, всем все надо именно в такой ответственный мо- мент! Совсем другое дело — дома. Не спеша встал, позавтракал, дети уже давно в садике (школе, университете, еще не вернулись с дискотеки и т.д.), сел себе спокойненько за компьютер — и ра- бота пошла, ни на что не отвлекаясь! К этому всему неплохо бы иметь хорошую жену, чтобы приготовила завтрак, отправила де- тей в школу и отвечала на телефонные звонки. Но тут я не совет- чик, ищите выход сами. Теперь, собственно, «железо», т.е. аппаратное обеспечение ком- пьютера. Не ждите, что я буду уговаривать вас использовать для работы самую современную технику. Да, это приятно, когда все работает и работает быстро. Но, взглянув правде в глаза, надо при- знать, что вполне достаточно правильно настроенного Pentium-I Windows 98. Что такое «правильно настроенного»? Поясню, на своем примере. У меня довольно мощный по сегодняшним мер- кам компьютер, но он пока один, и кроме меня его используют жена и не по годам смышленый старший сын. Да и младшая дочь уже ручонки протягивает. И мне надо как-то защищаться от этого безобразия, так как нет-нет да и поломают мои доброжелательные домочадцы что-то в системе. Готовимся к созданию Web-страниц 16 Вот и приходится или восстанавливать все заново, что мне про- сто лень делать, так как это долго, или ограничивать их права. Именно это я и делаю, и вам советую. Правда, в таком случае Pentium-I не обойдешься. Ему не вынести установленной у меня Windows XP с файловой системой NTFS. Я делаю так: себе на- значаю права администратора, сыну и жене — пользователя (эту умную мысль я прочитал где-то уже после того, как на собствен- ном опыте постиг истину). Вот уже больше года все в порядке. Если не считать плановых замен винчестера, когда я все равно предпочитаю переустанавливать систему, то больше ее трогать просто нет причин. Но это в идеале. Если так «разогнаться» нет возможности, уста- навливаем Windows 98 на компьютер, на котором она будет рабо- тать. Неплохо бы иметь побольше памяти, чтобы быстрее все ра- ботало, и винчестер немаленький, и привод CD-RW для резерви- рования своих трудов, и модем получше, и монитор побольше. Неплохие запросы, да? Собственно, без всего этого можно обой- тись. Любое современное оборудование вполне подходит. Очень полезно иметь какое-то эффективное средство для резер- вирования и переноса данных. У меня эти задачи разделены ме- жду приводом CD-RW и flash-накопителем. Удобно записывать большие объемы на CD, а маленькие (например, свою работу синхронизировать дома и в офисе) — при помощи USB flash-на- копителя. Только мой вам совет: не забывайте правильно завер- шать работу с flash-накопителем. Домашняя эргономика — безопасность прежде всего! Занимаясь компьютерами уже больше десяти лет (начиная с 1988 года, если не считать программируемые калькуляторы, на которых не один раз совершил посадку на Луну и другие планеты Солнечной системы, кто-то еще помнит, что это значит?), я по- стоянно задаюсь вопросом, как максимально защитить себя от их пагубного влияния на здоровье? Ведь не секрет, что если ра- Домашняя эргономика — безопасность прежде всего! 17 ботать на компьютере достаточно долго и ежедневно, это влия- ние почувствуется очень скоро и достаточно сильно. Самый ответственный момент во всей эргономике, на мой взгляд, — это глаза. Их нужно беречь больше всего, так как они страдают в первую очередь. Еще в бытность самодельного «Спек- трума» (популярный компьютер 1980-х годов) приходилось са- диться подальше от телевизора и делать периодические переры- вы в работе, прогуливаясь на свежем воздухе. Монитор в то вре- мя казался верхом совершенства эргономики, да и слова-то такого никто не знал. Уже давно бытовые телевизоры не приме- няются в качестве мониторов, но защита человеческого глаза от излучения электронно-лучевой трубки ушла не так уж и далеко. Конечно, я знаю о защитных покрытиях на кинескопах, о соот- ветствии строгим требованиям мировых стандартов, о защитных фильтрах. Но на самом деле все несколько сложнее. Например, вы не задумывались, куда должно уходить вредное излучение? Ведь оно никуда не исчезает, просто специальные защитные сис- темы отводят его... на заземление. Плохо или хорошо они это де- лают, нам никогда не узнать, пока нет этого самого заземления. Так что и говорить о соответствии монитора мировым стандар- там и эффективности защитного экранного фильтра можно только в том случае, если заземление подключено, причем пра- вильно. А у вас оно есть? У меня, например, нет. И у вас, скорее всего, ответ будет отрицательный. Это неудиви- тельно: кому нужна забота о человеке? Вот и строили, и строят до сих пор дома без третьего провода в розетке, а значит, и без воз- можности заземления. Если не позаботиться о себе самому, никто о тебе не позаботит- ся. Возможность заземления все же есть, просто для этого при- дется приложить некоторые усилия, знания и способности. Самый простой (но неверный) способ — подключить компьютер к батарее центрального отопления. Действительно, трубы и бата- реи в любом случае хорошо заземлены, но все равно риск полу- чить 220 В на корпусе компьютера остается, так как никто не даст гарантии, что не произойдет случайное замыкание на бата- рею бытового прибора. Да и если на корпусе вашего компьютера Готовимся к созданию Web-страниц 18 появится напряжение, его может почувствовать сосед, который на свою беду решит принять душ. Так что палка эта о двух кон- цах, и оба могут больно ударить. Если у вас есть встроенный ТВ-тюнер, вам повезло. Оплетка те- левизионного кабеля заземлена, и кое-какую защиту вы получите, но не стоит на нее особо рассчитывать. Оплетка имеет сопротив- ление более 70 Ом, а в любом учебнике электротехники сказано, что заземление должно подключаться специальными кабелями с сопротивлением не более 4 Ом. В качестве кабеля для заземле- ния хорошо (хоть и не идеально) подойдет медный витой жгут. Он гибкий, легко прокладывается по помещению, его можно ку- пить на рынке. А вот куда его подключить — другой вопрос, причем самый важный в этом деле. Со стороны компьютера все более-менее ясно. Как правило, на корпусе (если он достаточно хороший) есть специальный разъем для подключения заземления. Если нет — прикрутите (только очень крепко) жгут к любой металлической части корпуса ком- пьютера. Предварительно, конечно, хорошо зачистите жгут и корпус. Этим вы обеспечите надежное заземление всех уст- ройств — и принтера, и модема, и монитора. А вот с другой сто- роны придется подключаться к распределительному щитку. Если это подъезд жилого дома, нужно будет вызывать электрика, так как щитки, как правило, закрыты на замок. Если щиток открыт, подавите в себе желание прикрутить жгут к нулевому проводу (большой винт с гайкой, к которому сходятся много неизолиро- ванных проводов). Он, конечно, заземлен, но за такое само- управство можно получить штраф. А правильно — просверлить отверстие в металлической части распределительного щитка и с помощью винта крепко прикрутить жгут заземления к нему, не забыв все хорошенько зачистить. Вот такое решение и будет безопасным. Если вы живете в частном доме, заземление можно сделать само- му. Достаточно закопать неглубоко во влажную землю лист ме- талла, и подключить жгут к нему. Можно для этих целей вос- пользоваться железными конструкциями, погруженными в землю. Только не перепутайте их с громоотводом, а то такое «заземле- ние» сыграет с вами злую шутку во время очередной грозы. Домашняя эргономика — безопасность прежде всего! 19 Впрочем, не огорчайтесь, если установить заземление нет ника- кой возможности. Если вас мучают головные боли от работы за компьютером и болят до рези глаза, вам стоит попробовать спе- циальные очки. В них используются фирменные линзы, имею- щие патент, гарантии и соответствующие сертификаты. Линзы снимают часть (будем реалистами) вредного излучения от мони- торов, телевизоров, яркого солнца и т.д. На практике это дейст- вительно приносит пользу (проверено). Уж не знаю, что там эти линзы снимают на самом деле, но голова и глаза при их приме- нении уже не болят. Найти линзы (и заказать очки) можно в спе- циализированных коммерческих отделах, торгующих оптикой. По словам продавцов, линзы пользуются популярностью и могут быть подобраны индивидуально под любое зрение. Только один совет: если уж покупаете, покупайте в легкой (и соответственно дорогой) оправе. А то голова будет болеть уже не от монитора, а от очков :-) Сами линзы не дорогие — за пару около двух евро, так что попробовать стоит. Кроме внешних средств защиты от излучения мониторов, при- стальное внимание стоит обратить на сам аппарат. Если он ста- рый, не соответствует требованиям мировых стандартов, то ни о какой эффективной защите не может быть и речи. Советую вам сменить такой монитор. Если вы на это решились, обратите вни- мание на дорогие и фирменные модели. На мой взгляд, — лучше хороший 17-дюймовый монитор, чем плохой или посредственный 19-дюймовый. Исходите из собственных финансовых возможно- стей, но знайте одно: выбранный монитор должен обеспечивать работу при вашем любимом разрешении с частотой на порядок выше рекомендованной. Рекомендованной считается частота 85 Гц, но оптимальный вариант — 100 Гц. Таким образом, если вы предпочитаете работать с разрешением экрана 1024 х 768, ваш монитор должен обеспечивать работу при 100 Гц и более. Но не менее 100 Гц! С другой стороны, в случае более 100 Гц монитор будет работать в режиме, близком к критическому, и ничего хо- рошего от такого аппарата ждать не приходится — либо сведе- ние, либо четкость, либо яркость страдают. А чаще все вместе. Да и нежелательно эксплуатировать монитор при предельно допус- тимых частотах. А в характеристиках указываются именно эти, предельные параметры. Готовимся к созданию Web-страниц 20 Самым лучшим решением будут мониторы на основе жидких кристаллов. Если не говорить об играх, профессиональной гра- фике, дизайне, и цене — это идеальный выбор. Правда, цены уже начали снижаться, но пока еще находятся на достаточно вы- соком уровне. Мониторы на ЖКИ не имеют вредных для глаз излучений, не подвержены мерцанию, их видимая площадь эк- рана больше мониторов аналогичной диагонали на лучевой трубке. Множество преимуществ говорит само за себя. Однако прежде чем покупать монитор, обязательно попросите подклю- чить его к компьютеру и показать, как он работает. Я видел мо- дели, на которые без слез смотреть больно в прямом и перенос- ном смысле: то изображение дрожит, то резкость, яркость и контрастность «хромают», то угол зрения предельно узкий. Очень многое зависит от матрицы, от качества кабеля и, конеч- но, от сигнала, который выдает видеокарта. Идеально — под- ключение по цифровому каналу, без преобразования в аналого- вый и обратно, но такие мониторы пока редкость. Будем наде- яться, что положение исправится. С точки зрения эргономики важно также рассмотреть устройст- ва ввода, т.е. клавиатуру и мышь. Клавиатуру желательно иметь с подставкой, «ломаную» и т.д., кому что придется по душе. Я, например, использую самодельный вариант — обычную де- шевую клавиатуру с небольшим дополнением, которое неслож- но изготовить самостоятельно. Достаточно сшить (хорошо бы поручить это жене, сестре, матери...) мешочек из мягкой ткани в полтора раза длиннее клавиатуры и по ширине примерно рав- ный ей, набить его плотным материалом (можно поролоном) и зашить. Толщину можно подобрать экспериментально, в пре- делах 5—10 мм. Руки будут лежать на этом мягком приспособле- нии перед клавиатурой, и значительно меньше уставать как при печати, так и при использовании мыши. Мышь в таком случае тоже можно любую, только желательно с колесом прокрутки, которое очень сильно снижает ее дневной пробег и позволяет меньше напрягаться держащей ее руке. Мой выбор — оптиче- ские «грызуны». Но не их дешевые аналоги, с которыми мучать- ся при работе приходится еще больше, чем с грязной шариковой мышкой. В сторону радиомышек даже не смотрите — не пода- Программное обеспечение для Web-мастера 21 рок. Самое главное их преимущество — отсутствие провода, но недостатков очень много. Самый большой — наличие батареек или аккумуляторов (в первом случае их надо периодически ме- нять, во втором — заряжать, и то, и другое — не сахар). Еще один важный момент — воздух. Действительно, качество воздуха в помещении очень сильно влияет на самочувствие че- ловека. При работе компьютера (как и вообще любого электри- ческого прибора) воздух не только нагревается, но и обогащает- ся положительными ионами и насыщается озоном, поэтому возьмите себе за правило работать только при открытой форточ- ке. Идеальный вариант — приобрести ионизатор воздуха. Если вы считаете это несколько дорогим решением, можно восполь- зоваться бытовым вентилятором. Если поставить его около фор- точки и направить на рабочее место, он неплохо справится с удалением вредного для здоровья воздуха. Очень хорошо в этом случае подходят офисные вентиляторы на высокой ножке. Они имеют многопозиционный переключатель скорости враще- ния лопастей и вращающийся вентилятор в защитном кожухе. И, конечно же, нельзя забывать о правильной осанке, перерывах в работе и горячем питании (именно горячем, а не бутерброд- ном). Все это вносит свою лепту в качество работы и в хорошее самочувствие. А это в наше время ценится выше всего. Программное обеспечение для Web-мастера Один из основных инструментов Web-мастера — программа- браузер. Они, как и любое программное обеспечение, бывают разные. Я использую Internet Explorer. Это браузер, который по умолчанию встроен в самую популярную среди пользователей операционную систему. Несомненно, такая интеграция сыграла свою роль в том факте, что на сегодняшний день доля этого брау- зера составляет более 90 %. И это при том, что есть такие пре- красные программы-браузеры, как, например, Netscape Navigator или Opera. Конечно, каждый выбирает для себя то, что считает лучшим. Готовимся к созданию Web-страниц 22 Есть и обратная сторона медали. Очень часто разработкой про- екта занимается не команда специалистов, в которой каждый от- вечает за свою часть работы, а один человек. Недостатки такого подхода очевидны, однако ничего не поделать. И тут уж прихо- дится быть мастером на все руки — заниматься и дизайном, и программированием, и многим другим. А значит, вам приго- дятся на компьютере все популярные нынче в мире програм- мы-браузеры. Ведь очень часто хорошо выглядевшая страница в одном браузере совершенно не смотрится в другом. Идеала до- биться сложно, но какой-то компромисс всегда можно найти. Впрочем, это на ваш выбор. Если вы используете в работе Internet Explorer, то большинство посетителей увидят ваше твор- чество так, как вы и задумывали. Оптимально, если вы на стра- нице будете подписывать, что она оптимизирована для опреде- ленной версии определенного браузера. Нам также понадобятся текстовый редактор и FTP-менеджер. Вы можете использовать любые, только желательно, чтобы тек- стовый редактор обеспечивал нумерацию строк и элементарное выделение цветом синтаксических конструкций. Я рекомендую CuteHTML из комплекта CuteFTP (рис. 1), так как он обеспечи- вает все вышеперечисленные требования, прост в обслужива- нии, не требует инсталляции (точнее — интегрируется в систему при первом запуске). CuteFTP можно использовать и в качестве FTP-менеджера, но я применяю обычный Windows Commander, так как он еще и по- зволяет в привычной оболочке работать с файлами (рис. 2). Устанавливаем все эти программы. Дальше надо выделить место для вашего творчества. Это может быть любая папка в любом месте любого диска, но лучше, если это будет в корневом каталоге или даже вообще на отдельном диске. Почему лучше? Потому, что там должен храниться не только сайт, но и сервер, который будет эмулировать работу на- стоящего сервера в интернете. А со временем сайт может разрас- тись или появятся разные версии сайта. Так что место на диске понадобится. Программное обеспечение для Web-мастера 23 Рис. 1. Окно программы CuteHTML Рис. 2. Использование Windows Commander в качестве FTP-менеджера Готовимся к созданию Web-страниц 24 Можно на компьютере для работы выделить отдельный диск. Для этого существует много способов, в том числе и таких, кото- рые не нарушают целостности системы. СОВЕТ Если хочется выделить для работы отдельный диск, то сделать это можно за счет его эмуляции при помощи утилиты subst.exe (по- ставляется в комплекте с любыми версиями Windows}. Она вы- полняет подстановку диска вместо папки. Допустим, наш сервер находится на C:\internef\, и мы хотим разместить его на отдель- ном диске Е, которого реально нет. Выполняем команду: subst Е: C:\internet. Теперь в системе появился диск Е, который являет- ся полной копией папки C:\internet\, т.е. там находится то же са- мое, только теперь это располагается в корневом каталоге дис- ка Е. И, конечно, еще на диске С в папке internet, оттуда инфор- мация никуда не делась. Запускаем наш сервер из диска Е, и он нормально работает. При условии, конечно, что сервер настро- ен на диск Е. По окончании работы можно отключить диск коман- дой subst E: /d. B результате диск Е исчезнет, но информация, фи- зически расположенная в C:\internet\, останется нетронутой. Итак, создайте на диске Е каталог, например usr. В нем будут происходить все остальные события нашего повествования. Дальше потребуется доступ к интернету. Надеюсь, им вы уже ус- пели обзавестись, иначе зачем тогда весь этот разговор? Для отладки скриптов (т.е. программных кодов) нам понадобит- ся программа-сервер. В сетевых технологиях используются два важных понятия: клиент и сервер. Клиент, условно говоря, — это компьютер пользователя, когда он подключен к интернету и по разным протоколам запрашивает информацию различного рода. Сервер — это удаленный другой компьютер, отдающий пользователю эту информацию. На одном компьютере могут работать сразу несколько серверов (такие серверы называют виртуальными), а бывает, что один сер- вер состоит из нескольких мощных машин. Вам, скорее всего, придется работать с виртуальными сервера- ми. Они наиболее распространены, несмотря на небольшое Программное обеспечение для Web-мастера 25 снижение производительности и ограниченные возможности настройки. В данный момент нам нужен сервер как набор программ. Если мы установим такой сервер у себя на домашнем (читай — рабо- чем) компьютере, то не нужно будет каждый раз закачивать все скрипты в интернет, а можно будет у себя на домашнем компью- тере создать готовую программу и закачать ее на реальный сервер по FTP. Получится экономия на времени в интернете. Самым распространенным сервером является Apache. Идем на сайт h t t p : / / a p a c h e . o r g (рис. 3) и там открываем страницу для скачивания . Puc. 3. Сайт http://apache.org На момент написания книги это страница http://httpd.apache.org/download.cgi. (Примеч. ред.) Готовимся к созданию Web-страниц 26 Лучше всего, если вы скачаете и установите у себя на компьютере ту версию сервера, с которой работает ваш хостинг-провайдер . Этим вы застрахуете себя от возможных неприятностей в виде некорректной работы программы. Есть тут и «подводный ка- мень». Дело в том, что у вашего хостинг-провайдера, скорее все- го, в качестве операционной системы будет не Windows, а одна из версий Unix или даже FreeBSD. Но прелесть устанавливаемо- го сервера Apache в том, что он не просто будет работать с любой операционной системой, он будет работать одинаково. Это для нас немаловажно, так как ставить себе такие экзотические опе- рационные системы не каждый согласится. Windows как-то при- вычней. Каждый файл на сайте h t t p : / / a p a c h e . o r g сопровождается цифровой подписью PGP3 с аналогичным именем файла, но другим расширением. Не спутайте собственно файл и удостове- ряющую его подпись. Также не забудьте, что скачиваем мы вер- сию сервера для Windows (рис. 4). Скачали? Теперь попробуем поставить его. Инсталляция похожа на установку обычной программы, с которой среднестатистиче- ский пользователь компьютера сталкивается достаточно часто. Запустите только что скачанный файл (рис. 5). Нажимайте «Next» и соглашайтесь с условиями лицензии. Все равно там, как обычно, — никакой ответственности, используем на свой страх и риск. «Next» придется еще несколько раз понажимать до тех пор, пока нам не предложат указать имя сервера (рис. 6). Назовите свой сервер как-нибудь. Затем следует выбрать директорию для уста- новки. Здесь нужно указать на наш диск Е и каталог usr: E:/usr/apache/. 1 Хостинг-провайдер — организация, предоставляющая место на сервере для раз- мещения вашего сайта. {Примеч. ред.) PGP (Pretty Good Privacy, почти полная приватность) — ряд программных продуктов, позволяющих зашифровать и расшифровать файлы и электронные сообщения при их отправке и получении, а также добавлять цифровую подпись к файлам и любой другой информации, предоставляемой в цифровом виде. {Примеч. ред.) 27 Программное обеспечение для Web-мастера Рис. 4. Страница для скачивания сервера Apache Собственно говоря, каталог для установки не имеет принци- пиального значения, если не считать того, что при переуста- новке операционной системы не потребуется повторной ин- сталляции сервера. Это говорит о том, что сам сервер не интег- рируется в систему, что очень любят делать другие программы. Все настройки Apache хранит в собственных конфигурацион- ных файлах. Опять «Next», далее выбираем типичную конфигурацию для ус- тановки (это пункт «Typical») и опять уже знакомый нам «Next», даже два раза. В процессе этого сервер установится в выбранную нами директо- рию в типичной конфигурации. После завершения установки нас поздравят с этим эпохальным событием и предложат нажать кнопку «Finish», что тут же надо сделать. 28 Готовимся к созданию Web-страниц Рис. 5. Окно установки сервера Apache Все, сервер установлен, можно его запускать. Это делается раз- ными способами, и самый простой — зайти в каталог, в который производили установку, и запустить файл apache.exe. Запустится окно (рис. 7). Его закрывать не надо — это и есть работающий Apache-сервер. Можно сделать для работы несколь- ко ярлыков. Так, для запуска Apache используется «apache.exe -k start», для перезапуска — «apache.exe -k restart», а для останов- ки — «apache.exe -k shutdown». В последних версиях установ- щика Apache эти ярлыки автоматически создаются в меню «Пуск». Другой способ запуска сервера заключается в использовании сторонних программ (я бы даже сказал — программулек), и в этом случае запуск становится на редкость приятным процес- сом. Я имею в виду программу-диспетчер Apache Manager для Windows. Она представляет собой красный квадратик, который «поселяется» на системной панели около часов и мирно ждет Программное обеспечение для Web-мастера 29 Puc. 6. Промежуточный этап установки сервера Apache Puc. 7. Окно работающего Apache-сервера Готовимся к созданию Web-страниц 30 того времени, когда по нему щелкнут и выберут пункт контекст- ного меню «Запустить Apache» (рис. 8). Рис. 8. Запуск Apache-cepвepa при помощи программы Apache Manager В этом случае красный цвет квадратика сменится на зеленый, и будет светить все время, пока сервер будет работать (рис. 9). Рис. 9. Остановка Apache-cepвepa при помощи программы Apache Manager Надо отметить, что при использовании файловой системы NTFS программа Apache Manager иногда работает с ошибками. Их при- чина пока не ясна и, видимо, заключается в неполной совмести- мости. В версиях выше Apache 2 появилась своя программа-менеджер, которую и рекомендуется использовать. Для этого нужно щелк- нуть по соответствующей иконке на системной панели и выбрать необходимое действие (рис. 10). Работает? Если вы видите что-то типа «Running all Apache services» (или квадратик программы-диспетчера загорелся зеленым), то — да. Выбор хостинга 31 Puc. 10. Запуск (а) и остановка (б) сервера Apache при помощи собственной программы-диспетчера Перед использованием выждите минутку — на начальном этапе Apache может прекратить свою работу из-за разного рода ошибок. Если не повезло, и окно само закрывается или в нем появляется еще какой-то текст, то, значит, где-то ошибка, попробуйте проде- лать процедуру запуска заново. Программа обычно подсказывает, в какой строке конфигурационного файла ошибка. Чаще всего неправильно указаны пути к файлам. Их надо исправить. Конфи- гурационные файлы находятся в папке e:/usr/apache/conf/. Са- мый важный из них — httpd.conf. Его нам, возможно, придется немного позже редактировать. Первый шаг к успеху сделан: Apache запущен. Прежде чем пе- рейти ко второму этапу — немного теории. Выбор хостинга Рано или поздно, но перед разработчиком практически любого интернет-ресурса встает вопрос: какой хостинг использовать? Что это такое? Хост — место, где будет работать ваш сайт. Хос- тинг — комплекс услуг по предоставлению такого места. На- Готовимся к созданию Web-страниц 32 сколько это место будет хорошим, настолько будет пользоваться успехом ваш сайт, поэтому очень рекомендую внимательно по- дойти к вопросу выбора хостинга. Мы рассмотрим так называемый виртуальный хостинг, т.е. когда большое количество сайтов работает на одном сервере. Есть и другие способы хостинга — можно применять, например, выде- ленный сервер. Он гарантирует высочайшую скорость работы, од- нако несравним по стоимости. Не задумывались, почему так бы- стро работают всем известные сайты, а ваш так долго грузится? Одна из причин как раз и заключается в разных типах хостинга. Если можете позволить себе выделенный сервер, я вам завидую. Первое, на что надо обращать внимание при выборе хостинга, — это аудитория сайта. Если она местная, то и хостинг лучше по- дыскивать географически близкий, чтобы сигналы не делали дальний путь из «прекрасного далека» в «суровую действитель- ность». Однако есть одна тонкость: большинство фирм, предоставляю- щих услуги хостинга, на самом деле не имеют собственного обо- рудования для работы, а скупают такой хостинг, образно говоря, оптом, а потом предоставляют в розницу. Цены на оптовую за- купку хостинга значительно ниже розничных, и это позволяет таким фирмам не просто зарабатывать, но и быть конкуренто- способными, обеспечивая хороший сервис и техническую под- держку. Фирма по услугам хостинга может располагаться в со- седнем с вами кабинете, а сам сервер будет находиться за океа- ном, поэтому в первую очередь уточните, где именно физически будет работать сайт. Знание еще одного параметра — скорости подключения к основ- ным магистралям интернета — необязательно. В любом случае каждый уважающий себя дата-центр (место для серверов, под- ключенных непосредственно к магистралям интернета) старает- ся увеличить такой канал всеми доступными ему способами. На, этом можно не особо заострять внимание, если только вам не требуются специфические условия. Дальше мы должны оценить необходимое для работы сайта ме- сто. Когда вы создадите свой проект и оцените его размеры, то Выбор хостинга 33 не торопитесь делать выводы и заказывать ровно столько. Поми- мо непосредственно сайта, в место на диске сервера входят и объем занимаемых баз данных, и самое главное — почта. А приходилось ли вам получать мегабайты спама ? Мне — да, и мои ящики занимают на сервере больше места, чем сам сайт. Еще есть такое понятие, как журналы статистики сайта — log-фай- лы. Они услужливо ведутся сервером и иногда очень полезны для анализа посещаемости, но отрицательно сказываются на зани- маемом месте. Иногда log-файлы превышают все разумные пре- делы, и тогда приходится удалять их, как правило, по FTP. Таким образом, не отказывайтесь от большого места. Я считаю разумным 100 Мб, этого будет достаточно даже с учетом будуще- го развития. И, наконец, самое главное для нас, программистов. Поддержка всех технологий программирования на стороне сервера должна присутствовать в обязательном порядке. Впрочем, я думаю, дав- но невозможно найти хостинг без такой поддержки, так как уста- новка, например, РНР ничего не стоит хостинг-провайдеру. Кроме того, надо поинтересоваться полным списком предостав- ляемых услуг и сервисов и уточнить, есть ли в его числе нужные именно вашему сайту. Правда, этот момент совершенно не касается так называемых бесплатных хостингов. У них даже не ищите какого-то подобия программных технологий на стороне сервера. Их не будет. К то- му же бесплатны они чисто номинально, вы будете рассчиты- ваться баннерными показами, так что подумайте, надо ли вам такое удовольствие. Я вам решительно не советую пользоваться бесплатным хостингом, хотя и сам когда-то начинал именно с такого варианта. Впрочем, в качестве тестовой площадки и для хранения файлов большого размера иногда сгодятся, но не бо- лее того. Стоит также обращать внимание на версии программного обес- печения у хостинг-провайдера. Добросовестный хостинг-про- вайдер всегда следит за выходящими обновлениями и устанавли- Спам — ненужная информация, обычно рекламного характера, приходящая на почтовый ящик пользователя без его желания. (Примеч. ред.) Готовимся к созданию Web-страниц 34 вает их у себя, причем делает это не бездумно, а только если тес- товый образец не вызывает сбои в работе. Несомненно, в списке услуг просто необходимо ежедневное ре- зервирование данных. Как вариант может быть ручное управле- ние резервным копированием файлов, хотя практика показыва- ет, что пользоваться восстановлением системы приходится не так уж и часто. Дальше можно поинтересоваться возможностями персональной настройки сайта, т.е. наличием на хостинге персональной пане- ли управления. Стандартные функции — управление почтовыми ящиками, статистика, FTP-аккаунты и т.д. Приятно, если глаз радуют всевозможные «примочки» — авось пригодятся. Часто предоставляются услуги по инсталляции уже готовых чатов, фо- румов, систем статистики и баннерообмена. Это, конечно, не для нас, программистов, однако приятно. Также очень важно присутствие хорошей, компетентной и, глав- ное, не очень медленной службы поддержки. Проблемы бывают разными, и обратиться за помощью часто больше просто некуда. Мнение о службе поддержки может появиться уже после предва- рительного общения с ней перед заказом хостинга, но не прога- дайте — пока вы не заплатили деньги, вас будут обхаживать и лелеять, а потом бросят на произвол судьбы. Универсального рецепта нет, можно посоветовать только поискать в Сети ин- формацию и отзывы о выбранном вами хостинг-провайдере, по- читать подробно форум поддержки, который, конечно, обяза- тельно должен присутствовать у хостинг-провайдера. Просто будьте внимательны, но не перегибайте палку. Не отбрасывайте в сторону тех, о которых говорят плохо. Вполне возможно, это делают конкуренты, чтобы выжить кого-то со своей территории бизнеса. Попробуйте найти других клиентов данного хостинг- провайдера и спросите их мнения. Не думаю, что кто-то отка- жется, — скажут и хорошее и плохое. Поинтересуйтесь методами оплаты за предоставленные услуги хостинга и найдите приемлемый для себя. Как правило, это какой-либо из вариантов удаленной оплаты — либо через банк, что долго и дорого, либо при помощи электронных платежей Выбор хостинга 35 (например, через популярную систему Webmoney), при исполь- зовании которых часто делают скидки, и к тому же оплату можно произвести в течение нескольких минут, не отрываясь от компь- ютера. Кстати, хочу сказать несколько слов о системе Webmoney. Часто приходится слышать, что системы электронных платежей не яв- ляются надежным средством для того, чтобы рассчитываться за товары или услуги, потому что могут обанкротиться или украсть все деньги. Для таких приведу всего два убедительных аргумента: первый — за каждую транзакцию (перевод виртуальных денег) с вашего счета снимаются небольшие проценты. Но в масштабе всех пользователей это огромная сумма, и гораздо выгоднее про- должать работу, а не обмануть всех, И второе — в принципе не- возможно украсть сразу все деньги из платежных систем. Они до тех пор являются такими, пока их товарные знаки (виртуальные деньги) можно обменять на наличные. А если все деньги присво- ить, соответственно нигде никто их не примет к обмену, так что это просто невозможно и бессмысленно. Из собственного опыта могу сказать: система Webmoney работа- ет наиболее эффективно и безукоризненно. Рекомендую всем освоить данный несложный тип платежной системы. Итак, подведем итог изложенным мыслям. Самое главное — не торопиться и не предъявлять слишком завышенных требований. Помните: идеального хостинга не существует, у каждого есть какой-то недостаток или даже не один. Нужно просто стараться, чтобы эти недостатки причиняли как можно меньше неудобства. И конечно, достоинств должно быть гораздо больше, чем недос- татков. Часть III Знакомьтесь — РНР История создания РНР Язык РНР появился осенью 1994 года. Его создатель — Расмус Лердорф (Rasmus Lerdorf) (рис. 11) — использовал язык в своих целях, чтобы иметь представление о тех людях, которые посеща- ют его сайт и знакомятся с его резюме. Рис. 11. Создатель РНР — Расмус Лердорф По словам разработчика языка, РНР был написан буквально за день в промежутках между деловыми встречами. Сначала это История создания РНР 37 была просто невзрачная CGI-оболочка , написанная на языке Perl, которая служила исключительно для специфических целей. Такое приложение (его называют шлюзом, или CGI-программой) запускается сервером в реальном режиме времени. Сервер передает запросы пользователя CGI-программе, обрабатывающей их, и воз- вращает результат работы программы на экран пользователя. Та- ким образом, посетитель получает динамическую информацию, которая может изменяться в результате влияния различных факто- ров. Сам шлюз может быть написан на различных языках програм- мирования — C/C++, Fortran, Perl, TCL, Unix Schell, Visual Basic, Apple Script и др. Создатель РНР для разработки шлюза сначала выбрал язык Perl, как наиболее простой и доступный. В результате дальнейшей эксплуатации выяснилось, что CGI-обо- лочка обладает малой производительностью (медленно работа- ет), и Расмус Лердорф вынужден был переписать все заново, но уже на языке С, что позволило увеличить скорость работы РНР. Пользователи сервера, на котором располагался сайт с первой версией РНР, заинтересовались этим языком. Лердорф не пред- полагал, что кто-то другой будет пользоваться этим языком, но РНР довольно быстро перерос в самостоятельный проект, и в на- чале 1995 года вышла первая известная версия продукта, назы- вавшаяся Personal Home Page Tools (средства для персональной домашней страницы). На тот момент РНР обладал более чем скромными возможностями. Он имел простейший анализатор кода, который понимал несколько специальных команд, а также разные утилиты для сайта, необходимые для разработки гостевой книги, счетчика посещений, чата, системы статистики и т.п. К середине 1995 года язык был основательно переработан, а так- же появилась возможность обработки форм и были добавлены функции работы с базами данных. В таком виде вышла вторая версия продукта. Затем была более дополненная третья и, нако- нец, современная нам четвертая версия РНР. Сегодня РНР — это мощный кроссплатформенный набор средств, который располагается на сервере и предназначен для обработки CGI (Common Gateway Interface, общий шлюзовой интерфейс) — стандарт, предназначенный для создания серверных приложений. (Примеч. ред.) К моменту выхода книги была готова версия РНР 5.0 beta 4. (Примеч. ред.) Знакомьтесь — РНР 38 специального кода, встраиваемого в HTML-страницу. Благодаря этому появилась возможность легко создавать динамические сайты. Файлы, созданные таким образом, хранятся и обрабаты- ваются на сервере. Когда посетитель запрашивает документ с РНР-кодом, скрипт обрабатывается не браузером посетителя, как, например, при использовании JavaScript, а сервером (точ- нее, сервер передает управление специальной программе, обра- батывающей РНР-код). Посетителю передаются уже только ре- зультаты работы. Точно так же работает CGI-программа, напи- санная на С или Perl. Но в отличие от CGI, РНР-код можно встраивать в любое место HTML-страницы, что является основным преимуществом РНР по отношению к CGI. Кроме того, РНР очень прост для изуче- ния и не требует каких-либо специфических знаний. Напри- мер, мне вполне хватило опыта, приобретенного лет десять на- зад на уроках информатики в школе, на которых мы изучали язык Basic на очень модных и дорогих тогда Yamaha. Несмотря на столь радужную характеристику, есть у РНР и не- достатки. Стоит отметить довольно медленную, по сравнению с СGI-программами, работу больших (именно больших, так как маленькие скрипты не вызывают существенной нагрузки) РНР- скриптов. РНР — интерпретируемый язык , что непременно ве- дет к ухудшению производительности в случае очень больших и сложных программ, но для выполнения несложных манипуля- ций на сайте РНР — лучший выбор. К тому же последние версии РНР практически лишены этих недостатков. Полностью перепи- санный и оптимизированный код сделал свое дело, и если ваш хостинг-провайдер позволяет использовать РНР версии более 4.1 — будьте спокойны. Этому очень способствовал тот факт, что частично РНР стал компилируемым языком. Но только частич- но, в нем очень гармонично уживаются и интерпретатор, и ком- Интерпретатор — транслятор (программа или устройство, которое переводит программу с одного языка программирования на другой), анализирующий ко- манды или операторы исходной программы и немедленно выполняющий их. Та- ким образом, интерпретатор одновременно и транслирует, и выполняет задан- ную программу в отличие от компилятора, который только транслирует всю про- грамму без ее выполнения. (Примеч. ред.) Установка РНР 39 пилятор. Недаром к середине 2000 года РНР использовался бо- лее чем на 2,5 млн сайтов. Установка РНР Прежде всего надо скачать РНР. Идем на официальный сайт h t t p : / / w w w . p h p . n e t и ищем там раздел «downloads» (рис. 12). Рис. 12. Главная страница сайта www.php.net После того как откроется страница, скачиваем два файла из раз- дела Windows Binaries (рис. 13). Решайте, какую версию скачать в зависимости от того, какая ус- тановлена у вашего хостинг-провайдера. Лучше всего, конечно, Знакомьтесь — РНР 40 скачивать более свежую версию, так как в ней наверняка исправ- лены старые ошибки. Рис. 13. Страница сайта www.php.net для скачивания Итак, если вы уже скачали эти два файла, начнем их устанавли- вать. Обратите внимание, что один с расширением ехе, а вто- рой — zip. Запустите ехе-файл (рис. 14). По традиции нажимайте «Next», соглашайтесь с условиями ли- цензии и выбирайте тип установки Standard. Далее необходимо выбрать директорию. Как вы помните, у нас есть специальная папка для работы — usr. Указываем РНР путь e:\usr\php\ и уста- навливаем его туда. Придется еще ввести адрес SMTP-сервера и свой адрес электронной почты. Введите туда что-нибудь. Веро- ятнее всего, при работе на домашнем компьютере вам это не по- Установка РНР 41 надобится. Все равно отправлять почту вы будете уже в интерне- те, а там свои настройки. Рис. 14. Окно установки РНР Еще надо выбрать сервер, с которым будет работать РНР. Как вы помните, это Apache. Если в процессе установки появятся ка- кие-нибудь диалоговые окна, не стоит обращать на них особого внимания. Теперь осталось установить дополнительные модули и научить сервер Apache распознавать РНР-код. Настройка РНР для Apache Откройте конфигурационный файл Apache httpd.conf из папки E:/usr/apache/conf при помощи любого текстового редактора, например «Блокнота» или Word. Знакомьтесь — РНР 42 Видите, в нем много текста, перед которым стоит символ «#». Это — комментарии. Как правило, они на английском, но есть варианты русского Apache. Ищем следующую строку: #AddType application/x-httpd-php .php Снимаем с нее комментарий (убираем символ «#» в начале стро- ки). Если этой строки нет, добавляем ее. Это позволит серверу распознавать файлы с расширением php. Сразу же после этой строки допишите: ScriptAlias /_php/ "путь к РНР/" Action application/x-httpd-php "/_php/php.exe" «Путь к РНР» — в нашем случае это e:/usr/php/. He забудьте про последний слеш, он там не случайно. Этим нехитрым способом мы создаем синоним для директории с установленным препро- цессором РНР (php.exe) и связываем все файлы с РНР-кодом непосредственно с самим препроцессором. Сохраните изменения в файле конфигурации и попробуйте за- пустить Apache. Если вы получили сообщение об ошибке, про- смотрите указанную в нем строку, скорее всего это синтаксиче- ская ошибка. Исправьте ее и попробуйте снова. Будем считать этот этап пройденным. Виртуальные хосты в Apache Как я уже говорил, серверы в Сети устроены таким образом, что на одном компьютере могут быть десятки и сотни виртуальных серверов. Нам придется организовать что-то подобное у себя на компьютере, чтобы иметь возможность разрабатывать дома не один сайт, а сколько угодно. Мы научимся делать два, остальные вы сможете добавить аналогично. Опять открываем знакомый нам файл конфигурации httpd.conf и добавляем в конец файла строки: ServerAdmin admin@servername.com Установка РНР 43 ServerName www.servername.com DirectoryIndex index.php3 index.phtml index.php index.htm index. html index.shtml index.shtm DocumentRoot " e : / u s r / p u b l i c _ h t m l / h o s t / v i r t u a l " ScriptAlias /cgi-bin/ "e:/usr/public_html/host/virtual/ cgi-bin/" ErrorLog e : /usr/public_html/host/virtual/logs/error. log CustomLog e:/usr/public_html/host/virtual/logs/access.log common VirtualHost 127.0.0.2> ServerAdmin admin@my-site.com ServerName www.my-site.com DirectoryIndex index.php3 index.phtml index.php index.htm index.html index.shtml index.shtm DocumentRoot " e : / u s r / p u b l i c _ h t m l / h o s t / s t a r t " ScriptAlias /cgi-bin/ "e :/usr/public_html/host/virtual/ cgi-bin/" ErrorLog e:/usr/public_html/host/virtual/logs/error.log CustomLog e:/usr/public_html/host/virtual/logs/access.log common И таким же образом дальше, по мере необходимости. Обратите внимание на различия. В строке с V i r t u a l H o s t указываются разные IP-адреса, по которым будет осуществляться доступ к вы- бранным сайтам. Имя сервера и почтовый ящик администрато- ра — разные. В строчке с DocumentRoot надо указать путь к ди- ректории, в которой будут храниться файлы конкретного сайта. Знакомьтесь — РНР 44 В каталоге virtual нужно создать еще один каталог — LOG для log-файлов Apache. Сами файлы создавать вручную не надо, они будут созданы Apache автоматически. СОВЕТ Если вы не очень нуждаетесь в log-файлах, можно периодиче- ски их удалять. Это позволит серверу работать немного быст- рее, да и место сэкономит. Сделать это можно только тогда, ко- гда сервер остановлен. Log-файлы можно сохранять в разные папки для каждого сайта отдельно, но если они не очень нуж- ны, можно задать в одну папку, чтобы легче было удалять. Как обычно, сохраните файл конфигурации и попробуйте запус- тить Apache. Если ошибка — ищите ее в указанной строке. Тестирование РНР Убедимся, что РНР-скрипты работают. Для этого создадим в ди- ректории d:/usr/public_html/host/virtual файл test.php со следую- щим содержанием: Теперь наберите в браузере: h t t p : / / 1 2 7 . 0 . 0 . 1 / t e s t . p h p . Должна отобразиться страница с разнообразной информацией о РНР, которая генерируется функцией phpinfo () (рис. 15). Все, РНР работает. Установка и настройка дополнительных модулей Обратите внимание на второй файл, который мы скачали. Он име- ет расширение zip и представляет собой обычный архив. Распакуй- те его. Найдите в нем директорию extensions и скопируйте ее пол- ностью к себе в каталог с установленным РНР. Это — дополнительные модули, которые нужны для работы с изображениями, службами улучшенной криптографии и т.д. А если и не нужны сразу, то некоторые готовые разработки могут их использовать, так что пусть будут. Установка РНР 45 Рис. 15. Страница информации о РНР, сгенерированная функцией phpinfo() Теперь надо подключить новые модули к РНР. Делается это во втором важном конфигурационном файле — php.ini. Готового его варианта нет, придется создать самостоятельно. Надо отме- тить, что и без этого файла РНР сможет работать, но у нас не бу- дет возможности настраивать нужные параметры. Итак, в дистрибутиве ищем файл php.ini-recommended и пере- именовываем его в php.ini. Редактировать можно, как обычно, в любом текстовом редакторе, так как он, как и конфигурацион- ный файл Apache, представляет собой простой текст. Открыли? Ищите в нем раздел E r r o r h a n d l i n g and logging (рис. 16). Знакомьтесь — РНР 46 Этот раздел отвечает за настройку ошибок, выводимых на экран. Нам очень важно видеть эти ошибки, чтобы понимать, как рабо- тает скрипт. А точнее — почему он не работает. Puc. 16. Раздел Error handling and logging в файле php.ini Здесь чуть ниже будет переменная e r r o r _ r e p o r t i n g = E_ALL. Конечно, можно оставить ее такой, какая она есть, но тогда при- готовьтесь получать сообщения об ошибках по поводу и без по- вода. Например, если происходит попытка использования не- инициализированной переменной (см. ниже). Это не страшно, так как в этом случае переменная автоматически инициализиру- ется и приравнивается или к нулю, или к пустой строке, в зави- симости от типа, но сообщение об ошибке все равно появится на экране. Чтобы избежать таких ситуаций, надо прописать тут: e r r o r _ r e p o r t i n g = E_WARNING. В табл. 1 приведен полный Установка РНР 47 список доступных значений: вы можете выбрать более подходя- щие для вашего сайта. Таблица 1.Типы ошибок в PHP Константа Описание Значение Фатальные ошибки на стадии выпол- 1 Е_ERROR нения Предупреждения на стадии выполне- 2 E_WARNING ния (нефатальные ошибки) Ошибки анализа на стадии компиля- 4 Е_PARSE ции Уведомления на стадии выполнения 8 E_NOTICE (менее серьезные, чем предупрежде- ния) 16 Фатальные ошибки при запуске РНР E_CORE_ERROR Предупреждения (нефатальные ошиб- 32 E_CORE_WARNING ки) при запуске РНР Фатальные ошибки на стадии компи- 64 E_COMPILE_ERROR ляции Предупреждения на стадии компиля- 128 E_COMPILE_WARNING ции (нефатальные ошибки) Сообщение об ошибке, генерируемое 256 E_USER_ERROR пользователем Предупреждение, генерируемое поль- 512 E_USER_WARNING зователем Уведомление, генерируемое пользова- 1024 E_USER_NOTICE телем 2047 Все вышеуказанное E_ALL Еще чуть дальше нужно найти параметр display_errors = Off и установить его в On, включив, таким образом, выдачу сообще- ний об ошибках именно на экран, а не в log-файлы. Там просто неудобно искать эти ошибки. Знакомьтесь — РНР 48 В разделе Data Handling переменную r e g i s t e r _ g l o b a l s = Off установим в On (рис. 17). Так мы сделали доступными для считывания переменные окружения непосредственно по их имени, а не через специальный массив переменных ок- ружения. Рис. 17. Настройка переменных окружения в файле php.ini Теперь нужно указать путь к папке, в которой находятся наши модули расширения. Он задается в переменной e x t e n s i o n _ d i r . Задайте его правильно, в соответствии с тем, где именно нахо- дится у вас папка с модулями. Если этот путь указан неправиль- Переменные окружения — это параметры операционной системы, содержащие такие сведения, как имя диска, путь или имя файла. Например, переменная ок- ружения TEMP задает папку, в которой хранятся временные файлы программ. {Примеч. ред.) Установка РНР 49 но, при загрузке ненайденного модуля РНР будет выдавать ошибку. ВНИМАНИЕ Полученный таким образом файл php.ini надо скопировать в директорию, в которой установлена Windows ( как правило, одноименная директория в корневом каталоге диска С). Имен- но там РНР будет искать этот файл. В последних версиях РНР его можно сохранить в директорию с установленным серве- ром Apache. Учтите, что загрузка и использование дополнительных модулей может в значительной степени снижать производительность ин- терпретатора РНР. Лучше всего использовать в работе только те модули, которые нужны при работе сайта. Теперь еще об одном важном моменте. Во всех руководствах по РНР написано, что данные, полученные из формы или передан- ные по ссылке вот так: name.phtml?a=l&b=2, автоматически становятся переменными РНР $а и $b. На самом деле это может быть не совсем так. Дело в том, что в целях безопасности, начи- ная с версии 4.1, РНР настраивается по умолчанию так, чтобы переданные значения не назначались переменным, потому что таким образом легко уничтожить уже существующие в скрипте переменные и взломать скрипт. Хотя это является сомнитель- ным, так как нужные переменные всегда можно отследить и за- щитить, но все-таки это факт. За назначение переменных отвечает параметр r e g i s t e r _ g l o b a l s в php.ini. Если r e g i s t e r _ g l o b a l s = On, то все полученные скриптом данные будут назначены соответствующим перемен- ным. Если r e g i s t e r _ g l o b a l s = Off, то получить значение пе- ременной можно, обратившись к массиву, соответствующему способу передачи данных в скрипт. На этом установку можно считать завершенной. Осталось пого- ворить о некоторых удобствах. 50 Знакомьтесь — РНР Переносимость и совместимость Один раз настроив свой сервер, хочется знать, как избежать дан- ной процедуры каждый раз при переустановке системы. Такая возможность есть. Если ваш сервер, РНР и сайты находятся в одном каталоге, перед переустановкой системы надо сделать резервную копию этого каталога. Этим вы застрахуете себя от возможных проблем. После того как система переустановлена, нужно восстановить только два файла — php.ini, чтобы восстановились все на- стройки РНР (если они не делались, забудьте об этом файле, РНР будет работать с установками по умолчанию), и hosts, ко- торый находится по адресу E:\WINDOWS\system32\drivers\etc (рис. 18). Это служебный файл Windows, который нужен для сопоставления имен. Его местоположение меняется в зависи- мости от версии Windows, но вы можете воспользоваться поис- ком, чтобы найти этот файл. Рис. 18. Файл hosts Вот пример содержимого файла hosts с моего компьютера: Синтаксис РНР 51 127.0.0.1 localhost 127.0.0.6 204040 127.0.0.2 virtual 127.0.0.3 price 127.0.0.4 start 127.0.0.5 test Как видите, он просто позволяет обращаться к сайту, используя имена вместо цифр. Смело редактируйте его в соответствии со своими потребностями. И, конечно, храните резервные копии. Итак, если диск не меняется, достаточно восстановить эти два файла. Если же по каким-то причинам есть необходимость сме- нить диск, на котором будет работать сервер, надо открыть файл httpd.conf, расположенный в папке e:/usr/apache/conf. Откройте этот файл, например, в Word, при помощи поиска и замены про- изведите замену имени старого диска на новый (рис. 19), и после этого сохраните файл. То же самое проделайте и с файлом php.ini, о нем мы говорили чуть выше. Можно протестировать работу сервера в новых условиях и, если все в порядке, приступать к программированию, если нет — искать ошибку на основе информации, которую выдает окно DOS-сес- сии Apache, Как правило, одну за другой все ошибки устранить не сложно. Теперь, когда все готово к работе, можно приступить непосред- ственно к изучению языка программирования РНР. Синтаксис РНР Как и у всякого языка программирования, у РНР есть свой син- таксис. Он очень похож на синтаксис языков С и Perl. Програм- мисты, пишущие на этих языках, смогут освоить РНР буквально за несколько дней. Но даже если вы никогда не программировали, Знакомьтесь — РНР 52 Рис. 19. Редактирование файла httpd.conf PHP поддастся вам легко и обеспечит базу для перехода на языки более сложного уровня. Все команды и правила просты. Синтак- сис включает в себя операторы, разделенные между собой точ- кой с запятой. ВНИМАНИЕ Одна из основных ошибок начинающих программистов — от- сутствие точки с запятой между операторами. Список других распространенных ошибок смотрите в приложении 2. К счастью, ошибки в РНР по умолчанию выводятся на экран мо- нитора (в отличие от CGI, где все ошибки записываются в log- файл, что, согласитесь, не очень удобно при анализе програм- мы), и найти ошибку при определенной внимательности и опыте не составит большого труда. Тем более что умный интерпретатор подскажет номер строки, в котором произошла ошибка. Синтаксис РНР Чтобы сервер знал, что в файле есть РНР-код, расширение фай- ла нужно сделать либо phtml, либо php3, либо php. Вообще, мо- жет быть назначено любое из этих расширений, но я рекомендую в целях совместимости всегда использовать phtml. Каждый скрипт в РНР начинается с . В любом месте скрипта РНР можно поместить комментарий, на- чинается он с /*, а заканчивается — */ Если комментарий не- большой и занимает только одну строку, можно поставить перед ним // и таким образом закомментировать любую строку до ее конца. Как обычно, пробелы, символы табуляции и перевод строки просто игнорируются и могут применяться для улучше- ния читабельности кода РНР. СОВЕТ В коде РНР удобно прятать комментарии к собственной про- грамме и пояснения для себя. Если в случае с HTML комментарии вместе с кодом попадают к посетителю в браузер, то РНР свой код никак не отдает, а потому и комментарии вроде есть, а по- сетителю они не передаются. Теперь напишем наш первый скрипт. Собственно, это не будет программой в полном смысле слова, но для тренировки подой- дет. Наберите команду: Сохраните с расширением phtml и запустите этот файл в браузе- ре, обратившись к нему при помощи адреса 1 2 7 . 0 . 0 . 1 / и м я файла .phtml. Удивлены? Не ожидали так много разной инфор- мации? Phpinfo — это функция для получения информации о возмож- ностях и настройках РНР. Она позволяет получить данные даже на удаленном сервере, т.е. вам доступна эта информация без об- ращения к администратору сервера. Только для этого нужен дос- туп к серверу по протоколу FTP. В приложении 3 приведены некоторые другие наиболее распро- страненные функции РНР. Знакомьтесь — РНР 54 • Возможности РНР Работа с базами данных Использование РНР для создания Web-страницы, работающей с базой данных, невероятно просто. На момент написания книги поддерживаются следующие базы данных: Oracle, Adabas D, Sybase, FilePro, mSQL, Velocis, MySQL, Informix, Solid, dBase, ODBC, Unix dbm, PostgreSQL. Несомнен- но список будет постоянно расширяться разработчиками РНР. Я не сомневаюсь, что если у вас есть на сервере база данных, то это одна из этих перечисленных. Впрочем, если нет, не беда, потому что РНР с легкостью позволяет сделать эмуляцию базы данных, делая запись непосредственно в файлы. Лишь бы места хватило. HTTP-аутентификация средствами РНР Аутентификация позволяет выполнить вход в зону, закрытую па- ролем, и доступна только при использовании модуля Apache. При использовании специальной функции вызывается диалоговое окно, позволяющее ввести логин и пароль, а в дальнейшем легко проверить введенные данные. Но на самом деле может оказаться проще и удобней самостоятельно организовать закрытую зону и предоставить для авторизованных посетителей к ней доступ. Работа с изображениями РНР может обрабатывать не только текст и HTML-код, но и ра- ботать с изображениями GIF, JPEG или PNG. Для этого вам надо скомпилировать РНР с библиотекой функций изображе- ния — GD. Поддержка закачки файлов Позволяет реализовать закачку файлов на сервер пользователем. Пригодится, например, для обмена музыкой, рефератами, про- Возможности РНР 55 граммами и т.д. Кроме того, РНР предоставляет полный кон- троль над загружаемым файлом, в том числе есть ограничения на размер, а также возможность управлять загруженным файлом. Поддержка HTTP-cookie Cookie — механизм для сохранения данных (небольших файлов до 4 Кб с информацией) в удаленном браузере и, таким образом, отслеживания или идентификации пользователей (см. приложе- ние 4). Вы можете устанавливать файлы cookie, используя функ- цию setcookie(). Cookie — часть HTTP-заголовка, поэтому функция setcookie {) должна вызваться прежде, чем браузеру будет послана какая-нибудь информация для вывода, вплоть до пробела. Любой cookie, посланный вам от клиента, будет автома- тически превращен в РНР-переменную. Использование регулярных выражений Регулярные выражения используются для сложного манипули- рования строками в РНР. На мой взгляд, это одна из самых по- лезных возможностей РНР. На основе этих функций со строка- ми можно сделать все, что угодно. Обработка ошибок Реализована как на глобальном, так и на локальном уровне. Вы можете вообще отключить вывод сообщений об ошибках на экран пользователя (полезно в готовом рабочем варианте, программы, закачанном на сервер) или обработать функцию таким образом, чтобы ошибка не была отображена, а сообще- ние об ошибке было отправлено по почте на любой адрес. Хотя, как правило, на это не обращают внимания, и порой в результате неправильных действий такая ошибка выводится в браузер. Программа может получать сведения об ошибочно- сти действий и таким образом принимать решения о своей дальнейшей работе. Знакомьтесь — РНР 56 Управление электронными письмами Оно сведено к одной функции. Есть адрес и текст, который нуж- но отправить на этот адрес. При помощи РНР письмо будет от- правлено без проблем. В дальнейшем мы рассмотрим не один пример с поддержкой отправки писем. На своем личном опыте я могу сказать, что сайт, построенный полностью на РНР, не испытывает каких-либо задержек в от- крытии и работе, даже несмотря на то, что интерпретатор РНР испытывает значительные нагрузки при размещении на сайте новостей, счетчика статистики, генерации баннеров несколь- ких типов и «склеивания» страницы из нескольких фрагмен- тов. Это и многое другое будет нормально функционировать при условии элементарной внимательности и качественной на- стройки сервера. Конечно, перечисленные возможности языка РНР далеко не полные, но по мере знакомства с ним вы научитесь создавать очень сложные вещи буквально одним движением руки (это я образно, конечно) и узнаете значительно больше. Вывод на экран и переменные в РНР РНР очень легко позволяет организовать вывод текста на экран. Рассмотрим пример скрипта: Во второй строке нашего скрипта переменной $name присваива- ется значение 6, и эта переменная автоматически становится це- лочисленной. В третьей строке кода переменной $hl2 присваивается значение 4.89, которое имеет тип числа с плавающей запятой. В четвертой и пятой строках кода переменным присваиваются значения со строковым типом. Все, что заключено в кавычки (включая циф- ры), будет интерпретировано как символьная строка. Простейшие арифметические операции 59 Простейшие арифметические операции Как и в других языках программирования, над переменными можно совершать любые арифметические действия в соответ- ствии с обычной логикой. Достаточно указать переменную для результата, знак равенства и перечислить в порядке выполнения действий переменные или значения с необходимыми арифмети- ческими знаками. Пример: Результат работы скрипта — вывод на экран цифры 4, РНР поддерживает все математические функции, многоуровне- вые скобки, логические операции, операции увеличения или уменьшения на единицу и многое другое. В РНР есть функции для увеличения или уменьшения перемен- ной на единицу. Для этого нужно указать имя переменной и за ним без знака равенства подряд два плюса или минуса соответ- ственно. Например, $а++; — переменная $а будет увеличена на единицу. Нескольким переменным можно одновременно присвоить одно значение: $а = $b = 4; — обе переменные и $а и $b будут рав- ны четырем. Вот еще несколько примеров нестандартных ариф- метических операций в РНР: Рассмотрим следующий работоспособный скрипт, который вы можете вставить к себе на страницу. Задача: вывести на экран че- рез пробел определенное количество последовательных чисел. В нашем случае это 1, 2, 3, 4, 5, т.е. пять последовательных чисел, начиная с единицы. Код решения: Пример, конечно, не самый лучший , но основные понятия язы- ка уяснить можно. Увеличение переменной на единицу реализуется указанием двух плюсов после переменной — $i++, хотя ничего не мешает писать так — $i = $± + 1;. Выполнив эту инструкцию пять раз, соот- ветственно увеличим переменную на пять, выводя между делом результат и не забывая о пробелах. На экран в результате работы скрипта будут выведены подряд (в строку) цифры «1 2 3 4 5». Если бы стояла задача вывести указанные цифры не в строчку, а в столбец, то вместо пробелов в кавычках надо было бы поставить HTML-тег перевода строки
. Вот так — echo " < b r > " . $ i ; . В результате на экране появится столбик из пяти цифр. Теперь рассмотрим алгоритм этого скрипта: • начать скрипт; • присвоить переменной $i значение 1; • вывести переменную $i на экран; • увеличить переменную $i на единицу; • вывести пробел и переменную $i на экран; • выполнять столько, сколько надо; • закончить скрипт. Как видите, ничего сложного нет. Просто делаем то, что нам надо. А теперь посмотрите, что получится в HTML-коде: ни следа РНР! Это ли не мечта многих — иметь возможность скрыть свой HTML-код. 1 Для решения данной задачи лучше было бы воспользоваться циклом (см. ниже), но на первых порах для знакомства я буду стараться все максимально упрощать. Знакомьтесь — РНР 62 Простейшие логические операции Очень просто организуется сравнение: «если — то — иначе». Для этого в РНР применяется конструкция: if ( ) { } e l s e { } Есть различные варианты синтаксиса этого оператора, но этот — основной и самый логичный из всех. Вот его расшифровка в пе- реводе на русский (а точнее, на алгоритмический) язык: (если) if (условие) (то) {выполняется то, что заключено в эти фигурные скобки} (иначе) e l s e {выполняется то, что заключено в эти фигурные скобки} После фигурных скобок ставить точку с запятой, как обычно ме- жду операторами, не обязательно. Но внутри фигурных ско- бок — разделение операторов между собой проводится только через точку с запятой, если только там не один оператор. Если же оператор один, то и круглые скобки могут не ставиться. СОВЕТ Я не рекомендую сильно увлекаться разными вариантами на- писания. Можно запутаться и не заметить элементарной ошиб- ки. Лучше пользоваться стандартным, понятным и удобочитае- мым способом, что позволит избежать глупых ошибок. Допускается вложение нескольких операторов условия один в другой. В этом случае надо быть очень внимательным к коли- честву закрывающих фигурных скобок, так как при отсутствии даже одной из них интерпретатор выдаст ошибку. ВНИМАНИЕ Если вы где-то забыли закрыть скобки или поставили лишнюю скобку (например, в начале кода), интерпретатор выдаст сооб- щение о том, что ошибка произошла в последней строке кода. Бесполезно искать неточность в этой строке, ищите лучше там, где в последний раз вставляли условный оператор. Найти та- кую потерявшуюся скобку в большом скрипте бывает очень Циклы 63 сложно, для этого заранее заботьтесь об удобочитаемости скрипта. Это сэкономит не один час отладки в дальнейшем. Рассмотрим несложный пример: При проверке истинности применяются два знака равенства для того, чтобы интерпретатор мог отличить сравнение от при- сваивания. ВНИМАНИЕ Программа не будет работать правильно, если вы забыли по- ставить двойной знак равенства при проверке истинности. И учтите, интерпретатор даже не подумает предупредить вас об этом! Для него это вполне обычная операция присваивания и одновременно проверки условия на истинность-ложность. Результат работы вышеприведенного скрипта — 95, так как $а не равно $b, а команда echo $ b . $ a ; (между переменными стоит точка, которая служит для объединения результатов в одну стро- ку, а не знак арифметической операции) выводит подряд указан- ные переменные. Таким образом, точка служит для склеивания строк или переменных. Проверка ложности обозначается символами ! =, допустимы все остальные арифметические, логические символы и операторы (например — or, and, >, <= и т.д.). Циклы Циклы в программировании — это повторяющиеся несколько раз операции. Для реализации циклов в РНР используются опе- раторы while, do...while, for и foreach. Начальное значение Знакомьтесь — РНР 64 указывается в начале цикла, а длительность его выполнения ог- раничивается каким-либо условием. Примером цикла может служить копирование нескольких фай- лов. Алгоритм выполнения этого задания можно описать так: • задать количество файлов; • установить счетчик скопированных файлов в ноль; • скопировать файл; • проверить, не равно ли значение счетчика заданному количе- ству файлов; • если нет — увеличить счетчик скопированных файлов и вер- нуться к началу цикла (опять скопировать файл); • если да — закончить цикл. Каждый проход цикла называется итерацией. Теперь рассмотрим, как циклы реализуются в РНР: \n"; $i++; endwhile; ?> Смысл скрипта очень прост. Присваиваем переменной $i значе- ние, соответствующее началу цикла, а переменной $n — значе- ние конца цикла. Далее открываем цикл оператором w h i l e (), и внутри его скобок описываем условие, при выполнении кото- рого цикл будет продолжать свою работу. В нашем случае выпол- нение не прервется, пока $i <= $n. Как только это условие будет Циклы 65 нарушено, управление передастся следующей за циклом опера- ции. Внутри цикла могут быть любые команды РНР (разделен- ные между собой как обычно — точкой с запятой). Только нужно следить за тем, чтобы переменная $i, используе- мая в цикле, была увеличена (и совсем не обязательно на едини- цу), иначе цикл станет бесконечным, и интерпретатор будет вы- полнять его, пока не закроется сессия (окно браузера). Оператор endwhile означает конец цикла. Скрипт, описанный здесь, выводит на экран браузера цифры от О до 10. Причем числа будут выведены в столбик, так как в стро- ке функции вывода echo после переменной $i мы указали HTML-тег перевода строки
. Для примера я привожу еще один, более быстрый вариант вы- полнения указанной выше задачи. \n"; } ?> Удивительно, но при выполнении этих двух примеров получает- ся одинаковый результат, а скрипт практически поместился в одну строчку. Разница в стиле применения оператора цикла и в том, что переменная цикла выводится на экран одновремен- но с увеличением. Рассмотрим еще один пример, основанный на применении кон- струкции РНР do...while. Это тоже цикл, и отличается от while тем, что значение логического выражения проверяется не до, а после окончания работы операторов, включенных в цикл. Та- ким образом, do...while гарантированно будет выполнен хотя бы один раз, что в случае с w h i l e совсем не обязательно (при ис- 66 Знакомьтесь — РНР пользовании while, если условие ложно, управление сразу будет передано дальше). Для циклов do...while существует только один вид синтаксиса: \n"; $i++; } while ($i <= 10); ?> Еще один оператор цикла — for. Его синтаксис: for (exprl; expr2; ехрrЗ) {последовательность опера- торов} Первое выражение (expr1) является безусловным и выполняет- ся в начале цикла. В начале каждой итерации выполняется ехрr2. Если оно истинно (равно t r u e ) , то цикл продолжается и выполняется вложенный(е) оператор(ы). Если оно ложно (рав- но f a l s e ) , то цикл заканчивается. В конце каждой итерации вы- полняется ехрrЗ. Каждое из этих выражений может быть пустым. Если ехрr2 пус- то, то цикл продолжается бесконечно (РНР по умолчанию счита- ет его истинным, как и в языке С). Это не так бесполезно, как кажется, так как зачастую требуется закончить выполнение цик- ла, используя оператор break в сочетании с логическим услови- ем, вместо использования логического выражения в for. Если внутри любого цикла встречается оператор break, цикл безус- ловно прекращает выполнение итерации, и управление переда- ется следующей за циклом команде. Например: Циклы 67 $а = 0; while ($a < 5) { if ($arr[$a] == "stop") { break; /* Выполнение цикла прекращается, если в массиве $аrr[] есть stop */ } $а++; } Если встречается оператор c o n t i n u e , то управление передается началу следующего ближайшего цикла. Например: while (list($key,$value) = each($arr)) { if ($key 2) { continue; } Вот как можно реализовать вывод списка чисел на экран пользователя при помощи оператора for: /* Пример 1 */ for ($i = 1; $i <= 10; $i++) { print $i; } /* Пример 2 */ for ($i = 1;;$i++) { if {$i > 10) { break; } print $i; } /* Пример 3 */ $i = 1; for (;;) { if ($i > 10) { break; } print $i; $i++; } Знакомьтесь — РНР 68 /* Пример 4 */ for ($i = 1; $i <= 10; p r i n t $i, $i++) ; Вот так по-разному при помощи РНР можно реализовать сход- ные задачи. Время и дата В РНР наиболее часто при работе с форматами времени использу- ется функция date. Ее синтаксис: $date = d a t e ("параметр") ; Параметров может быть несколько, разделяются они между собой запятой. Допустимы следующие параметры: а — может принимать значения "am" или "pm"; А — "AM" или "PM"; d — день месяца, цифровой, две цифры (на первом месте при не- обходимости ноль), т.е. от 01 до 31; D — день недели, текстовой, три буквы, например " F r i " ; F — месяц, текстовой, длинный, например " J a n u a r y " ; h — час, цифровой, 12-часовой формат, две цифры; H — час, цифровой, 24-часовой формат, две цифры; i — минуты, цифровой, две цифры, т.е, от "00" до "59"; j — день месяца, цифровой, без начальных нулей; 1 (строчная L) — день недели, текстовой, длинный, например "Friday"; L — указывает, високосный год или нет, т.е. " 0 " или " 1 " ; m — месяц, цифровой, т.е. от " 0 1 " до "12"; М — месяц, текстовой, три буквы, например " J a n " ; n — месяц, цифровой, одна цифра, т.е. от " 1 " до "12"; От англ. AM (Ante Meridiem) — до полудня, PM (Post Meridiem) — после полуд- ня. (Примеч. ред.) Время и дата 69 о — разница со временем по Гринвичу, в часах, например "+0200"; s — секунды, цифровой, две цифры, т.е. от "О" до " 5 9 " ; s — английский порядковый суффикс, текстовой, два символа, например " t h " , "nd"; t — количество дней в данном месяце, т.е. от " 2 8 " до " 3 1 " ; U — секунды с начала века Unix, т.е. с 1 января 1970 года; Y — год, цифровой, четыре цифры; w — день недели, цифровой, "О" означает воскресенье; Y — год, четыре цифры, например "1999"; у — год, цифровой, две цифры, например " 9 9 " ; z — день года, цифровой, например "299". ВНИМАНИЕ Некоторые параметры имеют различные значения при разном регистре, например d и D. Теперь вы легко можете получить информацию о текущем време- ни и использовать ее на своем сайте. Один из самых распростра- ненных вариантов — вывод текущего времени и даты. Конечно, все это выполняется и при помощи JavaScript, но видевшие эти скрипты поймут разницу (по крайней мере, в размере и скорости выполнения, не говоря уже о трафике от сервера к браузеру). Время, на мой взгляд, выводить достаточно бесполезно, так как оно есть у каждого пользователя на системной панели Windows, а вот вывести число, день недели и месяц (да еще на русском язы- ке) бывает полезно. Например, можно поприветствовать посети- телей соответствующей фразой в зависимости от времени суток: = 5 && $h <= 11) e c h o "Доброе у т р о ! " ; Имеются в виду суффиксы порядковых числительных в английском языке, на- пример second (второй), seventh (седьмой). (Примеч. ред.) 70 Знакомьтесь — РНР if ($h >= 12 && $h <= 18) echo "Здравствуйте!"; if ($h >= 19 && $h <= 24) echo "Добрый вечер!"; if ($h >= 1 && $h <= 4) echo "Доброй ночи!"; ?> Цифры желаемого времени можно указать любые, в зависимости от личного понятия дня и ночи :-) В этом скрипте сначала получаем текущее значение часов на сервере при помощи команды d a t e ( " H " ) , затем проводим его анализ, и в зависимости от того, в каких пределах лежит полу- ченное значение, выводим соответствующую фразу на экран посетителю. Обратите внимание, что в данном примере используется именно время сервера, без учета часовых поясов и соответствующего смещения времени. Другими словами, это не обязательно будет время, правильное для посетителя, так как он может жить доста- точно далеко от часового пояса сервера. Аналогичная проблема возникает в случае, если сервер расположен за рубежом, и, ко- нечно, время на удаленном сервере точно не будет совпадать с необходимым для правильной работы сайта. В этом случае сме- щение необходимо учитывать и закладывать в программы зара- нее. Это можно сделать таким способом: $time = d a t e ( " H : i " ) ; $time1 = d a t e ( " H " ) ; $time2 = d a t e ( " i " ) ; $time_s = 7; $timel = $timel + $time_s; if ($timel >= 24) { $timel = $timel - 24; } $time = "$timel:$time2"; В первой строке — просто получение текущего времени, ис- пользуется в случае одинакового часового пояса с сервером, дальше — программа расчета правильного времени для разных часовых поясов. В переменной $time_s хранится собственно смещение. Массивы 71 Массивы Массивы представляют собой ряд чисел или знаков, и имеют, как и все переменные, имя и значение. Но кроме этого они обла- дают индексом. Попробую пояснить. Допустим, вы стоите перед одноэтажным домом, в котором есть десять квартир. Дом — это определение, или имя, массива, а квартиры — это ячейки, кото- рые в массиве доступны, как и любая переменная в РНР. Все массивы начинаются, как правило, с нуля, но это не принципи- ально, как нам удобно, так можем и начинать, хоть с 3423. Но правильнее, конечно, начать отсчет с нуля. Итак, первая кварти- ра имеет имя $дом[квартира номер 0 ] , вторая квартира — $дом[квартира номер 1 ] , третья— $дом[квартира номер 2] и т.д. до девятой квартиры — $дом [квартира номер 8 ] . Обратите внимание: элементов массива 9, а последний индекс — 8. Здесь скрыта опасность запутаться, но если все четко себе представлять, такого не произойдет. Таким образом, массивы в РНР выглядят так: $имя массива [индекс]. Имя может быть каким угодно, как и имя любой дру- гой переменной. Индекс может быть либо числом, переменной, либо его может вообще не быть. В этом, нежелательном случае будет выбрана или записана ячейка массива, следующая за той, к которой было произведено последнее обращение в массиве. Например: В этом случае будет создан массив с именем $а и в его ячейки 0, 1 и 2 введены значения 1, 67456 и пример соответственно. Те- перь достаточно дать команду echo $а [ 2 ] ; и на экран будет вы- ведено слово «пример». Знакомьтесь — РНР 72 При таком задании массива может возникнуть проблема. Если массив с таким именем уже был определен раньше и в него были введены данные, то ввод данных продолжится с того индекса (точнее, именно с внутреннего указателя, а он может быть уста- новлен и не на самый конец массива, хотя, как правило, это именно так), на котором ввод данных был прерван. Избежать этого можно, если явно указывать значение индекса ячеек — не $ а [ ] , а $ а [ 0 ] , $ а [ 1 ] , $а [2] и т.д. Или не путаться с именами массивов. Рассмотренные нами массивы — одномерные. Бывают еще мно- гомерные. Например, двумерные массивы можно тоже сравнить с домом, но не с одноэтажным, а, например, с пятиэтажным. В этом случае добавляется еще один индекс для учета смещения по этажам. Например: $дом[первый этаж] [квартира номер 0 ] ; $дом[второй этаж] [квартира номер 0 ] ; $дом[пятый этаж] [квартира номер 0 ] ; С ячейками массива можно делать все то же, что и с любыми переменными РНР: применять арифметические, логические, операции сравнения, увеличения, уменьшения и т.д. А еще есть очень хорошая возможность, о которой нельзя не упомя- нуть. РНР позволяет считать в любой массив целый файл, что дает большие перспективы и интересные возможности. Без такой функции не обходится ни один серьезный скрипт. Вот ее формат: После выполнения этой команды в массиве $а будет находиться содержимое файла, имя или путь, к которому были указаны. Раз- делителем для разных элементов массива будет являться перевод Массивы 73 строки. Кстати, путь типа " h t t p : //...", как правило, не поддер- живается. Он может быть только относительным. Это связано с безопасностью. Если на сервере (точнее, в настройках РНР) включен режим SafeMode, такие пути просто исключаются из за- просов, и вы получите на экране сообщение об ошибке доступа. Хотя можете попробовать, вдруг у вас работает? А уж дальше что вы будете делать с полученной информацией — дело ваше. Каждый массив имеет внутренний указатель, который определя- ет текущий элемент массива. В самом начале работы с массивом внутренний указатель находится на первом элементе. Функции end ( ) , next ( ) , p r e v () и r e s e t () перемещают внутренний ука- затель массива. . Функция end () устанавливает внутренний указатель массива на последнем элементе, next () передвигает внутренний указатель массива в сторону увеличения (т.е. вперед) и возвращает следую- щий элемент массива от текущей позиции внутреннего указателя массива или f a l s e , если элементов больше нет. Если массив со- держит пустые элементы, то эта функция возвратит f a l s e и для этих элементов. Функция p r e v () перемещает внутренний указатель массива в сторону уменьшения индекса (т.е. назад) и возвращает преды- дущий элемент массива или f a l s e , если перед текущим нет эле- ментов. Если массив содержит пустые элементы, то функция также возвратит f a l s e . Функция r e s e t <) устанавливает внутренний указатель массива на первом элементе. Функция c u r r e n t {) возвращает элемент массива, на который в данный момент указывает внутренний указатель. Она не пере- мещает сам указатель. Если внутренний указатель находится в конце списка элементов, c u r r e n t () возвращает f a l s e . Если массив содержит пустые элементы (0 или пустую строку), то функция возвратит f a l s e для каждого из них. Функция s o r t () сортирует массив по возрастанию, в том числе по латинскому и русскому алфавиту, так как русские буквы тоже име- ют индекс, только несколько больший в отличие от латинских. Знакомьтесь — РНР 74 Функция r s o r t ( ) сортирует массив в обратном порядке (по убыванию). Конечно, это далеко не все функции, которые есть в РНР для ра- боты с массивами. Но остальные —- достаточно специфичные. Рассмотренных нам вполне хватит для полноценной работы и для написания своих собственных программ. Работа со строками Строка — тип данных, значениями которого являются последо- вательности знаков (причем цифры могут выступать в роли строки наравне с другими символами). Строка также может со- стоять из одного символа или вообще быть пустой. Работа со строкой всегда начинается с ее ввода. Самое простое — присво- ить переменной нужную строку. Вариантов как всегда много — или прочитать из файла, или выбрать из массива, или из фор- мы, в которую пользователь введет информацию. Нужно четко представлять, что нам необходимо сделать дальше со строкой или набором строк. Несколько строк можно, например, объе- динить (еще говорят «склеить»). Для этого между строками дос- таточно поставить точку. Например: В результате работы этого скрипта на экране появится надпись «Привет, мир», «собранная» из нескольких частей. Если переменная не определена, она по умолчанию приравнивает- ся к пустой строке. Однако это не число ноль, так как непосредст- Работа со строками 75 венно со строкой нельзя выполнить арифметическую операцию. Впрочем, если переменная все же действительно не определена за- ранее, выполнить операцию сложения, например, получится, так как переменные автоматически стремятся принять более правильный тип и станут целочисленными. Если вы присваиваете переменной нужное значение, то оно, как правило, не нуждается в обработке, так как программист делает присвоение в коде программы, и конечно, в нужном виде. Но если строка считывается из файла или получается посредством формы, она (символьная строка) нуждается в обработке. Самое первое, что стоит сделать, — удалить повторяющиеся про- белы. Для этого в РНР есть специальная функция: chop ( s t r ) ; Например: $str = chop ($str); В результате обработанное значение строки $ s t r не будет содер- жать повторяющихся пробелов. Если нужно убедиться в том, что строка не содержит пробелов в начале и в конце, применяется функция trim ( s t r ) ; Например: $ s t r = trim ( $ s t r ) ; Когда требуется удалить пробелы только в начале строки, нужно использовать функцию ltrim (). Иногда бывает полезно проверить регистр символов. Функция u c f i r s t () делает первый символ в строке заглавным, независи- мо от того, каким он был до этого. Есть и функция для перевода во всех словах в строке их первых букв в заглавные — ucwords ( s t r ) ; Кроме того, очень часто бы- вает необходимо сравнить строку с некоторым шаблоном. Част- ный случай — поиск в строке. Но нет никакой гарантии, что по- лученная строка введена пользователем или получена из файла в правильном виде. Другими словами, строка может содержать в середине слова или предложения чередующиеся строчные и прописные символы. Решение данной проблемы — в примене- нии функций s t r t o l o w e r ( s t r ) ; (переводит строку в нижний 76 Знакомьтесь — РНР регистр) и s t r t o u p p e r ( s t r ) ; (переводит строку в верхний ре- гистр). Комбинирование всех этих функций приводит к коррект- ному построению строки независимо от того, как она была вве- дена или получена в начальном виде. СОВЕТ Функции обработки строк можно применять при проверке на соответствие логинов и паролей. Это не даст посетителям возможности использовать хитрые комбинации из маленьких и больших букв для создания похожих логинов. Еще одна необходимая вещь при работе со строками — их обрез- ка. Она часто применяется при обработке форм для ввода данных. Представьте, что кто-нибудь из ваших «доброжелателей» введет в форму вашей гостевой книги текст этой книги. Как думаете, что получится? Чтобы избежать подобной ситуации, и нужно ограни- чить количество вводимых символов в любом поле формы. Сна- чала, конечно, нужно задать ограничение в HTML-коде самой формы: Теперь форма с именем «form» ограничена в количестве вводи- мых символов числом 100. Но это еще далеко не все. Дело в том, что обойти такое ограничение очень просто, и нужно оно скорее для того, чтобы показать посетителю предел ограничения. Такие ограничения обходят следующим образом. Делают точно такую же страничку (пользователь может просмотреть ее код в любом браузере), изменяют число 100 на нужное, сохраняют ее у себя на диске с расширением HTML и запускают со своего компьютера. Серверу ведь все равно, откуда получать информацию (если не задать проверку в коде), он нормально воспримет такую подмену и обработает полученные данные. Чтобы запретить обрабатывать такие данные, нужно в обработчике проверять, откуда именно происходит ввод и каков размер полученных данных. Для этого нужно воспользоваться РНР-функцией s u b s t r i n g ( s t r i n g , s t a r t , l e n g t h ) . Для нашего примера это будет вы- глядеть так: Работа со строками 77 $form = substr($form,0,99); Этим вы просто отрезаете часть полученной строки, превышаю- щую 100 символов (указывается цифра 99, так как счет символов начинается с нуля). Теперь все попытки ваших посетителей зава- лить вас информацией будут тщетны, так как ваш умный скрипт не пропустит больше определенного вами количества символов. Собственно говоря, у функции substr совсем другое предназна- чение. Она возвращает часть строки s t r i n g , определяемую па- раметрами s t a r t (начало) и length (длина). Если параметр s t a r t положительный, то возвращаемая строка будет начинать- ся с символа, который стоит на позиции s t a r t строки s t r i n g . Например: $form = s u b s t r ( " a b c d e f " , 1 ) ; // вернет "bcdef" $form = s u b s t r ( " a b c d e f " , 1, 3 ) ; // вернет "bed" Если параметр s t a r t отрицательный, то возвращаемая строка будет начинаться с символа, который стоит на позиции s t a r t от конца строки string. Например: $rest = substr ("abcdef", -1); // вернет "f" $rest = substr ("abcdef", -2); // вернет "ef" $rest = substr("abcdef", -3, 1); // вернет "d" Если параметр length указан и он положительный, то возвра- щаемая строка закончится через length символов от начала s t a r t . Это приведет к строке с отрицательной длиной (потому что начало будет за концом строки), поэтому возвращаемая строка будет содержать один символ от начала строки s t a r t . Если length указан и он отрицательный, то возвращаемая строка закончится за length от конца строки s t r i n g . Это опять приведет к строке с отрицательной длиной, поэтому воз- вращаемая строка будет содержать один символ от начала стро- ки s t a r t . Например: $rest = substr("abcdef", - 1 , -1) ; // вернет "bede" Вот такая полезная функция. Знакомьтесь — РНР 78 Кроме того, при обработке данных формы очень важно уметь вырезать из полученной, строки лишние или недопустимые сим- волы. Для этого есть функция s t r _ r e p l a c e ( n e e d l e , s t r , haystack) ;, при использовании которой все последовательно- сти символов needle, введенные в строку haystack, заменяют- ся на последовательность символов s t r Например: $str = str_replace("", "\n", $str); // вырезается символ ввода $str = str_replace("red", "black", $str); / / в строке красный цвет будет заменен на черный Вообще я очень люблю эту функцию и с ее помощью часто де- лаю многие полезные вещи. Не сомневаюсь, вы тоже сможете найти ей интересное применение. Если требуются какие-то особые правила замены, то вам следует использовать функцию e r e g _ r e p l a c e {), которую мы здесь не рассматриваем. Она хоть и более функциональна, но зато испол- няется явно дольше и в большом цикле, например, приведет к ощутимым потерям времени. Сессии Сессии — очень эффективный механизм, появившийся в РНР 4.0. Упрощенно говоря, он позволяет передавать переменные от од- ного окна браузера к другому без их потери и без передачи мето- дами POST или GET. При этом сессии используют в своей работе уникальные идентификаторы SID. Именно с их помощью можно определить, какой пользователь запустил сценарий. Идентифи- катор сессии хранится в cookie браузера. Фактически SID — это имя временного хранилища, т.е. временного файла, в котором РНР хранит информацию о сессии. Обычно эти файлы размеща- ются в каталоге tmp на диске сервера, но не на диске пользователя (в отличие от cookie). Сессии 79 Если cookie отключены, SID все равно передается, но уже при помощи методов GET ИЛИ POST, В зависимости от ситуации и бо- лее выгодного положения дел. Имена переменных в сессиях задаются без знака доллара. Мож- но несколько раз регистрировать одну и ту же переменную в сес- сии, ее значение все равно будет сохранено. Описание функций для работы с сессиями смотрите в приложе- нии 3. Часть IV Программирование на РНР Сравнение чисел Задача: если числа равны — вывести сумму чисел, если числа не равны — выбрать большее и вывести его на экран. Решение: 1 $е ) { echo $w; } else { echo $e; } 10 // если нет — и одно больше другого — выводим числа 11 exit; 12 ?> Опишем скрипт. Заданы два числа (строки 2—3). Сначала пыта- емся проверить, равны числа или нет (строка 4). Обратите вни- мание на двойной знак равенства в операторе if. Дело в том, что если оставить тут один знак равенства, то переменной $w будет присвоено значение переменной $е. А в нашем случае надо про- верить, равны ли переменные. Это и достигается двумя знаками равенства. Другими словами, если вам надо провести сравнение, равны ли две переменные, не забудьте поставить два знака ра- венства. Поставите один — будете очень долго искать правды от вашего скрипта, а он упорно не будет работать. Если числа равны, выводим их сумму, используя знак сложения между переменными и функцией echo (строка 6), а потом за- вершаем скрипт, если это надо командой e x i t . Команду завер- шения в этом месте можно было бы не ставить, в этом случае интерпретатор стал бы дальше обрабатывать код, и в конце его нашел бы ту же команду в строке 11, но это заняло бы опреде- ленное время. Старайтесь не заставлять интерпретатор произ- водить ненужные действия, и он отплатит вам приличной ско- ростью работы. Если же числа не равны, код вывода на экран суммы (обратите внимание, что он заключен в фигурные скобки) будет проигно- рирован, и интерпретатор продолжит свою работу и станет про- верять, какая из переменных больше (строка 9). Очевидно ведь, что если значения переменных не равны, то одно из них больше, а другое меньше. Итак, если $w > $е, выводим на экран $w, так как она больше. А если условие не удовлетворяется, интерпретатор считает, что $w <= $е, и выполняется конструкция в скобках после e l s e — { echo $e; }. Но так как на равенство мы уже проверяли пере- менные в начале скрипта (в строке 4), то эта конструкция выпол- нится, только если $w < $е. Вот тут нам и пригодился оператор e x i t в строке 7, так как если бы его не было, то при равенстве переменных на экран, кроме суммы переменных, была бы выда- на переменная $е. После обработки всех строк интерпретатор завершает свою рабо- ту, а браузеру передается результат в виде одного числа. Еще один оператор, при помощи которого можно сравнить пере- менную или выражение с различными значениями и выполнить разные фрагменты кода в зависимости от того, чему будет равно значение выражения, -- это switch. Как всегда, лучше понять смысл на примере: 82 Программирование на РНР Вот как можно применить на практике сравнение чисел. Вложение файлов в документ Каждый, сделавший хоть одну страничку в Сети, сталкивался с проблемой изменения тех или иных данных на ней. Конечно, это не сложно, когда страница одна или их несколько. Но если вы сделали большой сайт, маленькое дополнение (например, строка в меню) в сотни файлов может превратиться в настоящий кошмар. РНР быстро решает эту проблему, позволяя вкладывать одну страницу в другую. Достигается это с помощью операторов require () и include (). После этих операторов в круглых скоб- ках должен стоять путь к вкладываемому файлу. Например: include ("text.phtml"). Различие между указанными опера- торами заключается в том, что require () подменяется содержи- мым указанного (файла и может быть использован только один раз, a include () вставляет и выполняет содержимое указанного Программирование на РНР 84 файла, что позволяет применить его несколько раз, например в цикле. В любом случае добавляемый код надо заключить в кон- струкцию . Рассмотрим подробнее различия этих двух операторов. Я уже упоминал, что РНР частично является компилятором, так как при обработке преобразовывает код в свое внутреннее представ- ление. Когда интерпретатор доходит до оператора i n c l u d e (), он останавливается и запускает работу программы с начала или с момента прежней остановки. И только после выполнения этого участка кода вызывает файл, указанный в i n c l u d e (). В случае с r e q u i r e () действия интерпретатора совсем иные. Он сразу об- рабатывает указанный файл, не делая никаких остановок на вы- полнение предыдущего уже обработанного кода. Таким образом, скорость обработки r e q u i r e () значительно выше за счет отсут- ствия остановки на дополнительное вложение и обработку. Од- нако использовать в цикле или в условии r e q u i r e () уже не по- лучится, в таких случаях нужен именно i n c l u d e (). Вложения файлов могут происходить только внутри серверного пространства, доступного РНР. Другими словами, вы не можете использовать в имени файла h t t p : //, если только это не разре- шено в настройках сервера. Достаточно часто встречаются сайты, ссылки на которые включа- ют в себя специальные символы — &, ?, %. Все это может быть признаком выполнения РНР-скрипта. Дело в том, что если ссыл- ку написать так: адрес?имя=значение, то переменная с этим именем будет доступна под этим же именем в файле, на который указывает ссылка. Например, ссылка h t t p : / / n a m e . c o m / i n d e x . p h t m l ? l e x = 7 ука- зывает на файл index.phtml. Но если на нее щелкнуть, файл будет запущен на сервере с инициализированной переменной РНР $1ех со значением 7. Этот прием позволяет легко передать про- грамме нужные данные. Метод такой передачи называется GET. Еще есть, например, метод POST (СМ. приложение 5). Если необходимо добавить несколько переменных, то они могут быть разделены знаком &. Теперь мы можем сделать сайт, кото- Вложение файлов в документ 85 рый будет доступен с помощью только одной страницы. А всю остальную информацию эта страница будет выводить на основа- нии полученных по ссылке данных. Выглядеть ссылка может следующим образом: h t t p : / / и м я / i n d e x . p h t m l ? l i n k = l Единица в конце ссылки и есть наш параметр, который будет подставляться в файле index.phtml. Например: .. начало файла.. Konon.mobi