Директории (Част 1)

Четенето на файл и записването на информация в него на сървъра е само част от процеса на съхраняване на данни. Може да поискате да използвате и директории. Какво е директория? Директорията e място за съхраняване на файлове или други директории (папки).

Създаване на директория


Вградената в РНР функция за създаване на директория е mkdir ().


Синтаксисът на функцията mkdir () е:

bool mkdir ( string $pathname [,int $mode [,bool $recursive [,resource $context]]])

$pathname- задължителен параметър. Показва пътя до мястото, където искате да създадете директорията.

$mode- незадължителен параметър. Определя правата за достъп (http://dreamlandpoly.blogspot.com/p/files-2.html) до директорията, която ще се създава. По подразбиране стойността на този параметър е 0777. При работа с операционна система Windows, този параметър се игнорира.

$recursive- незадължителен параметър. Може да приема стойности TRUE или FALSE.

$context- незадължителен параметър.

По подразбиране функцията mkdir () създава директория, ако нейната родителска съществува. Ако искате да създадете директория, но родителската ѝ не съществува, използвайте параметъра $recursive. В този случай едновременно ще се създадат и родителската, и желаната директория.

Повече информация за функцията mkdir () можете да намерите на адрес: http://php.net/


Четене на съдържанието на директория


За да прочетем съдържанието на дадена директория, е необходимо да отворим директорията (opendir ()), да прочетем съдържанието ѝ (readdir ())и да затворим директорията (closedir ()).

Синтаксисът на функцията opendir() е:

resource opendir (string $path [, resource $context])

$path- задължителен параметър, който указва пътя до директорията, която искаме да отворим.


Синтаксисът на функцията readdir () e:

string readdir ([resource $dir_handle])

$dir_handle- задължителен параметър. Път до директорията, която преди това е отворена с opendir ().


Синтаксисът на функцията closedir () e:

void closedir ([resource $dir_handle])

$dir_handle- задължинелен параметър. Път до директорията, която преди това е отворена с opendir ().


Ако се налага промяна на собствеността на директорията или правата за достъп до нея, може да се приложат РНР функциите chown () и chmod ().

Ще създадем скрипт, който при регистрация на нов потребител, ще създава директория (ако такава вече не съществува), в която ще се съхранява информацията за потребителя, получена от формата.

Преди да продължа, ми се иска да кажа нещо за Unix domain socket (https://en.wikipedia.org/wiki/Unix_domain_socket)- обмяна на данни между процеси, протичащи в една и съща операционна система. Unix domain socket поддържа надеждно (сигурно) предаване на данни. Поради тази причина е добре да се използва функцията fsockopen () при създаване на формата. Необходимо е да се валидират данните и да се криптира паролата (от съображения за сигурност). Аз това няма да го направя сега. :)

Отворете текстовия редактор и създайте нов документ. Дайте му наименование NewUser.html. Ролята на този файл е да получи информация от потребителя, която впоследствие ще бъде записана във файл на сървъра.
Въведете:
//NewUser.html
<html>
<head>
<title>Форма за регистрация</title>
<meta http-equiv="Content-Type" content="text/html"; charset="UTF-8">
</head>
<body>
 
<form action= "HandleNewUser.php"  method="post" target="_blank">

Име: <br/><br/><input type=text name="firstname" placeholder= "Име" required/> <br/><br/>
Фамилия: <br/><br/><input type=text name="lastname" placeholder= "Фамилия" /> <br/><br/>
Рожден ден:<br/><br/><input type="date" name="bday" placeholder= "Рождена дата" ><br/><br/>
Телефон:<br/><br/><input type="tel" name="tel" placeholder="10-цифрено число" ><br/><br/>
URL:<br/> <br/><input type=text name="url" placeholder="URL на любим сайт" /><br/><br/>
Имейл адрес:<br/><br/><input type="email" name="email" placeholder="Валиден имейл адрес" ><br/><br/>
Парола: &nbsp;&nbsp;&nbsp;<br/><br/><input type=”password” name="password" placeholder="*****" ><br/><br/>
Пол: <br/><br/><input type="radio" name="sex" value="Мъж">Мъж
<input type="radio" name="sex" value="Жена">Жена
<input type="radio" name="sex" value="Не искам да кажа">Не искам да кажа<br/><br/>

<input type=submit name="submit"  formenctype="multipart/form-data" value="Напред >>"/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input type=reset name="reset"  value="Изчисти >>"/>
</form>

</body>
</html>
Съхранете файла и го качете на сървъра.
Ще създадем директория и поддиректория, в която автоматично ще се създават файлове с информация за регистрацията на всеки потребител.

Отворете текстовия редактор и създайте нов документ HandleNewUser.php. Въведете:

<?php
// HandleNewUser.php

// Функция makeDirectory получава като аргумент името на потребителя
//на базата на което ще генерира името на директорията
function makeDirectory () { 

if (isset($_POST['submit'])) {  
    $firstname = $_POST['firstname'];  
    $lastname = $_POST['lastname'];  
    $bday = $_POST['bday'];
    $tel = $_POST['tel'];
    $url = $_POST['url'];
    $email = $_POST['email'];
    $sex = $_POST['sex'];
    $password = $_POST['password'];
Името на директорията задаваме с променливата $dir и случайно число (ако има дублиране на стойността на променливата $firstname).

//Показва пътя до директорията registration
$dir = "/opt/lampp/htdocs/phpbegin/users/registration";
//Създава директориите users и registration

//Проверява дали променливата $dir е директория 
if( is_dir($dir) === false)
{
   //Създава директорията и поддиректорията /users/registration
   mkdir($dir, 0777, true);
}

  
//Името на файла, в който ще се запише информацията
$Name =$firstname . '.txt';

//Проверява дали съществува файл с име $Name
if (file_exists ($Name) === TRUE){

//Ако съществува файл с такова име, с помощта на функцията rand () 
//се генерира нова променлива $Name  
$Name =rand () . $firstname . '.txt';

}

else {
Името на файла, който ще съхранява информацията за потребителя, се създава с променливата $Name.
Променливата, съдържаща данните, които ще съхраняваме е $content_to_write:

//Информацията за потребителя, получена от формата,
//която ще се съхрани във файл $Name
$content_to_write = "
Име: $firstname  
Фамилия: $lastname  
Дата на раждане: $bday
Телефон: $tel
URL: $url
Имейл адрес: $email
Пол: $sex
Парола: $password
<hr>";


//създава файл с име $Name в директорията /users/registration
$file = fopen($dir . '/' . $Name,"w");

//Записва съдържанието на $content_to_write във файл $Name
fwrite($file, $content_to_write);

//Затваря файл $Name
fclose($file);

//Извежда съдържанието на създадения файл в браузъра
include $dir . '/' . $Name; 
}
} 
}// Край на функцията makeDirectory()
?>
Съставете HTML заглавието на страницата и извикайте функцията, за да се изпълни:

<html>
<head>
<title>Работа с директории</title>
<meta http-equiv="Content-Type" content="text/html"; charset="UTF-8">
</head>
<body>

<?php
makeDirectory ();
?>

</body>
</html>
Съхранете файла. Качете го на сървъра, в същата директория, в която се намира NewUser.html. Тествайте в браузъра.

Ето и съдържанието на целия файл HandleNewUser.php:
<?php
//HandleNewUser.php
// Функция makeDirectory получава като аргумент името на потребителя
//на базата на което ще генерира името на директорията

function makeDirectory () { 

if (isset($_POST['submit'])) {  
 $firstname = $_POST['firstname'];  
    $lastname = $_POST['lastname'];  
    $bday = $_POST['bday'];
    $tel = $_POST['tel'];
    $url = $_POST['url'];
    $email = $_POST['email'];
    $sex = $_POST['sex'];
    $password = $_POST['password'];
    
//Показва пътя до директорията registration
$dir = "/opt/lampp/htdocs/phpbegin/users/registration";
//Създава директориите users и registration

//Проверява дали променливата $dir е директория 
if( is_dir($dir) === false)
{
   //Създава директорията и поддиректорията /users/registration
   mkdir($dir, 0777, true);
}

  
//Името на файла, в който ще се запише информацията
$Name =$firstname . '.txt';

//Проверява дали съществува файл с име $Name
if (file_exists ($Name) === TRUE){

//Ако съществува файл с такова име, с помощта на функцията rand () 
//се генерира нова променлива $Name  
$Name =rand () . $firstname . '.txt';

}

else {
 
//Информацията за потребителя, получена от формата,
//която ще се съхрани във файл $Name
$content_to_write = "
Име: $firstname  
Фамилия: $lastname  
Дата на раждане: $bday
Телефон: $tel
URL: $url
Имейл адрес: $email
Пол: $sex
Парола: $password
<hr>";

//Отваря/създава файл с име $Name в директорията /users/registration
$file = fopen($dir . '/' . $Name,"w");

//Записва съдържанието на $content_to_write във файл $Name
fwrite($file, $content_to_write);

//Затваря файл $Name
fclose($file);

//Извежда съдържанието на създадения файл в браузъра
include $dir . '/' . $Name; 
}
} 
}// Край на функцията makeDirectory()
?>

<html>
<head>
<title>Работа с директории</title>
<meta http-equiv="Content-Type" content="text/html"; charset="UTF-8">
</head>
<body>

<?php
makeDirectory ();
?>

</body>
</html>
NewUser_html.png


HandleNewUser_php.png


poli.txt


sign.png

Няма коментари:

Публикуване на коментар