Поиск

Каталоги

Чтение файла и запись в него на сервере только часть процесса хранения дан ных. Наверняка вы захотите использовать и каталоги. Каталог можно предста вить в виде папки это подраздел жесткого диска, где можно хранить файлы и другие каталоги. По. умолчанию все посещаемые вами 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 и посмотрев, есть ли новые подкаталоги. Наверняка когданибудь вы захотите разработать систему, гарантирующую уни кальность имени пользователя. Сделать это достаточно просто: перед созданием каталога ваш сценарий должен проверить, не соответствует ли только что введен ное имя пользователя одному из тех, что есть в списке. Если соответствий не най дено, имя пользователя принимается. В противном случае нужно выдать сообще ние с просьбой ввести другое имя пользователя.