Цель работы:Получение практических навыков по работе с деревом каталогов.
Задание 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.