Привет, Гость!
![]() |
![]() |
![]() |
Учебник PHP #7
значение первого (и единственного) элемента массива $visits.
Увеличить значение $current_visitors на 1.
Открыть файл $access для записи и установить указатель текущей позиции в начало файла.
Записать значение $current_visitors в файл $access.
Закрыть манипулятор, ссылающийся на файл $access.
Листинг 7.9. Простой счетчик обращений
<?
// Сценарий: простой счетчик обращений
// Назначение: сохранение количества обращений в файле
$access = "hits.txt"; // Имя файла выбирается произвольно
$visits = @file($access); // Прочитать содержимое файла в масссив
$current_visitors = $visits[0]; // Извлечь первый (и единственный) элемент
++$current_visitors; // Увеличить счетчик обращений
$fh = fopen($access. "w"); // Открыть файл hits.txt и установить
// указатель текущей позиции в начало файла
@fwrite($fh, $current_visitors);// Записать новое значение счетчика
// в файл "hits.txt"
fclose($fh); // Закрыть манипулятор файла "hits.txt"
?>
Проект 2: построение карты сайта
Сценарий, приведенный в листинге 7.10, строит карту сайта — иерархическое изображение всех папок и файлов на сервере, начиная с заданного каталога. При вычислении отступов элементов, из которых состоит карта сайта, используются функции, определенные в этой и предыдущих главах. Прежде чем переходить к программе, просмотрите алгоритм, написанный на псевдокоде:
Объявить служебные переменные для хранения родительского каталога, имени графического файла с изображением папки, названия страницы и флага серверной ОС (Windows или другая система).
Объявить функцию display_directory( ), которая читает содержимое каталога и форматирует его для вывода в браузере.
Построить путь к каталогу объединением имени, передаваемого в переменной $dir1, с $dir.
Открыть каталог и прочитать его содержимое. Отформатировать имена каталога и файлов и вывести их в браузере.
Если текущий файл является каталогом, рекурсивно вызвать функцию display_di rectory( ) и передать ей имя нового каталога для вывода. Вычислить отступ, используемый при форматировании вывода.
Если файл не является каталогом, он форматируется для отображения в виде гиперссылки (а также вычисляется отступ, используемый при форматировании).
Листинг 7.10. Программа sitemap.php
// Файл: sitemap.php
// Назначение: построение карты сайта
// Каталог, с которого начинается построение карты
$beg_path = "C:\Program FilesVApache Group\Apache\htdocs\phprecipes";
// Файл с графическим изображением папки.
// Путь должен задаваться Относительно* корневого каталога сервера Apache
$folder_location = "C:\My Documents\PHP for Programmers\FINAL CHPS\graphics\folder.gif";
// Текст в заголовке окна $page_name = "PHPRecipes SiteMap";
// В какой системе будет использоваться сценарий - Linux или Windows?
// (0 - Windows; 1 - Linux)
$usingjinux = 0;
// Функция: display_directory
// Назначение: чтение содержимого каталога, определяемого параметром
// $dir1, с последующим форматированием иерархии каталогов и файлов.
// Функция может вызываться рекурсивно.
function display_directory ($dir1, $folder_location, $using_linux, $init_depth) {
// Обновить путь
$dir.= $dir1;
Sdh = opendir($dir);
while($file = readdir($dh)) :
// Элементы каталогов "." и ".." не выводятся.
if ( ($file != ".") && ($file != "..") ) :
if ($using_linux == 0 ) :
$depth = explode("\\", $dir): else :
$depth = explode("/", $dir); endif ; $curtent_depth = sizeof( $depth);
// Построить путь по правилам используемой операционной системы. if ($using_linux == 0) :
$tab_depth = $current_deptn - $init_depth;
$file = $dir. "\\", $file; else :
$file = $dir. "/",$file; endif;
// Переменная $file содержит каталог? if ( is dir($file) ) :
$х = 0;
// Вычислить отступ
while ( $х < ($tab_depth * 2) ) :
print " ";
$х++; endwhile;
print "<img src=\"$folder_location\" alt=\"[dir]\">
".basename($file)."<br>";
// Увеличить счетчик
// Рекурсивный вызов функции display_directory()
display_directory($file, $folder_location, $using_linux, $init_depth);
// He каталог
else :
// Построить путь по правилам используемой
// операционной системы.
if ($using_linux == 0) :
$tab_depth = ($current_depth - $init_depth) - 2; $x = 0;
// Вычислить отступ
while ( $x < (($tab_depth * 2) + 5) ) :
print " ";
$x++;
endwhile:
print "<a href =\ "" .$dir."\\".basename($file)."\">".basename($file)."</a> <br>";
else :
print "<a href = \"".$dir."/".basename($file)."\">".basename($file)."</a> <br>";
endif:
endif; // Is_dir(file) endif: // If ! "." or ".."
endwhile;
// Закрыть каталог closedir($dh);
<html >
<head>
<title> <? print "$page_name"; ?> </title>
</head>
<body bgcolor="#ffffff" text="#000000" link="#000000" vlink="#000000" alink="#000000">
<?
// Вычислить начальный отступ
if ($using_linux == 0) :
$depth = explode("\\", $beg_path);
else :
$depth = explode("/", $beg_path);
endif:
$init_depth = sizeof($depth);
display_directory ($beg_path, $folder_location, $using_linux, $init_depth);
?>
</body>
</html>
На рис. 7.1 изображен результат выполнения сценария для каталога с несколькими главами этой книги.
Рис. 7.1. Вывод структуры каталога на сервере с использованием сценария sitemap.php
Итоги
В этой главе были представлены многие средства РНР, предназначенные для работы с файлами. В частности, мы рассмотрели следующие вопросы:
проверку существования файлов;
открытие и закрытие файлов и потоков ввода/вывода;
запись в файл и чтение из него;
перенаправление файла в выходной поток;
запуск внешних программ;
операции с файловой системой.
Материал этой главы подготовил почву для следующей главы, «Строки и регулярные выражения», поскольку при разработке web-приложений обработка строк и операции ввода/вывода очень тесно связаны.
Увеличить значение $current_visitors на 1.
Открыть файл $access для записи и установить указатель текущей позиции в начало файла.
Записать значение $current_visitors в файл $access.
Закрыть манипулятор, ссылающийся на файл $access.
Листинг 7.9. Простой счетчик обращений
<?
// Сценарий: простой счетчик обращений
// Назначение: сохранение количества обращений в файле
$access = "hits.txt"; // Имя файла выбирается произвольно
$visits = @file($access); // Прочитать содержимое файла в масссив
$current_visitors = $visits[0]; // Извлечь первый (и единственный) элемент
++$current_visitors; // Увеличить счетчик обращений
$fh = fopen($access. "w"); // Открыть файл hits.txt и установить
// указатель текущей позиции в начало файла
@fwrite($fh, $current_visitors);// Записать новое значение счетчика
// в файл "hits.txt"
fclose($fh); // Закрыть манипулятор файла "hits.txt"
?>
Проект 2: построение карты сайта
Сценарий, приведенный в листинге 7.10, строит карту сайта — иерархическое изображение всех папок и файлов на сервере, начиная с заданного каталога. При вычислении отступов элементов, из которых состоит карта сайта, используются функции, определенные в этой и предыдущих главах. Прежде чем переходить к программе, просмотрите алгоритм, написанный на псевдокоде:
Объявить служебные переменные для хранения родительского каталога, имени графического файла с изображением папки, названия страницы и флага серверной ОС (Windows или другая система).
Объявить функцию display_directory( ), которая читает содержимое каталога и форматирует его для вывода в браузере.
Построить путь к каталогу объединением имени, передаваемого в переменной $dir1, с $dir.
Открыть каталог и прочитать его содержимое. Отформатировать имена каталога и файлов и вывести их в браузере.
Если текущий файл является каталогом, рекурсивно вызвать функцию display_di rectory( ) и передать ей имя нового каталога для вывода. Вычислить отступ, используемый при форматировании вывода.
Если файл не является каталогом, он форматируется для отображения в виде гиперссылки (а также вычисляется отступ, используемый при форматировании).
Листинг 7.10. Программа sitemap.php
// Файл: sitemap.php
// Назначение: построение карты сайта
// Каталог, с которого начинается построение карты
$beg_path = "C:\Program FilesVApache Group\Apache\htdocs\phprecipes";
// Файл с графическим изображением папки.
// Путь должен задаваться Относительно* корневого каталога сервера Apache
$folder_location = "C:\My Documents\PHP for Programmers\FINAL CHPS\graphics\folder.gif";
// Текст в заголовке окна $page_name = "PHPRecipes SiteMap";
// В какой системе будет использоваться сценарий - Linux или Windows?
// (0 - Windows; 1 - Linux)
$usingjinux = 0;
// Функция: display_directory
// Назначение: чтение содержимого каталога, определяемого параметром
// $dir1, с последующим форматированием иерархии каталогов и файлов.
// Функция может вызываться рекурсивно.
function display_directory ($dir1, $folder_location, $using_linux, $init_depth) {
// Обновить путь
$dir.= $dir1;
Sdh = opendir($dir);
while($file = readdir($dh)) :
// Элементы каталогов "." и ".." не выводятся.
if ( ($file != ".") && ($file != "..") ) :
if ($using_linux == 0 ) :
$depth = explode("\\", $dir): else :
$depth = explode("/", $dir); endif ; $curtent_depth = sizeof( $depth);
// Построить путь по правилам используемой операционной системы. if ($using_linux == 0) :
$tab_depth = $current_deptn - $init_depth;
$file = $dir. "\\", $file; else :
$file = $dir. "/",$file; endif;
// Переменная $file содержит каталог? if ( is dir($file) ) :
$х = 0;
// Вычислить отступ
while ( $х < ($tab_depth * 2) ) :
print " ";
$х++; endwhile;
print "<img src=\"$folder_location\" alt=\"[dir]\">
".basename($file)."<br>";
// Увеличить счетчик
// Рекурсивный вызов функции display_directory()
display_directory($file, $folder_location, $using_linux, $init_depth);
// He каталог
else :
// Построить путь по правилам используемой
// операционной системы.
if ($using_linux == 0) :
$tab_depth = ($current_depth - $init_depth) - 2; $x = 0;
// Вычислить отступ
while ( $x < (($tab_depth * 2) + 5) ) :
print " ";
$x++;
endwhile:
print "<a href =\ "" .$dir."\\".basename($file)."\">".basename($file)."</a> <br>";
else :
print "<a href = \"".$dir."/".basename($file)."\">".basename($file)."</a> <br>";
endif:
endif; // Is_dir(file) endif: // If ! "." or ".."
endwhile;
// Закрыть каталог closedir($dh);
<html >
<head>
<title> <? print "$page_name"; ?> </title>
</head>
<body bgcolor="#ffffff" text="#000000" link="#000000" vlink="#000000" alink="#000000">
<?
// Вычислить начальный отступ
if ($using_linux == 0) :
$depth = explode("\\", $beg_path);
else :
$depth = explode("/", $beg_path);
endif:
$init_depth = sizeof($depth);
display_directory ($beg_path, $folder_location, $using_linux, $init_depth);
?>
</body>
</html>
На рис. 7.1 изображен результат выполнения сценария для каталога с несколькими главами этой книги.
Рис. 7.1. Вывод структуры каталога на сервере с использованием сценария sitemap.php
Итоги
В этой главе были представлены многие средства РНР, предназначенные для работы с файлами. В частности, мы рассмотрели следующие вопросы:
проверку существования файлов;
открытие и закрытие файлов и потоков ввода/вывода;
запись в файл и чтение из него;
перенаправление файла в выходной поток;
запуск внешних программ;
операции с файловой системой.
Материал этой главы подготовил почву для следующей главы, «Строки и регулярные выражения», поскольку при разработке web-приложений обработка строк и операции ввода/вывода очень тесно связаны.
Комментарии (0)
Скачать Java книгу»php/mysql/pdo/js
В библиотеку