Пример счетчика посещений на РНР.
Если Вы все внимательно прочитали, Вы без труда получите стартовый капитал знаний, и он даст Вам возможность самостоятельно в дальнейшем изучать язык РНР. И в конце я предлагаю Вам познакомиться с кодом скрипта, который позволит организовать на любой из страниц Вашего сайта счетчик посещений. Этот счетчик не будет полнофункциональным, так как имеет достаточно много недостатков, но как пример применения РНР вполне годится. В любом месте Вашей странички (но только там, где это нужно) вставьте следующий код:
<p>Посетителей странички -
<?php
$filename = "counter.dat";
$fp = @fopen($filename,"r");
if ($fp) { $counter=fgets($fp,10); fclose($fp); } else { $counter=0; }
$counter++;
echo $counter;
$fp = @fopen($filename,"w");
if ($fp) { $counter=fputs($fp,$counter); fclose($fp); }
?></p>
В том же каталоге, что и Ваша страничка, создайте файл counter.dat, закачайте его на сервер, и с помощью своего FTP-менеджера измените атрибуты этого файла таким образом, чтобы он был доступен для записи. Обычно нужно установить галочки на всех атрибутах файла. Если Вы этого не сделаете, скрипт будет постоянно выдавать ошибку при попытке записи в файл. Кстати, для того, чтобы этого не происходило, стоит поставить перед командой записи и открытия файла символ @, он отменит вывод сообщения о возникшей ошибке на экран посетителя. Когда атрибуты изменены, обновите Вашу страницу на сервере, и обратитесь к ней по ее адресу в браузере. Вы увидите что там, где Вы вставили код РНР, появляется строка: "Посетителей странички – " и далее число, соответствующее количеству посещений. И никакого следа кода! Он был обработан на сервере в Интернете, а браузеру просто передан результат этого исполнения.
Алгоритм этого скрипта очень прост. В первой строке мы присваиваем выбранной переменной имя файла, где будет храниться число посещений. Во второй – открываем соединение с этим файлом для чтения. Дальше проверяем успешность соединения, и если файл существует и он доступен для чтения, считываем из него строку из 10 байт, чего более чем достаточно для счетчика, и закрываем соединение с файлом. Увеличиваем показание счетчика на единицу и выводим его новое значение на экран. На следующем этапе нам нужно записать новое значение счетчика, и для этого мы снова открываем соединение (дескриптор) с файлом, но уже на запись с очисткой содержимого файла. Если оно успешно – записываем туда новое значение счетчика и закрываем дескриптор файла. Вот и все.
На этом наше первое знакомство с языком РНР будем считать законченным. Конечно, за кадром осталось еще очень много полезного и интересного но, к сожалению все сразу охватить невозможно. Впрочем, для того и придумали умные люди Сеть, чтобы сделать доступным недоступное. В Интернете есть очень много полезных ресурсов на тему РНР, и при минимальных навыках работы в поисковиках Вы без труда отыщите их. А я посоветую Вам подписаться на рассылку РНР для всех!, в которой регулярно раз в неделю появляются новые статьи, примеры скриптов, есть раздел вопросов-ответов а также много другой полезной информации. Найти форму для подписки и подписаться можно по адресу в сети http://virtual.bresttelecom.by/php. Там же выложены все предыдущие выпуски рассылки. А по адресу http://virtual.bresttelecom.by Вы сможете посмотреть, как все это работает в действии. Все что Вы встретите на этом сайте – сделано на РНР. Чат, форум, частные объявления, система статистики – это только малая часть тех возможностей, что дает нам программирование на языке РНР.
От автора: В данном документе (разделе) собрана полезная информация по функциям php. Этот документ создавался несколькими авторами, поэтому прошу простить нам возможные опечатки и не строгую структуру раздела. Рекомендую ознакомиться с функцией mail, функциями запуска программ, функциями работы со строками и другими.
Основная функция, которая нам, скорее всего, понадобится при работе с файлами - это возможность открытия файлов. Файлы открываются с помощью функции fopen(). Данную функцию можно использовать для открытия любого файла в файловой системе сервера, либо для открытия файла через HTTP или FTP в Интернете:
int fopen(string filename, string mode);
Как можно предположить, аргумент filename является именем открываемого файла; аргумент mode указывает на режим, в котором должен быть открыт файл: для чтения, для записи или дополнения. Он может иметь одно из следующих значений:
a - Открытие файла только для дополнения. Данные будут дописаны в конец существующего файла; если файл не существует, PHP пытается создать его;
a+ - Открытие файла для дополнения и чтения. Данные будут дописаны в конец файла; если файл не существует, PHP пытается его создать;
r - Открытие файла только для чтения;
r+ - Открытие файла для чтения и записи. Данные будут записаны в начало существующего файла;
w - Открытие файла только для записи. Существующее содержание файла будет урачено. Если файл не существует, PHP пытается его создать;
w+ - Открытие файла для чтения и записи. Существующее содержание файла будет урачено. Если файл не существует, PHP пытается его создать.
К этим флагам можно добавить флаг b, указывающий на то, что файл надо обрабатывать, как двоичный, а не как текстовый. Если между двоичными и текстовыми файлами не делается различия, этот флаг просто игорируется.
При успешном выполнении функция fopen() возвращает дескриптор файла (file handle) - целое число, позволяющее ссылаться на файл при последующих вызовах функции; при неудаче функция fopen() возвращает false.
Закончив работу с файлом,необходимо его закрыть. Это делается с помощью функции fclose().
int fclose(int fp);
В качестве единственного параметра она принимает дескриптор закрываемого файла и в случае успеха возвращает true, а в случае неудачи - false.
Простейшая возможность провести какую-либо операцию с файлом - просто послать содержимое файла в выходной поток. Для этого используется функция fpassthru():
int fpassthru(int fp);
Она принимает единственный параметр - дескриптор файла, возвращенный вызовом fopen(). Функция fpassthru() выполняет чтение с текущей позиции в открытом файле и до его конца. Достигнув конец файла эта функция вызывает его закрытие. Функция fpassthru() возвращает true в случае успеха и false - в случае неудачи.
Иногда нам нужно прочесть только часть данных из файла. В PHP есть несколько функций, позволяющих это сделать. Выбор такой функции зависит от данных, которые мы хотим прочесть. Чтобы прочесть строку из открытого файла, можно воспользоваться функцией fread():
string fread(int fp,int length);
Эта функция читает строку длиной до length символов из файла с дескриптором fp:
if(!$file=fopen("text.txt","r")){
echo("Невозможно открыть файл");
} else {
$text=fread($file,10);
fclose($file);
}
Если конец файла достигнут раньше заданной длины length, возвращается текст вплоть до этого места.
Функция fgetc() используется для чтения из файла одного символа:
string fgetc(intfp);
Единственный параметр, который принимает эта функция,- это дескриптор открытого файла. Возвращаемое значение является строкой из одного символа, прочтенной из файла, или(если достигнут конец файла) false(пустая строка). Хотя этот метод можно использовать для поочередного прочтения всех симводов из файла, очевидно, что для чтения всего файла он неэффективен. Функция fgets() позволяет прочесть строку заданной длины:
string fgets(int fp,int length);
Помимо десткриптора файла fp функция fgets() принимает в качестве аргумента количество символов (плюс один), которые надо прочесть из файла. Обратите внимание, что параметр length на единицу больше фактического количества прочтенных символов, а также на то, что чтение завершится, если будет достигнут символ перевода строки или конец файла, поэтому реальное количество возвращенных символов нельзя предсказать. Функция возвращает строку или false, если произошла ошибка. Функция fgetss() идентичнаfgets(), но все теги HTML и PHP удаляются из строки. Заметьте, что все теги все же учитываются в длине строки, поэтому, если вы вызовете функцию
$text=(fgetss($file,11));
где $file начинается со строки
<P>These tags will be stripped off<P>
значением $text будет "These t", а не "<P>These t".
Наконец, для чтения содержимого файла можно использовать функцию file(), которая возвращает содержимое файла в виде массива. Каждая строка файла будет представлена одним элементом массива(первая строка будет нулевым элементом):
array file(string filename);
Обратите внимание, что функция принимает в качестве аргумента строку с именем файла, а не целочисленный дескриптор файла.
Запись в файлы осуществляется аналогичным образом. Для записи строки в файл используются функции fputs() или fwrite(). Их вызов совершенно идентичен:
int fputs(int fp, string string,int(length));
int fwrite(int fp, string string,int(length));
Параметрами служат: дескриптор файла, в который осуществляется запись, строка, записываемая в файл, и(необязательно) количество символов строки, которое нужно записать. В случае успеха функции возвращают true, в случае неудачи - false.
Нам требуется способ перемещения текущей позиции в файле, чтобы иметь возможность чтения или записи по заданному положению в файле. В PHP это достигается благодаря ряду функций.
Простейшей функцией является rewind(). Она устанавливает текущую позицию в начало файла:
int rewind(int fp);
Единственным параметром здесь является дескриптор соответствующего файла. Возвращаемым значением является true в случае успеха и false - в случае неудачи.
Для перемещения на заданную позицию в файле используется функция fseek():
int fseek(int fp, int offset);
Аргумент fp является дескриптором файла;offset является чилом байт или символов от начала файла.
Обратите внимание, что fseek() возвращает 1 при ошибке, а в случае успеха -0.
В PHP4 fseek() принимает необязательный третий аргумент, который может иметь следующие значения:SEEK_SET(offset отсчитывается от начала файла), SEEK_CUR(offset отсчитывается от текущей позиции в файле) и SEEK_END(offset прибавляется к концу файла).
Нам может также понадобиться узнать текущую позицию в файле. Это можно сделать с помощью функции ftell():
int ftell(int fp);
Она просто возвращает позицию в файле с дескриптором fp.
Другой полезной функцией является функция feof(), которая указывает, находится текущая позиция в конце файла или нет:
int feof(int fp);
Она возвращает true, если текущая позиция в файле с дескриптором fp находится в конце файла, или происходит ошибка. В противном случае возвращается false. Эта функция обычно используется при циклическом проходе по файлу.
Помимо чтения и записи в файлы в PHP можно производить над ними более фундаментальные операции: копировать их из одного каталога в другой, полностью удалять их или давать им новые имена.
Для копирования файла используется функция copy():
int copy(string source,string destination);
Она копирует файл с именем, указанным в аргументе source, в место, указанное в аргументе deatination. Как и можно ожидать, true возвращается в случае успеха, false - в случае неудачи. Чтобы сохранить резрвную копию файла в каталог /temp/, параллельный текущему каталогу, эту функцию можно использовать таким образом:
$filename="text.txt";
copy($filename,"../temp/".$filename);
Если требуется удалить файл навсегда, можно воспользоваться функцией unlink()
int unlink(string filename);
Она удаляет указанный файл и возвращает true в случае успеха и false- в случае ошибки.
Для переименования файла используется функция rename()
int rename(string oldname, string newname);
Она изменяет имя файла oldname на заданное в аргументе newname. Функция возвращает true в случае успеха и false - в случае ошибки.
Перед тем, как удалять или переименовывать файлы, неплохо было бы убедиться в том, что мы точно представляем, с каким файлом имеем дело. PHP предоставляет ряд функций, которые возвращают информацию о данном файле.
Во-первых, хотелось бы убедиться, что данный файл существует. Для этого можно использовать функцию file_exists()
int file_exists(string filename);
Параметром этой функции является имя проверяемого файла. Функция возвращает true, если файл существует, и false- в противном случае.
Также может потребоваться проверить размер или тип файла. Для этого в PHP есть функции filesize и filetype:
int filesize(string filename);
Эта функция возвращает размер указанного файла в байтах или false в случае ошибки.
Функция filetype() возвращает строку, указывающую тип данного файла:
string filetype(string filename);
Возвращаемое значение может быть false в случае ошибки или одним из следующих строковых значений:
"fifo"-объект является FIFO(именованным каналом);
"char"- объект является символьным устройством;
"dir"- объект является каталогом;
"block"- объект является блочным устройством;
"link"- объект является символической ссылкой;
"file"- объект является обычным файлом;
"unknown"- тип файла невозможно определить.
Кроме функции filetype() есть еще несколько функций, которые можно использовать для определения принадлежности файла к определенному типу. Этими функциями являются:
Boolean is_dir(string filename);
Boolean is_executable(string filename);
Boolean is_file(string filename);
Boolean is_link(string filename);
Эти функции возвращают true, если указанный файл является каталогом, исполняемым файлом, обычным файлом и символической ссылкой, соответственно.
Существуют также две функции, указывающие, возможны ли чтение и запись в файл:
Boolean is_readable(string filename);
Boolean is_writeable(string filename);
Простейшей из функций для работы с целыми каталогами является функция chdir(), устанавливающая текущий каталог:
int chdir(string directory);
Она делает указанный каталог текущим.
В PHP есть четыре функции, которые можно использовать для просмотра данного каталога. Во-первых, требуемый каталог нужно открыть:
int opendir(string path);
Функция opendir() открывает каталог, путь к которому указан в ее единственном аргументе, и возвращает "дескриптор каталога", представляющий собой целое число, которое можно использовать для ссылки на открытый каталог при последующих вызовах функций.
Открыв каталог, можно читать находящиеся в нем "записи":
string readdir(int dir_handle);
Эта функция возвращает имя очередной записи в каталоге. Единственным параметром является дескриптор каталога, полученный от функции opendir(). Если записей больше нет или дескриптор каталога недействителен, функция возвращает false. Поэтому эту функцию можно использовать в операторе while() для просмотра всех записей в каталоге. Когда будет достигнут конец, будет возвращено false.
Однако, при этом осуществляется перемещение по каталогу только в одном направлении. Для перемещения по каталогу от конца к началу используется функция rewinddir():
void rewinddir(int dir_handle);
Параметром функции является дескриптор каталога, полученный из вызова opendir(). Эта функция устанавливает текущую запись на первую запись в каталоге, поэтому можно начать сначала.
Завершив работу с каталогом, его можно закрыть и освободить ресурсы:
void closedir(int dir_handle);
Снова единственный параметром является дескриптор каталога.
Также можно изменять саму структуру каталогов, создавая и удаляя каталоги. Для создания каталога используется функция mkdir():
int mkdir(string pathname, int mode);
Первый параметр является именем пути для создаваемого каталога, второй указывает права доступа к каталогу в UNIX(в Windows этот параметр игнорируется), обычно задаваемые в виде восьмеричного числа (начинающегося с нуля). Возвращаемым значением является true, если вызов функции был успешен,и false- в противном случае.
При наличии необходимых прав можно удалить каталог из сценария PHP. Для этого в PHP есть функция rmdir():
int rmdir(string dirname);
Обратите внимание, что эта функция удаляет только пустые каталоги.
Дата добавления: 2015-09-14; просмотров: 752;