Тема № 10. Работа с каталогами в сценариях РНР

Цель работы:Получение практических навыков по работе с деревом каталогов.

 

Задание 1. Создать каталог и добавить в него файл.

Пусть необходимо создать каталог Users1 по пути:

W:/home/localhost/www/php/Lab/Users1

и сформировать в этом каталоге файл с именем users10.txt на основе информации показанной в форме на рис. 3.156.

 

Рис. 3.156. Форма ввода и результат работы файла Lab10.php.

 

Форма показанная на рис. 3.156, создается с помощью листинга программы Lab10.php, приведенной на рис. 3.157.

 

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />

<title>Lab10 Создание каталога</title></head>

 

<body>

<p>Lab10 Создание каталога</p>

<?PHP

// тело основной программы

echo 'Текущий каталог realpath(.)='.realpath(".").'<br>';//выводит имя текущего каталога W:\home\localhost\www\php

//т. е. имя рабочего каталога в котором

//находится исполняемый скрипт.

 

$pos = strpos($_SERVER['PHP_SELF'],"/php/"); //

//Например $_SERVER['PHP_SELF']=/php/Lab10.php

$str=substr($_SERVER['PHP_SELF'],$pos+5);//вырежет только

// имя исполняемого скрипта (например Lab10.php)

echo "Имя исполняемого скрипта=".$str;

 

 

$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];

//Например, DOCUMENT_ROOT= W:/home/localhost/www

 

$ndir="Users1";//имя создаваемой папки

$FileName=$DOCUMENT_ROOT."/php/Lab/".$ndir."/users10.txt";

//$FileName=W:/home/localhost/www/php/Lab/Users1

if (!isset($_POST["Submit"]))://первая прорисовка формы

 

print("<form action=\"Lab10.php\" method=post>

Name:<input type=text name=\"UserName\"><br>

Password:<input type=password name=\"Password\"><br>

<input type=submit name=\"Submit\" value=\"ok\">

</form>\n ");

 

echo "Введенная информация должна быть сохранена <br>

в каталоге ".$ndir.", в файле users10.txt";

 

else: //форма ввода уже на экране и нажата OK

 

if ((strlen($_POST["UserName"]))

and (strlen($_POST["Password"]))):

//&& и and - эквивалентны (логическое И)

//echo("Если имя и пароль пользователя указан. Длина

//имени пользователя=".strlen($_POST["UserName"]).

//",Password=".strlen($_POST["Password"]));

 

$Check=WriteFile($_POST["UserName"],$_POST["Password"],

$ndir,$FileName,$DOCUMENT_ROOT);

if ($Check):

print("<br>Ваша регистрация прошла успешно: <p>\n");

ReadFromFile($ndir,$FileName);

else:

print("<br>Регистрация не была выполнена <br>\n");

endif;

 

else: //при вводе что-то не указали

print("Вернитесь и введите значения Alt+Left");

endif;

 

endif;

?>

</body>

</html>

 

<?PHP

//функции пользователя

function WriteFile($UserName,$Password,$ndir,$FileName,$DOCUMENT_ROOT)

{

//$UserName

//$Password

//$ndir - имя создаваемой папки. Например,$ndir="Users1"

//$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];

//Например, DOCUMENT_ROOT= W:/home/localhost/www

//$FileName=$DOCUMENT_ROOT."/php/Lab/".$ndir."/users10.txt";

// Назначение:

// Создание папки $ndir по пути:

// W:/home/localhost/www/php/Lab/$ndir

// если она отсутствует, и создание файла $FileName для

// добавления в него информации $UserName и $Password.

// Если файл существует - только добавление информации.

// В качестве разделителей значений атрибутов использовать

// символы "\t".

 

echo '<br>Write Путь FileName='.$FileName.',<br> UserName='.$UserName.',Password='.$Password.',is_writeable='.is_writeable($FileName).' ='.gettype(is_writeable($FileName)).',<br>_SERVER[PHP_SELF]='.$_SERVER['PHP_SELF'].'<br>';

 

//Формирование пути для папки с именем $ndir

$newdir=$DOCUMENT_ROOT."/php/Lab/".$ndir;

$isdir = is_dir($newdir); // Возвращает TRUE

if ($isdir== TRUE):

//print "<br>Каталог //существует:".gettype($isdir).".isdir=".$isdir."<br>";

$nh=($isdir) ? 'True' : 'False';

echo '<br>Каталог '.$newdir.' уже существует isdir='.$nh;

else:

print "<br>Каталог '.$newdir.' Не существует.";

$rs = @mkdir( $newdir, '0777' );

echo '<br>Каталог создан isdir='.($isdir) ? 'True' : 'False';

 

endif; //не забывайте точку с запятой

if (is_writeable($newdir)):

//Функция is_writeable($newdir)-сообщает, можно ли

//записывать в newdir. Возвращает TRUE, если newdir

//существует и является доступным (writable).

$Open=fopen($FileName,"ab");

if ($Open):

if (filesize($FileName)==0):

echo '<br>Успешное создание и открытие файла';

else:

echo '<br>Успешное открытие файла. Он уже существовал';

endif;

 

echo "<br>Файл $FileName доступен!<br> Размер файла=".filesize($FileName)." байт <br>";

 

$Password=md5($Password);//шифровка пароля

 

fwrite($Open,"$UserName \t $Password \n");

echo '<br>В файл Lab10.txt добавлена запись о пользователе <br> и его зашифрованном пароле.';

fclose($Open);

$Directory=TRUE;

else:

print("Невозможно открыть файл $FileName<br>\n");

$Directory=FALSE;

endif;//

 

else:

 

print("<br>В файл запрещена запись".$newdir);

$Directory=FALSE;

endif; //}

//echo '<br>WriteTo return Directory='.$Directory;

 

return $Directory;

}

 

function ReadFromFile($ndir,$FileName)

{//Назначение

// Чтение и вывод информации на экран

//$ndir - имя папки (Например,$ndir="Users1")

//$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];

//Например, DOCUMENT_ROOT= W:/home/localhost/www

//$FileName=$DOCUMENT_ROOT."/php/Lab/users/users10.txt";

 

$Open=fopen($FileName,"rb");

//echo '<br>ReadFromFile Open='.$Open;

if ($Open):

$Data=file($FileName);//закачка файла в массив

echo '<br>Число записей в файле='.count($Data).'<br>';

for ($n=0;$n<count($Data);$n++)

{

$GetLine=explode("\t",$Data[$n]);

print("<b>$GetLine[0]</b> $GetLine[1] <br>\n");

}

fclose($Open);// закрытие файла

else:

print("Невозможно открыть файл $FileName<br>\n");

endif;

}//конец функции ReadFromFile

?>

Рис. 3.157. Листинг скрипта с именем Lab10.php.

Пусть пользователь заполнил форму следующим образом (рис. 3.158):

Рис. 3.158. Заполненная форма для скрипта с именем Lab10.php.