Каталоги

Чтение файла и запись в него на сервере только часть процесса хранения дан
ных. Наверняка вы захотите использовать и каталоги. Каталог можно предста
вить в виде папки это подраздел жесткого диска, где можно хранить файлы и
другие каталоги. По. умолчанию все посещаемые вами Webстраницы попадают
в ваш так называемый «домашний» каталог, в котором можно создать другие
«базы» для хранения изображений, картинок, данных и т.д.

В РНР каталог создается с помощью команды mkdir (“path”, “permissions”) ;
Путь указывает имя и местонахождение каталога, второй параметр опреде
ляет права доступа к каталогу (формат тот же, что у команды chmod: 0, затем
три восьмеричные цифры, например 0666). ,
Разработаем сценарий, который при регистрации нового пользователя бу
дет создавать для него новый каталог.

Создание нового каталога

  1. Сначала создадим простую страницу регистрации с именем пользователя
    и паролем. Откройте текстовый редактор и начните работу над новым
    HTMLдокументом.

  2. <HTMLxHEADxTITLE>Registration Form</TITLEx/HEADxBODY>

  3. Создайте форму со сценарием HandleNewUser.php в качестве атрибута
    ACTION и используя метод POST.

  4. <FORM ACTION="HandleNewUser.php" METHOD=POST>

    Так как в форму вводится пароль, для пересылки потребуется именно метод
    POST, а не GET, который менее безопасен

  5. Создайте одно поле для текста, а другое для пароля.

  6. Username <INPUT TYPE=TEXT NAME="Array[Username]" SIZE=15xBR>
    Password <INPUT TYPE=PASSWORD NAME="Array[Password]"•SIZE=15xBR>

    He забудьте указать PASSWORD как тип ввода для пароля, иначе вводимый
    текст не будет скрыт (рис. 10.10).

  7. Создайте кнопку Submit, затем закройте форму и HTMLдокумент.

  8. <INPUT TYPE=SUBMIT NAME="SUBMIT" VALUE="Submit!">
    </FORMx/BODYx/HTML>

  9. Сохраните страницу как NewUser.html (листинг 10.5) и загрузите ее на сер
    вер.
  10. Листинг 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>

  11. Создайте новый пустой документ
    в текстовом редакторе.
  12. Сохраните документ как users.txt
    и загрузите его на сервер в один ка
    талог со страницей NewUser.html.
  13. Задайте такие права доступа, которые бы позволили всем пользователям записывать данные в файл users.txt и читать из него.
    Третий шаг разработать каталог, в котором автоматически будут созданы все остальные.
  14. Задайте такие права доступа, которые бы позволили всем пользователям
    делать записи в каталог users, читать его и производить в нем поиск (под
    сказка права доступа 0777).
  15. А теперь напишем сценарий HandleNewUser.php, который будет обрабаты
    вать информацию из формы и создавать новый каталог.

  16. Откройте текстовый редактор и создайте новый РНРдокумент.
  17. Начните с открытия PHPраздела и написания новой функции.

  18. <?php
    function MakeDirectoryName ($Username) {
    /* Функция MakeDirectoryName принимает в качестве аргумента имя
    пользователя, на базе которого будет сгенерировано имя директории. */
    srand ((double) microtime() * 1000000);
    $Name = rand() . $Username;
    return $Name;
    } // End of MakeDirectoryName Function.

    Каталогу будет дано имя с помощью переменной $Username и случайного
    числа. Имя сгенерируется инициализацией функции srand() текущим време
    нем, и затем на основе этого будет выбрано случайное число. Присоединение
    его к переменной $Username обеспечит уникальность каждого имени, которое
    затем возвращается функцией.

  19. СкопируйтефункциюИг^еТоР11е() из листинга 10,4 и слегка измените ее:

  20. function WriteToFile ($Username, $Password) {
    $TheFile'= 'users.txt*;
    SYS-PAGE-CONTENTpen = fopen ($TheFile, "a");
    if (SYS-PAGE-CONTENTpen) {
    $Password = md5 ($Password);

    Измените имя текстового файла (теперь это users.txt) и добавьте строку для
    шифрования пароля перед его сохранением. В целях безопасности всегда луч
    ше хранить зашифрованный пароль.

  21. Определите новое имя каталога.

  22. $Directory = "users/" . MakeDirectoryNaiae. <$Username) ;

    Это имя создается с помощью вызова функции MakeDirectoryName ( ) и со
    глашения о том, что новый каталог будет подкаталогом каталога users.

  23. Добавьте новые данные в файл.

  24. fwrite (SYS-PAGE-CONTENTpen, "$Usernarnet$Passwordt$Directoryn") ;
    fclose (SYS-PAGE-CONTENTpen);

  25. Попытайтесь создать каталог и задайте условие

  26. if (! (mkdir ,($Directory, " 0 7 7 7 " ) ) ) {
    ^Directory = FALSE;
    } else {
    $Directory = FALSE;
    return $Directory;
    } // Конец функции WriteToFile.

    Переменной $Directory присваивается значение имени нового каталога,
    только если файл успешно открыт. Если не удается открыть файл или каталог
    не может быть создан, значение переменной$Directory будет ложным. Это
    указание на то, что функция не выполнила свою работу. Результат, выдаваемый
    функцией, FALSE.

  27. Закройте PHPраздел и HTMLзаголовок

  28. '?><HTMLxHEADxTITLE>Using Directories</TITLEx/HEADxBODY>

  29. Откройте второй PHPраздел и создайте главную условную конструкцию.

  30. 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");

    Эта часть кода вам уже должна быть знакома. Конструкцией проверяется,
    заполнены ли оба поля формы. Если да, то данные записываются в файл и со
    здается новый каталог. На основе возвращаемого функцией значения отправ
    ляется соответствующее сообщение.

  31. Закройте этот PHPраздел и саму HTMLстраницу.

  32. ?></BODYx/HTML>

  33. Сохраните страницу как HandleNewUser.php (листинг 10.6), загрузите ее
    на сервер~(туда же, где находятся каталог users, файл users.txt и страница
    NewUser.html) и протестируйте результаты в браузере (рис. 10.11 и 10.12).
    Листинг 10.6 т Хотя здесь вы видите только две функции, можно написать
    и третью, предназначенную исключительно для создания каталога. Для этого
    нужно выделить условную конструкцию mkdir ( ) из функции WriteToFile().

  34. 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>

    Проверить работу страницы также можно, заглянув в каталог users на сервере
    с помощью FTP или Telnet и посмотрев, есть ли новые подкаталоги.
    Наверняка когданибудь вы захотите разработать систему, гарантирующую уни
    кальность имени пользователя. Сделать это достаточно просто: перед созданием
    каталога ваш сценарий должен проверить, не соответствует ли только что введен
    ное имя пользователя одному из тех, что есть в списке. Если соответствий не най
    дено, имя пользователя принимается. В противном случае нужно выдать сообще
    ние с просьбой ввести другое имя пользователя.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: