Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LABNET_13_14.doc
Скачиваний:
10
Добавлен:
07.02.2015
Размер:
667.14 Кб
Скачать

6.5.4. Шифрование данных на диске при помощи pgp.

PGP может также использоваться для защищенного хранения файлов на диске. Для шифрования и расшифровки файлов могут использоваться различные механизмы.

1. С помощью Word создайте произвольный документ и сохраните его под именем pgp-test.doc.

2. Выполните его копирование в буфер.

3. Щелкните правой кнопкой на PGPtray на панели индикации и выберите в контекстном меню команду Clipboard/Encrypt & Sign (Буфер обмена/ Зашифровать и подписать).

4. В открывшемся диалоговом окне перетащите созданный ключ в список Recipients (Получатели) и щелкните ОК.

5. Введите парольную фразу, используемую для ЭЦП, и щелкните ОК.

6. Вернитесь в Word. НажмитеDeleteиCntrl/V(Вставка). Сохраните документ какpgp-testclp.doc. ЗакройтеWord.

7. Запустите программу Проводник и откройте папку, в которой и лежит файл pgp-test.doc.

8. Щелкните правой кнопкой мыши на значке файла и выберите в контекстном меню команду PGP/Encrypt & Sign (PGP/Зашифровать и подписать). Далее дей­ствуйте в соответствии с пп. 4-5.

9. Убедитесь, что в папке появился файл pgp-test.doc.pgp.

10. Теперь расшифруем файлы. Запустим Word, откроем файл pgp-test-clp.doc.

11. Щелкните правой кнопкой на значке PGPtray и выберите Current Window/Decrypt & Verify (Теку­щее окно/Расшифровать и проверить).

12. Введите парольную фразу и щелкните на кнопке ОК.

13. В открывшемся окне Text Viewer (Просмотр текста) щелкните Copy to Clipboard (Скопировать в буфер).

14. Вставьте текст в окно программы Word и сохраните полученный файл.

15. Откройте Проводник и разыщите файл pgp-test.cjoc.pgp. Дважды щелкните на его значке.

16. Введите пароль и щелкните ОК.

17. Так как оригинал файла не был уничтожен, программа предложит указать, под каким именем следует сохранить файл. Введите это имя по своему усмотрению.

Тема 7. Технологии Web-программирования. Cgi.

Web-программирование - создание CGI-приложений и использование на web-сайтах технологий JavaScript, VBScript,PHP, Delphi, Perl, Python и др. для создания динамических элементов. Языки программирования, используемые при разработке web-сайтов, можно разделить на две группы. К первой относятся те, код которых выполняется на компьютере клиента - в его браузере (JavaScript, VBScript) Программы на этих языках встраиваются в web-страницы. Во вторую - входят языки, программы на которых выполняются на web-сервере. На web-сервере могут исполняться программы на любом языке, нужно только, чтобы на нем был установлен интерпретатор этого языка, удовлетворяющий особым требованиям - стандарту CGI, которым также должен удовлетворять сам web-сервер.

Скрипты (сценарии) - это программы, исполняемые тем или иным интерпретатором (браузером, WHS и др.). JavaScript поддерживается почти всеми браузерами., а VBScript.- только Internet Explorer. Поэтому использование JavaScript предпочтительнее, но он немного сложнее и не позволяет реализовывать некоторые возможности VBScript.

Апплеты. Вweb-программировании иногда используются еще Java-апплеты. Java - это мультиплатформенный язык программирования (по синтаксису похож на Cи.). Программы на нем, могут выполняться на любых платформах (IBM PC,Macintoshи др.) специальным интерпретатором (виртуальной машиной Java). Для различных платформ существуют свои версии Java, а сам язык Java одинаков для всех платформ. Поэтому один и тот же Java-апплет может работать на любом типе компьютеров, для которого есть "виртуальная машина". Java-апплет может быть вставлен в web-страницу. С помощью Java-апплетов можно добиться интересных визуальных эффектов, но их загрузка и выполнение замедляют работу клиента. Поэтому Java-апплеты используют редко, например, для внедрения в страницу сложного калькулятора научных расчетов. Большинство возможностей Java-апплетов может быть реализовано средствами JavaScript, VBScript и Dynamic HTML. Создаются апплеты с помощью пакетов типа Java Developer Kit.

Script Editor– редактор скриптов в составе пакета офисных программ MSOffice. Предназначен для разработки Web-сайта, написания программ на языках JavaScript и VBScript и других Интернет-разработок.

Урок 7.1.Исполнение сценариев Jscript, VBScript в браузере.

Сценарий на HTML-странице заключается в тэги<script>и</script>. Чтобы скрыть сценарий от старых браузеров, не понимающих тэг<script>, его текст (без заголовка и окончания) окаймляют комментарием<!-- …-->. Тогда новый браузер скрипт выполнит, а старый - проигнорирует. ВVBScriptдолжно стоять указание вида<SCRIPT ID=clientEventHandlersVBS LANGUAGE=vbscript>. То же рекомендуется и для JavaScript<SCRIPT language=JavaScript>, но не обязательно.

Текст скрипта может находиться в отдельном файле *.js (JavaScript) или *.vbs (VBScript), что может облегчить обновление сайта. Для включения скрипта из отдельного файла служат тэги <SCRIPT language=JavaScript src="Имя_файла.js"></SCRIPT>или<SCRIPT language=VBScript src="Имя_файла.vbs"></SCRIPT>.

Загрузка скриптов. Скрипты могут исполняться автоматически во время загрузки или при действиях пользователя. Автоматический - состоит из простого набора команд, без заголовков и окончаний.

Пример. Следующий сценарий будет выполнен сразу после загрузки. В загружаемом документе в том месте страницы, где располагается скрипт, появится строка "Вы используете Microsoft Internet Explorer".

<SCRIPT language="JavaScript">

if (navigator.appName == "Microsoft Internet Explorer")

document.write ("<p>Вы используете Microsoft Internet Explorer</p>");

</SCRIPT>

Чтобы скрипт был выполнен до загрузки страницы, рекомендуется поместить его в раздел <head>, однако тогда функции работы с текстом страницы скрипту будут недоступны - ведь он выполнится до загрузки страницы.

Ввод-вывод.Командаdocument.write является одной из важнейших в JavaScript. Она используется, когда нужно записать что-нибудь в документ.

Альтернативный стандартный метод - команда alert() выводит информацию не в документ, а в специальное окно (с кнопкой ОК) внутри рабочего поля браузера. При этом работа программы приостанавливается – до нажатия кнопки ОК. Напримерalert("Это мой первый Java-скрипт").

Второй стандартный метод confirm() аналогиченalert, но выводит две кнопки (ОК иCancel). В зависимости от нажатия одной из них возвращается разный результат. Если ОК, то Истина (True), иначе – Ложь (False).

Третий стандартный метод prompt([сообщение, вводимое_значение]) аналогиченconfirm, но выводит дополнительно текстовое поле для ввода. Напримерprompt("Ваше имя", “”).

Комментарии. 2 варианта. Первый // Комментарий в одной строке. Второй /* Многострочный комментарий */.

Функции. Подпрограммы.Чтобы сценарий выполнялся при наступлении определенных событий ( окончании загрузки и др.), необходимо оформить его как функцию (у скрипта должен появиться заголовок и окончание).

Для JavaScript заголовком является оператор function имя_скрипта(), а текст заключается в фигурные скобки:

<script Language=JavaScript>

function skript()

{

...Команды сценария...

}

</script>

В VBScript заголовок Sub имя_скрипта(),а после текста скрипта должна следовать команда End Sub:

<SCRIPT ID=clientEventHandlersVBS LANGUAGE=vbscript>

Sub runscr()

...Команды сценария...

End Sub

</SCRIPT>

Сценарий, оформленный так, имеет имя (стоит после functionилиSub). По этому имени его можно вызывать из любого места страницы. Вызов - это просто команда его выполнить. Например, при нажатии кнопки<input type="button" value="Готово" onClick="startskript()">будет выполнен скрипт с именем startskript.

Объекты. Встроенные объекты - это программные единицы с заданными (разработчиком языка) двумя типами характеристик – свойства и методы. Свойства аналогичны обычным переменным – имеют имена и значения. Методы - аналогичны функциям (с параметрами или без). Примеры объектов –string,array и др.

Работа с объектами основана на следующем синтаксисе. Чтобы узнать значение свойств объекта надо написать имя_объекта.свойство_объекта. Отметим, что объект может и не иметь свойства. Чтобы заставить объект выполнить присущий ему метод надо написатьимя_объекта.метод(параметры). Объект может и не иметь методов.

Кроме встроенных можно создавать пользовательские объекты, например, на основе наследования свойств.

События. Сценарий может вызываться при происхождении какого-либо события для объекта. Например для объектаwindow(окна открытой web-страницы):оnload- событие, возникающее при окончании загрузки страницы илиonresize– событие, возникающее при изменении размеров окна и др.

Следующий пример показывает, как вызвать Javascript при наступлении события - полная загрузка страницы:

<SCRIPT FOR=window EVENT=onload LANGUAGE="JScript">

...Команды скрипта...

</SCRIPT>

В VBScript подобный вызов делается несколько по-другому:

<SCRIPT ID=clientEventHandlersVBS LANGUAGE=vbscript>

Sub window_onload()

...Команды скрипта...

End Sub

</SCRIPT>

Следующий пример Описывает реакцию на нажатие кнопки без использования тега SCRIPT(за счет прямого использования скриптовой команды в документе):

<input type="button" value="Щелкни меня"> onClick=”alert(‘Спасибо…’)”>

Гиперссылки.Если необходимо выполнить некоторые действия при выборе гиперссылки, но при этом не перегружать текущие страницы, то в параметре HREF можно указать <A HREF="javascript:void(0)">Мой скрипт</A>. Таким приемом часто пользуются при программировании событий, связанных с проходом мыши через гиперссылку.

Задание. Разработать примеры скриптов на JavaScript и VBScript (можно на основе приведенных примеров).

Урок 7.2.Язык PHP.

Серверные сценарии. Выполняются на сервере (CGI-скрипты). CGI - это не язык, а принцип действия скриптов: при их выполнении берутся данные от браузера пользователя и обрабатываются на сервере. CGI-скрипты позволяют решать разные задачи: поиск по сайту, работа с базами данных, динамическая генерацию страниц с нужным пользователю содержанием. ПримеромCGI-сценариев являются программы на языкеPHP.

PHP– язык программирования серверного типа. Программа на PHP исполняется на web-сервере. Создавая программы на PHP, нет необходимости учитывать все мелочи, которые отравляют жизнь программистам на Perl или C++. Это делает PHP хорошим выбором для web-дизайнера среди другихCGI-технологий.

PHP можно использовать и для написания программ, работающих и на локальном ПКи не требующих ни броузера, ни web-сервера. Тогда вместе с программой должен поставляться и интерпретатор этого языка.

Возможности PHPможно расширить с помощью дополнительных модулей, которые размещаются наweb-сервере, на котором установленPHP-интерпретатор. Их можно загрузить сwww.php.net, там же в разделе документации приведено и их описание. (Однако, на сервереhttp://php.spb.ruникаких дополнительных модулей нет).PHP- развивающийся язык и новые модули появляются часто. Поэтому при желании использовать функции какого-либо модуля нужно проверить, поддерживает ли ихweb-сервер, на котором вы собираетесь размещать сайт. Сделать это можно, либо разместив на сервере страницу со строчкой <?phpphpinfo() ?> и загрузив ее с сервера в браузер (будет отображена версияPHP, параметрыweb-сервера и др.).

Подготовка к работе. Вначале нужно установить на свой ПК web-сервер Apache из загруженного файла (процесс описан на сайте Дмитрия Бородина по адресу http://php.spb.ru/php/install_module.html) и освоить его использование. После этого можно работать с PHP-программами на своем ПК, не выходя в Интернет (тестировать PHP сайты и др).

Затем можно приступить к изучению языка. Русскую версию учебника по PHP 4-х версий можно загрузить с сайта разработчиков PHP и с некоторых русских сайтов, например http://pyramidin.narod.ru. Для написания кода PHP подходит любой текстовый редактор – Блокнот, Script Editor от MSOffice и др.

В RuNet'е использовать PHP разрешается, например, на бесплатных серверах http://www.h1.ru, http://webservis.ru, http://wallst.ru, http://www.hut.ru, http://meridian.tomsk.ru, на иностранных - http://www.saxen.net и других. При выборе бесплатного хостинга для размещения сайта помните, что вам придется размещать и рекламные баннеры.

На рынке платного хостинга ситуация другая - сейчас уже трудно найти хостинг, где бы, наоборот, не предлагали использовать PHP. Например ValueHost (www.valuehost.ru), www.350mb.ru, www.net.ru и другие.

Синтаксис PHP. Программы на PHP встраиваются в текст web-страницы в угловых скобках (тегах) с вопросительными знаками и указанием языка. Команды PHP обязательно разделяются символом точки с запятой - ";" (символы конца абзаца или конца строки не учитывается никак), после последней в программе команды его можно не ставить. Также ";" не ставится после условных операторов (if, switch) и операторов цикла (for, while и других).

<?php

...

текст программы

...

?>

Пример.

Рис. Программа на PHP (выделена жирным) в тексте web-страницы.

Переменныев PHP не надо заранее объявлять. Для ввода новой переменной достаточно присвоить ей значение, а для помещения значения переменной в строку текста, имя файла или параметр команды нужно написать ее имя в том месте, где должно быть ее значение. Чтобы отличать переменную от строк или команд, ее имя должно начинаться со знака доллара "$" и не содержать пробелов, знаков апострофа и некоторых других. Интерпретатор считает именем переменной все, что содержится между $ и ближайшим к нему символом, недопустимым в имени. В качестве имен переменных можно также использовать другие переменные - для этого другую переменную следует просто указать на месте имени первой: $$a. Переменные могут быть четырех типов - число (целое и дробное), строка текста, массив и объект. Интерпретатор автоматически определяет тип переменной на основании анализа ее содержимого.

Пример. При выполнения кода $a="птица"; $b="Дятел - $a"; переменной $b присвоится значение "дятел - птица".

Часто используются сокращенные обозначения арифметических действий над переменными и действий по присваиванию им каких-либо значений. Например, команда $a+=3 означает, что переменную $a надо увеличить на 3. Точно так же команда $a-=3 уменьшает переменную $a на 3, а команды $a*=2 и $a/=2 соответственно умножают и делят на два переменную $a. Команда $a.=" строка" эквивалентна команде $a="$a строка".

Применяются также операции инкремента и декремента - изменения значения переменной на 1. Так, команды $a++, $a-- - они соответственно увеличивают и уменьшают значение переменной $aна единицу. То же самое делают и команды ++$a, --$a, однако в том случае, если подобная команда используется в выражении, они в отличие от предыдущих сначала изменяют значение переменной, а потом выдают его в выражение. Иными словами, если переменная $aравна 2, то после выполнения команды$b=$a++;ее значение достигнет 3, а $bбудет установлена в 2. В то же время команда$b=++$a;установит обе переменные в 3.

Массив - это совокупность под одним именем перенумерованных переменных.

Пример. Массив с числовыми индексами (индексы нумеруются с нуля):$a[0]=100; $a[1]=101; $a[2]=102;

а вот с символьными: $a['first']=100; $a['second']=101; $a['third']=102;

Добавлять элементы в массив можно явно указывая индекс элемента (например, $a[100]="Андрей";) или упоминая, в какой массив этот элемент добавляется -$a[]="Андрей";.В последнем случае элемент добавляется в конец массива.

* * *

Основные команды.

include "имя файла"- включение содержимого одного файла в другой.

Если файл, который включается в страницу с помощью команды include, отсутствует, то вместо него размещается уведомление об этом, а программа наPHPвыполняется дальше. (Если необходимо, чтобы при отсутствии включаемого файла обработка и выдачаweb-страницы завершились, вместоinclude следует использоватьrequire.)

mail ("Кому", "Тема", "Текст сообщения", "Дополнительные заголовки")- отправка почтового сообщения. При выполнении команды на сервере формируется электронное письмо в соответствии с указанными параметрами и отправляется с помощью установленной на сервере почтовой программы. В качестве параметра "Кому" может выступать набор адресов, разделенных запятыми. "Дополнительные заголовки" могут быть любые, разделяться они должны комбинацией символов/n, которая вPHPозначает перевод строки. (Если среди "Дополнительных заголовков" не указано полеFrom, то оно заполняется по умолчанию, например, именем "UnprivilegedUser".)

echo ("текст") ­- вывод наweb-страницу какого-либо текста. Чтобы вывести значение переменной достаточно написать ее имя внутри выводимой строки: команда echo "это цифра $a" выведет в web-страницу текст "это цифра 1", если ранее переменной $a присваивалось значение единицы.

if (условие) {…команды, которые должны выполняться, если условие верно…;} else {…команды, которые должны выполняться, если условие неверно…}– условный оператор. В фигурных скобках может располагаться несколько команд, разделенных точкой с запятой. В качестве условия может быть оператор сравнения "равно" - "==" (два знака равенства!), "больше" - ">", "меньше" - "<" и их комбинации - скажем, "<=". Можно использовать и несколько условий, взяв каждое из них, а также все вместе в скобки и разделяя знаками "&&" - "и" или "||" - "или".

for (начальное значение счетчика, условие продолжения цикла, изменение счетчика на каждом цикле) {...команды...;} - цикл. Например, циклfor ($i = 1; $i <= 10; $i++) {echo $i;} выводит вweb-страницу числа с 1 до 10, так как в нем изначально устанавливается значение счетчика в 1 -$i=1, каждый цикл его значение увеличивается на 1 -$i++, а продолжаться он будет до тех пор, пока значение счетчика не превысит 10 (т.е. пока$i<=10).

while (условие) {...команды...} - цикл с условием. Например, циклwhile ($i<=10) {...команды...; $i++;} будет выполняться пока значение переменной $iне превысит 10 - если вначале оно было равно 1, то цикл выполнится 10 раз.

Цикл do {...команды...} while (условие) работает так же, однако команды, указанные в фигурных скобках, будут выполнены по меньшей мере один раз - даже если условие выполняться не будет.

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

switch (выражение) {case значение: ... команды…; break; case другое значение: ... команды…; break;} - оператор выбора. Содержимое фигурных скобок просматривается сверху вниз, и как только будет найден операторcaseсо значением, совпадающим со значением выражения в заголовке оператораswitch, PHP начнёт выполнять весь код, следующий за эти оператором, до последней фигурной скобки оператораswitchили до первого оператораbreak. (Обратите внимание, что еслиbreakне указать в конце кода, относящегося к одному варианту значения выражения в заголовке оператораswitch, PHP будет выполнять коддальше- то есть тот, который принадлежит уже следующему операторуcase! Это - одно из отличий данного оператора от аналогичных в других языках программирования.)

В конце оператора switchможно указать операторdefault- код, стоящий после него, выполнится в том случае, если значение выражения в заголовке оператора не совпадет ни с одним из значений после операторовcase.

foreach (переменная as массив) {...команды...;} - поочередное считывание всех элементов массива.Foreach считывает в указанную в его параметрах переменную все элементы указанного в них же массива по очереди, выполняя каждый раз указанный после него в фигурных скобках код, в котором указанная переменная может использоваться. Оператор может быть использован только вPHPверсии 4.0 и выше.

* * *

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

Пример. Следующий код<?php if ($a==1) { ?><p>Переменная а равна 1</p><?php }?>

эквивалентен коду <?php if ($a==1) {echo "<p> Переменная а равна 1</p>";} ?>

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

Функции и подпрограммы. Создание функции -function имя (переменные, в которые записываются передаваемые параметры, и их тип) {...команды функции...}. Вызов - указание имени этой функции и параметров.

Переменные, созданные в функции, по умолчанию имеют установленное значение только внутри функции. Кроме того, также по умолчанию переменные, обьявленные вне функции, в ней самой никакого значения не имеют, а если надо, чтобы имели, то в начале функции их следует "подключить" командой global переменная.

Обычно для ускорения работы web-сервер настраивается так, что на предмет наличия программ наPHPпросматриваются файлы, имеющие расширение .php, .php3, .phtml, остальные файлы передаются в браузер пользователя без поиска в них командPHP.

Так как PHP-код полностью исполняется наweb-сервере, то в страницах, выдаваемых браузеру, он будет отсутствовать, и если кто заинтересуется вашим опытом программирования, то вам придется отправлять ему этот код по почте, так как при просмотре сайта каким-нибудь образом узнать исходныйPHP-код его страниц нельзя.

Формы. Значения переменных можно передавать между страницами сайта с помощью форм. Формой называется конструкция, состоящая из поименованных элементов, заключенных междуHTML-тэгами <form…> и </form>. В качестве элементов формы могут выступать поля ввода текста, кнопки, выпадающие меню, переключатели, квадратики для отметки галочкой -checkbox'ы и картинкиjpgилиgif. Каждый элемент формы может иметь свое имя.

Наиболее важным свойством формы является то, что в ее заголовке - в открывающем тэге <form…> можно указать адрес какого-либо файла, и тогда при его загрузке в программный код этого файла, если он будет там присутствовать, передадутся значения всех переменных, установленных в этой форме - в частности, значения всех элементов формы, как если бы эти значения были установлены в программе, расположенной в самом загружаемом файле. Так можно передавать значения переменных между разными страницами, используя их в программном коде.

Во всех версиях PHPимена передаваемых переменных соответствуют тем именам, которые были даны элементам формы в их тэгах, а значения - соответственно значениям этих элементов: для поля ввода текста - введенному тексту, для переключателя илиcheckbox'а -Trueпри отмеченном иFalseпри неотмеченном, для рисунка - координаты указателя мыши относительно верхнего левого угла изображения, для выпадающего меню (элемент <select name="имя"><option value="text1">text</option>…</select>) - значение параметраvalueвыбранного пунктаoption.

Кроме того, переменные, передаваемые через форму, помещаются в ассоциативные массивы $HTTP_POST_VARS и $HTTP_GET_VARS с именами элементов, соответствующими именам переменных (то есть содержимое поля ввода текста<input type=text name=qwerty size=30>окажется в элементе$HTTP_POST_VARS['qwerty']). $HTTP_POST_VARS содержит переменные, переданные с помощью методаPOST(метод указывается в заголовке формы), а $HTTP_GET_VARS - методаGET. Различие между методами состоит в том, что при передаче данных методомGETэти данные отображаются в адресной строке браузера, а при использовании методаPOST- нет.

Начиная с PHPверсии 4.1, передаваемые через форму переменные помещаются еще и в массивы $_POSTи $_GET. Отличие этих массивов от предыдущих в том, что их переменные доступны еще и во всех функциях, расположенных в программеPHP, - то есть являются автоглобальными.

Пример. PHP: Счетчик посещений.

Начало сценария:

<?php

Укажем имя папки, где будет храниться файл счетчика, и его имя, записав их в соответствующие переменные:

$dirct="foldcount";

$cnt="counter.php";

Если файл счетчика существует (то есть визит на страницу и срабатывание данного сценария - не первые)...

if (file_exists("$dirct/$cnt")==True)

{

...считаем число из файла и запишем его в переменную $sr. Ее мы потом выведем на страницу в качестве показателя числа посещений, а также, увеличив на 1, получим число посещений, включая данное.

$hdl = fopen("$dirct/$cnt", "r+");

$sr = fread($hdl, filesize("$dirct/$cnt"));

fclose($hdl);

$sr++;

}

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

В зависимости от второго параметра функции fopenфайл может быть открыт по-разному - для чтения, для записи, с очисткой содержимого или нет. Возможные параметрыfopenтакие:

r- открыть файл только для чтения и приготовиться читать его с начала.

r+ - открыть файл для чтения и для записи и приготовиться работать с ним с его начала.

w - открыть файл только для записи, предварительно удалив из него все содержимое, причем если файл с указанным именем не существует, то создается новый файл с таким именем.

w+ - открыть файл как для записи, так и для возможного последующего чтения, предварительно удалив из него все содержимое, причем если файл с указанным именем не существует, то создается новый файл с таким именем.

a- открыть файл только для записи и приготовиться дописывать данные в его конец. Если файл с указанным именем не существует, то создается новый файл с таким именем.

a+ - открыть файл для записи и для чтения и приготовиться дописывать данные в его конец. Если файл с указанным именем не существует, то создается новый файл с таким именем.

Открываемый файл может располагаться и на удаленном сервере - тогда он будет доступен только для чтения независимо от параметров открытия. Путь к файлу в таком следует указывать полностью - начиная с http:// илиftp://.

Если же файла со счетчиком нет, то есть посещений раньше не было...

else

{

...то просто присвоим переменной со сведениями о количестве посещений значение 1.

$sr=1;

}

Выведем на страницу данные о числе посетителей...

echo ("Посетителей - $sr");

...и, снова открыв файл счетчика, но теперь уже для записи и очистив все его содержимое (видите параметр "w+"?), запишем в него значение переменной со сведениями о количестве посещений:

$hdl2 = fopen("$dirct/$cnt", "w+");

fwrite($hdl2, $sr);

fclose($hdl2);

Вот и все.

?>

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

$cnt="counter.php";

следует вставить строку, определяющую имя текущего файла на основе значения переменной $PHP_SELF:

$cnt=substr(basename($PHP_SELF), 0, -4). "_cnt.php";

Этот код выделяет из адреса страницы ее имя (без расширения) и создает на его основе уникальное имя файла счетчика (просто добавляя в конец имени страницы комбинацию символов "_cnt.php").

Рис. 12.1. Счетчик посещений - всего с десяток строчек.

Пример. PHP: Партнерская программа. В некоторых Интернет-магазинах имеется раздел "Партнерская программа" - это предложениеweb-мастерам различных сайтов размещать на их страницах ссылки на магазин, и в том случае, если совершивший покупку посетитель пришел именно по такой ссылке, то тот, кто разместил ссылку, получает определенный процент от денег, выплаченных посетителем за товар.

Если вы на своем сайте также осуществляете прием заказов от посетителей, то организовать партнерскую программу можно буквально четырьмя строками кода на PHP. Через гиперссылку, ведущую на какую-нибудьweb-страницу, можно передать программе на этойweb-странице значения переменных. Для этого следует после адресаweb-страницы, на которую ссылка ведет, поместить знак вопроса, имя переменной и ее значение после знака равенства -www.domen.ru?perem=znach(можно передать и несколько переменных, записывая их одну за другой и разделяя амперсандом - &:www.domen.ru?perem1=znach1&perem2=znach2). В результате в сценарии на странице окажется доступной переменная с соответствующими именем и значением.

Для того, чтобы иметь возможность выделять среди всего потока приходящих на сайт тех, кто пришел от партнеров, достаточно указывать в партнерской ссылке значение определенной переменной - для разных партнеров, естественно, разное. Например, что-то вроде www.domen.ru?partner=ivanov.

Если в сценарии на той странице, куда ведет такая ссылка, имеется команда отправки письма, то можно значение этой переменной включить в отправляемое письмо. Однако довольно трудно представить себе такую ситуацию - обычно команда mailобрабатывает данные, переданные на содержащую ее страницу из формы, расположенной на другой странице того же сайта. Поэтому возникает вопрос: как "отловить" переданную переменную-партнерский идентификатор на той странице, куда посетители от этого самого партнера приходят, и потом включить ее в письмо-заказ на странице с командой отправки почты, - при условии, что до отправки заказа посетитель, возможно, обойдет еще множество других страниц сайта?

Самым простым способом решения проблемы будет использование cookies. На тех страницах сайта, на которые будут вести размещаемые партнерами ссылки, следует разместить код:

<?php

if ($partner!="")

{ SetCookie("prtn",$partner, ""); }

?>

В результате, если в ссылке окажется переменная partner, в браузер посетителя будет отправленcookieпод названиемprtnс ее значением. Помните, чтоустановка cookie должна предшествовать любому выводу в выдаваемый документ - поэтому данный код должен стоять в самом начале документа, до каких-либо тэгов HTML.

Ну, а на той странице, где составляется и отправляется письмо с заказом, достаточно включить переменную, сохраненную в cookie, в его текст. Например, команда отправки почты будет выглядеть так:

mail ("mail@harchikov.ru", "Заказ на кассеты", "С адреса $email пришла заявка на приобретение $kolv кассет на общую сумму $summa рублей: $zak. Контактные данные заказчика: $cont, партнерский идентификатор - $HTTP_COOKIE_VARS['prtn']", "From: $email\nReply-To: $email\nContent-Type: text/plain; charset=windows-1251");

Вот и все. Если посетитель зашел на ваш сайт от партнера, то вы об этом узнаете из письма с заказом и сможете отправить партнеру причитающийся ему процент.

Пример. Интернет-магазин. С помощью PHP нетрудно сделать мини-Интернет-магазин - т.е. установить на сайт форму заказа, которая будет отправляться вам по электронной почте. При этом почтовая программа посетителя использоваться не будет - ему даже необязательно вообще ее иметь.

Магазин аудиокассет - http://www.harchikov.ru/cass.php (рис.5). Посетитель может просмотреть описания кассет и отметить заинтересовавшие его предложения, поставив галочку в checkbox'ах. В низу страницы расположен раздел оформления заказа - сверившись с суммой (рассчитываемой небольшим сценарием на javascript и выводимой средствами DHTML в соответствующей строке формы), посетитель должен ввести свои контактные данные и отправить заказ, нажав соответствующую кнопку.

Рис.5. Интернет-магазин - выбирай и заказывай. А строили его всего 5 минут.

Страница "магазина" содержит форму с заголовком <FORM METHOD="post" ACTION= "http:// www.harchikov.ru/zakaz.php" NAME= "mainform">- то есть PHP-программа, обрабатывающая форму, находится в файле zakaz.php на сайтеwww.harchikov.ru(и именно на эту страницу произойдет переход после нажатия кнопки отправления заказа на исходной странице - "Отправить заказ"), а в адресной строке переменные отображаться не будут. Поскольку программы на PHP, чтобы быть исполненными, должны содержаться в какой-либо web-странице, то команда отправки почты содержится в файле zakaz.php.

Вариант PHP-сценария, формирующего письмо с заказом и отправляющего его администратору сайта:

<?php

$zak=" \n";

if ($RNS == True){$zak="$zak Русские не сдаются! \n"; }

if ($ZAR == True){$zak="$zak За Родину \n"; }

if ($PRP == True){$zak="$zak Песни пролетариата \n"; }

...

mail ("mail@harchikov.ru", "Заказ на кассеты", "С адреса $email с контактными данными $cont пришла заявка на приобретение кассет: $zak. Отправитель пользовался браузером $HTTP_USER_AGENT, работал с IP-адреса $REMOTE_ADDR", "From: $email\nReply-To: $email\nContent-Type: text/plain; charset=windows-1251");

?>

Команда, собственно отправляющая письмо, стоит последней - это mail(описана выше). Так как весьма желательно, чтобы получатель письма мог сразу начать выполнять заказ, не тратя время на расшифровку письма, то с помощью небольшого фрагмента кода на основе данных о значениях переданных переменных создается строка с построчным перечнем полных названий заказываемых товаров (чтобы не было проблем с восприятием интерпретатором кириллических символов в качестве имен переменных, имя каждого checkbox'а содержит только латинские буквы, например,PVS -<INPUT NAME=PVS TYPE=checkbox>) - и уже эта строка помещается в письмо. В результате тот, кто обрабатывает заказы, получит аккуратный список заказанных товаров и сведения о заказчике.

Имейте в виду, что для полноценного тестирования функции mailна локальном ПК на нем должна быть установлена программа - почтовый сервер с соответствующими указаниями в настройкахweb-сервера, - иначе интерпретаторPHPбудет выдавать сообщения об ошибке. Поэтому тестировать описанный здесь сценарий лучше сразу на сервере в Интернете.

Вот так, можно сделать элементарную форму заказа через Интернет с отправкой данных этих заказов вам по почте. При использовании данного способа посетителю даже не нужно быть постоянно подключенным к Интернету во время оформления заказа - он спокойно может загрузить страницу с перечнем товаров, отключиться от Сети, выбрать нужные предложения и заполнить поля формы заказа, а затем, подключившись снова, этот заказ отправить. Да и саму страницу со списком ему необязательно получать именно из Сети - вы можете отправить ее кому-либо по почте или поместить на компакт-диски, раздаваемые друзьям или коллегам (не забудьте только в заголовке формы указать полный адрес страницы с программой-обработчиком, как это сделано в приведенном примере).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]