Поиск
Каталоги
Чтение файла и запись в него на сервере только часть процесса хранения дан ных. Наверняка вы захотите использовать и каталоги. Каталог можно предста вить в виде папки это подраздел жесткого диска, где можно хранить файлы и другие каталоги. По. умолчанию все посещаемые вами Webстраницы попадают в ваш так называемый «домашний» каталог, в котором можно создать другие «базы» для хранения изображений, картинок, данных и т.д.
В РНР каталог создается с помощью команды mkdir ("path", "permissions") ; Путь указывает имя и местонахождение каталога, второй параметр опреде ляет права доступа к каталогу (формат тот же, что у команды chmod: 0, затем три восьмеричные цифры, например 0666). , Разработаем сценарий, который при регистрации нового пользователя бу дет создавать для него новый каталог.
Создание нового каталога
- Сначала создадим простую страницу регистрации с именем пользователя и паролем. Откройте текстовый редактор и начните работу над новым HTMLдокументом.
- Создайте форму со сценарием HandleNewUser.php в качестве атрибута ACTION и используя метод POST.
- Создайте одно поле для текста, а другое для пароля.
- Создайте кнопку Submit, затем закройте форму и HTMLдокумент.
- Сохраните страницу как NewUser.html (листинг 10.5) и загрузите ее на сер вер.
- Создайте новый пустой документ в текстовом редакторе.
- Сохраните документ как users.txt и загрузите его на сервер в один ка талог со страницей NewUser.html.
- Задайте такие права доступа, которые бы позволили всем пользователям записывать данные в файл users.txt и читать из него. Третий шаг разработать каталог, в котором автоматически будут созданы все остальные.
- Задайте такие права доступа, которые бы позволили всем пользователям делать записи в каталог users, читать его и производить в нем поиск (под сказка права доступа 0777).
- Откройте текстовый редактор и создайте новый РНРдокумент.
- Начните с открытия PHPраздела и написания новой функции.
- СкопируйтефункциюИг^еТоР11е() из листинга 10,4 и слегка измените ее:
- Определите новое имя каталога.
- Добавьте новые данные в файл.
- Попытайтесь создать каталог и задайте условие
- Закройте PHPраздел и HTMLзаголовок
- Откройте второй PHPраздел и создайте главную условную конструкцию.
- Закройте этот PHPраздел и саму HTMLстраницу.
- Сохраните страницу как HandleNewUser.php (листинг 10.6), загрузите ее на сервер~(туда же, где находятся каталог users, файл users.txt и страница NewUser.html) и протестируйте результаты в браузере (рис. 10.11 и 10.12). Листинг 10.6 т Хотя здесь вы видите только две функции, можно написать и третью, предназначенную исключительно для создания каталога. Для этого нужно выделить условную конструкцию mkdir ( ) из функции WriteToFile().
<HTMLxHEADxTITLE>Registration Form</TITLEx/HEADxBODY>
<FORM ACTION="HandleNewUser.php" METHOD=POST>
Так как в форму вводится пароль, для пересылки потребуется именно метод POST, а не GET, который менее безопасен
Username <INPUT TYPE=TEXT NAME="Array[Username]" SIZE=15xBR>
Password <INPUT TYPE=PASSWORD NAME="Array[Password]"•SIZE=15xBR>
He забудьте указать PASSWORD как тип ввода для пароля, иначе вводимый текст не будет скрыт (рис. 10.10).
<INPUT TYPE=SUBMIT NAME="SUBMIT" VALUE="Submit!">
</FORMx/BODYx/HTML>
Листинг 10.5 т Это самая простая регистрационная форма с двумя полями. В ваших приложениях она, скорее всего, будет более развернутой, хотя этапы обработки данных останутся такими же.
1 <HTML>
2 <HEAD>
3 <T3TLE>Registration Form</TITLE>
4 </HEAD>
5 <BODY>
6 <FORM ACTION»"HandleNewUser.php" METHOD=POST>
7 Osername <INPUT TYPE=TEXT NAME="Array[Username]" SIZE=15xBR>
8 Password <INPOT TYPEPASSWORD NAME»"Array[Password]" SIZE=15xBR>
9 <INPUT TYPE=SUBMIT NAME="SUBMIT"VALUE="Submit!">
10 </FORM>
11 </BODY>
12 </HTML>

А теперь напишем сценарий HandleNewUser.php, который будет обрабаты вать информацию из формы и создавать новый каталог.
<?php
function MakeDirectoryName ($Username) {
/* Функция MakeDirectoryName принимает в качестве аргумента имя
пользователя, на базе которого будет сгенерировано имя директории. */
srand ((double) microtime() * 1000000);
$Name = rand() . $Username;
return $Name;
} // End of MakeDirectoryName Function.
Каталогу будет дано имя с помощью переменной $Username и случайного числа. Имя сгенерируется инициализацией функции srand() текущим време нем, и затем на основе этого будет выбрано случайное число. Присоединение его к переменной $Username обеспечит уникальность каждого имени, которое затем возвращается функцией.
function WriteToFile ($Username, $Password) {
$TheFile'= 'users.txt*;
SYS-PAGE-CONTENTpen = fopen ($TheFile, "a");
if (SYS-PAGE-CONTENTpen) {
$Password = md5 ($Password);
Измените имя текстового файла (теперь это users.txt) и добавьте строку для шифрования пароля перед его сохранением. В целях безопасности всегда луч ше хранить зашифрованный пароль.
$Directory = "users/" . MakeDirectoryNaiae. <$Username) ;
Это имя создается с помощью вызова функции MakeDirectoryName ( ) и со глашения о том, что новый каталог будет подкаталогом каталога users.
fwrite (SYS-PAGE-CONTENTpen, "$Usernarnet$Passwordt$Directoryn") ;
fclose (SYS-PAGE-CONTENTpen);
if (! (mkdir ,($Directory, " 0 7 7 7 " ) ) ) {
^Directory = FALSE;
} else {
$Directory = FALSE;
return $Directory;
} // Конец функции WriteToFile.
Переменной $Directory присваивается значение имени нового каталога, только если файл успешно открыт. Если не удается открыть файл или каталог не может быть создан, значение переменной$Directory будет ложным. Это указание на то, что функция не выполнила свою работу. Результат, выдаваемый функцией, FALSE.
'?><HTMLxHEADxTITLE>Using Directories</TITLEx/HEADxBODY>
if (($Array[Username]) && ($Array[Password])) {
$Check = WriteToFile ($Array[Username], $Array[Password]);
i f . ( $ C h e c k ) {
print ("Your requestwas successfully processed!<BR>n");
} else {
print ("Your request was not processed due to
—a system error!<BR>n");
} else {
print ("Please enter a Username and Password!/n");
Эта часть кода вам уже должна быть знакома. Конструкцией проверяется, заполнены ли оба поля формы. Если да, то данные записываются в файл и со здается новый каталог. На основе возвращаемого функцией значения отправ ляется соответствующее сообщение.
?></BODYx/HTML>
1 <?php
2 function MakeDirectoryName (SUaernane) {
3 /* Функция MakeDirectoryName принимает в качестве аргумента имя
пользователя, на базе которого будет сгенерировано имя директории. */
4 «rand ((double) microtiaeO * 1000000);
5 $Навв « randО . $Ueername;
6 return $Na*a;
7 } // Конец функции MakeDirectoryName.
8
9 function WriteToFile (6»»»», $PaeewoJTd) {
10 /* Функция KriteToPile принимает два аргумента и описание, которые
будут записаны в файл. */
11 $TheFile * "ueere.txt";
12 SYS-PAGE-CONTENTреп = fopen ($TheFile, "а"),'
13 if (SYS-PAGE-CONTENTp«n> {
14 $Pa«eword > md5 ($Paseworct) ;
15 SYS-PAGE-CONTENTirectory > "ueere/" . MakeDirectoryHame ($TJeername);
16 fwrite ($Open, °$Usernamet$Pa8ewordt$Directoryn");
17 fclose (SYS-PAGE-CONTENTpea);
18 if (MBkdir ($M.reetory, 0777"))) {
19 $Directory * FALSE;
20 }
21 } else {
22 $Directory > FALSE;
23 }
24 return $Bir*ctory; '
25 } // Конец функции WriteToFile.
26 ?>
27 <HTML>
28 <HEAD>
29 <TITLE>Using Direetories</TITLEx/HEAD>
30 <BODY>
31 <?php
32 /.* Эта страница получает и обрабатывает данные, принятые
от "NewUser.html". */
33
34if (($Array[Username]).&& ($Array[Password])) {
35$Check = WriteToFile ($Array[Username], $Array[Password]);
36 $Check = WriteToFile ($Array[Username], $Array[Password]);
37 print ("Your request was successfully processed!<BR>n")
38 } else {
39 print ("Your request was not processed due to a system
error ! <BR> n " )
40}
41 else {
42print ("Please enter a Username and Password ! n" );
43 }
44 ?>
45</BODY>
46 </HTML>
