![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Главная | Учебник | Статьи | FAQ | Книги | Ссылки |
Глава 12. PHP: полезные мелочи
В этой главе будет приведено несколько приемов на 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 включить на любую страницу сайта, и он бы записывал сведения о посещениях каждой страницы, на которую он включен, в свой отдельный файл, не смешивая их с аналогичными сведениями для других страниц. Довольно ясно, что для реализации этого достаточно как-то связать имя счетчика с именем страницы. Можно воспользоваться тем же приемом, что рассматривался в Главе 9 для такого же включения на любую страницу сценария гостевой книги - вместо однозначно определяющей имя файла строчки
$cnt="counter.php";
следует вставить строку, определяющую имя текущего файла на основе значения переменной $PHP_SELF:
$cnt=substr(basename($PHP_SELF), 0, -4). "_cnt.php";
Этот код выделяет из адреса страницы ее имя (без расширения) и создает на его основе уникальное имя файла счетчика (просто добавляя в конец имени страницы комбинацию символов "_cnt.php").
Если вы когда-нибудь посещали Интернет-магазины, то наверняка видели в некоторых из них раздел "Партнерская программа". Суть такой программы проста - это предложение web-мастерам различных сайтов размещать на их страницах ссылки на магазин, и в том случае, если совершивший покупку посетитель пришел именно по такой ссылке, то тот, кто разместил ссылку, получает определенный процент от денег, выплаченных посетителем за товар.
Если вы на своем сайте также осуществляете прием заказов на что-либо от посетителей (например, у вас есть простой Интернет-магазин вроде описанного в 5 главе), то организовать партнерскую программу вы сможете буквально четырьмя строками кода на PHP.
Через гиперссылку, ведущую на какую-нибудь web-страницу, можно передать программе на этой web-странице значения переменных. Для этого следует после адреса web-страницы, на которую ссылка ведет, поместить знак вопроса, имя переменной и ее значение после знака равенства - www.domen.ru?perem=znach (можно передать и несколько переменных, записывая их одну за другой и разделяя амперсандом - &: www.domen.ru?perem1=znach1&perem2=znach2). В результате в сценарии на странице окажется доступной переменная с соответствующими именем и значением.
Довольно ясно, что для того, чтобы иметь возможность выделять среди всего потока приходящих на сайт тех, кто пришел от партнеров, достаточно указывать в партнерской ссылке значение определенной переменной - для разных партнеров, естественно, разное. Например, что-то вроде www.domen.ru?partner=ivanov.
Если в сценарии на той странице, куда ведет такая ссылка, имеется команда отправки письма, то можно значение этой переменной включить в отправляемое письмо. Однако довольно трудно представить себе такую ситуацию - обычно команда mail обрабатывает данные, переданные на содержащую ее страницу из формы, расположенной на другой странице того же сайта. Поэтому возникает вопрос: как "отловить" переданную переменную-партнерский идентификатор на той странице, куда посетители от этого самого партнера приходят, и потом включить ее в письмо-заказ на странице с командой отправки почты, - при условии, что до отправки заказа посетитель, возможно, обойдет еще множество других страниц сайта?
Самым простым, но достаточно действенным способом решения такой проблемы будет использование cookies (подробнее о cookies рассказано в главе 8). На тех страницах сайта, на которые будут вести размещаемые партнерами ссылки, следует разместить код:
<?php if ($partner!="") { SetCookie("prtn",$partner, ""); } ?>
В результате в том случае, если в ссылке окажется переменная partner, в браузер посетителя будет отправлен cookie под названием prtn с ее значением. Помните, что установка cookie должна предшествовать любому выводу в выдаваемый документ - поэтому данный код должен стоять в самом начале документа, до каких-либо тэгов HTML.
Ну, а на той странице, где составляется и отправляется письмо с заказом, достаточно включить переменную, сохраненную в cookie, в его текст. Например, команда отправки почты из рассмотренного в 5 главе примера будет выглядеть так:
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");
Вот и все. Если посетитель зашел на ваш сайт от партнера, то вы об этом узнаете из письма с заказом и сможете отправить партнеру причитающийся ему процент.
При желании вы можете вместе с отправкой письма подсчитывать количество заказов, сделанных через партнера, с помощью скрипта наподобие рассмотренного чуть выше счетчика посещений - вызывая его в момент отправки письма с партнерским идентификатором. Выводить же данные этого счетчика можно на особую страницу, доступ на которую партнер будет иметь лишь после авторизации - как ее сделать, см.главу 8. В зависимости от различных значений логина партнера на эту страницу будут выводиться данные различных счетчиков - соответственно логину.