Ваш первый Сайт С использованием РНР-скриптов
ПРИМЕНЕНИЕ СЛОЖНОЙ СХЕМЫ БЛОКИРОВКИ ФАЙЛА. ФУНКЦИИ ДЛЯ РАБОТЫ С КАТАЛОГАМИ
Теперь о другой проблеме. В книге посетителей при записи отзывов посетителей в текстовый файл мы применим функцию блокировки этого текстового файла, чтобы избежать одновременного использования программы для записи в файл несколькими посетителями, что привело бы к разрушению информации в файле (о значении блокировки файла см. в гл. 4). Однако применять блокировку в таком простом виде, которую мы применяли при создании счетчика посещений страницы, не годится. Допустим, два разных посетителя заполнили поля формы книги отзывов и одновременно нажали на кнопку типа «Отправить». Данные первого посетителя, который оказался проворнее на микросекунду, отправятся программе для обработки. Эта программа временно заблокирует текстовый файл для записи отзывов. Файл за - блокируется всего на микросекунды, но если в это время придут данные от второго посетителя, то программа не сможет их записать в этот текстовый файл. Данные второго посетителя могут быть утеряны и ему снова придется их вводить, т. е. заполнять форму заново. Здесь нужно будет применить другую схему блокировки, которая будет разъяснена чуть позже в гостевой книге, при разборке листинга 7.3 программы gostev.php.
В этой главе нам еще понадобятся функции для работы с каталогами, т. е. папками. Прежде чем работать с какой-либо папкой, ее нужно сначала открыть. Для этого существует функция opendir(dir), где в качестве аргумента dir содержиться путь к открываемому каталогу. Эта функция возвращает идентификатор, с которым и нужно работать в дальнейшем. Функция readdir($iden) считывает содержимое каталога и возвращает имена всех элементов в каталоге. Здесь $iden - идентификатор открытого каталога. Мы будем использовать функцию readdir для вывода списка файлов и папок, содержащихся в указанном в ее параметре каталоге. При каждом своем вызове она выдает имя случайно выбранного файла (или вложенной папки) указанного каталога, каждый раз - новое, до тех пор, пока не перечислит имена всех файлов и вложенных папок. Среди выданных функцией readdir имен будут и ссылки на текущий и родительский (т. е. включающий в себя текущий) каталог, обозначаемые соответственно одной и двумя точками (так уж работает web-cepeep). Поскольку нас будут интересовать только файлы каталога, то данные ссылки из списка файлов следует исключить, добавив проверку состава имени файла:
While ($fde=readdir($iden))
F Х
If(($file!=".") and ($file !="..")) $c[]=$fde; I
В этих строчках кода цикл while будет выполняться, пока не будут перебраны все элементы каталога, задаваемые идентификатором Siden. Если элементы не являются ссылками на текущий и родительский каталог (условие if Истинно), то они поочередно будут записываться в массив $с['].
Вообще вместо этих двух функций (Opendir и readdir) можно использовать одну seandir(dir, sort), которая возвращает массив имен и каталогов, расположенных в каталоге dir. Обратите внимание, что в качестве первого аргумента используется именно каталог или путь к нему, но не идентификатор! Параметр sort указывает на порядок сортировки массива. Если этот параметр не указан, то сортировка выполняется в алфавитном порядке по возрастанию. Если же параметру sort присвоить значение 1, то сортировка выполнится по убыванию.
В нашей рабочей папке сервера создайте временно подпапку, например Risynki. Скопируйте в эту подпапку несколько любых рисунков или фотографий с вашего компьютера. В РНР-редакторе наберите код:
Листинг 6.2 <?php
$iden=opendir("risynki"); while ($file=readdir($iden))
Строганов А. С. Ваш первый сайт с использованием РНР-скриптов {
If (($file!=".") and ($file!=".."))
{
Echo "<a href=risynki/$file target='_blank'>$file</axbr>"; }
} ?>
Строчки приведенного выше кода должны быть понятны. В окно браузера будут выведены ссылки на ваши рисунки в папке risynki. Причем при переходе на ссылку рисунок откроется в отдельном окне, поскольку в теге <ahref...> мы указали параметр target^blank. Запомните его. Если вы разместите на своем сайте ссылки на другие сайты, то эти другие сайты при использовании параметра target=blank будут открываться в отдельном окне.
Сохраните программу обязательно в рабочей папке htdocs под любым названием и запустите ее. В браузер, как уже было отмечено, выведутся назва - ния-ссылки на рисунки. Нажмите на любую из ссылок - в отдельном окне появится изображение соответствующей картинки (рис. 6.3). У меня, например, в папке risynki размещено 12 картинок.
' : J уу ш UJ о 1 j* ; W ш • * iy щ ; СИ Address: jhttp:^ocalhost/MyBook/obychenie3.php |
^ jr ~ .. .".Z]Q & |
05 spaceOl med. iPfi |
|
0760 ips |
|
08 groundOl med. jpg |
|
14 groundO 1 med ipg |
|
19 sroundOl med. ips |
|
Aatccd006.iP2 |
|
Aatccd013.ipg |
|
A hot gaz cannibal star. iP.2: |
|
Coronal Loop ipg |
|
Earths Moon ipg |
|
Eta Cannae ipg |
|
Hd70642 ррагс-Ыя. фя |
Рис. 6.3 |
Вообще нежелательно, чтобы названия файлов и папок начинались с нуля, так как функция readdir может их проигнорировать! Можете теперь удалить эту программу и папку risynki, чтобы не засорять наш рабочий каталог.