Опубликован: 08.05.2007 | Доступ: свободный | Студентов: 12881 / 3013 | Оценка: 4.13 / 3.77 | Длительность: 12:58:00
Лекция 11:

Доступ к файлам и папкам

< Лекция 10 || Лекция 11: 123 || Лекция 12 >

Удаление файлов

Этот раздел описывает, как использовать PHP для удаления файлов в системах Windows.

PHP содержит функцию unlink() для удаления файлов. Функцию unlink() надо использовать с осторожностью. После удаления файла его невозможно восстановить. Эта функция определяется ниже.

unlink(имя_файла) – удаляет файл, определенный параметром. Функция возвращает значение true или false.

Следующий пример показывает, как удалить файл с помощью функции unlink():

filedelete.php 

<?php

$filename = "C:/Documents and Settings/Administrator/MyFiles/myfile.txt";

$status = unlink($filename) or exit("Невозможно удалить файл");

echo "файл удален успешно";
				
?>

Первый шаг состоит в создании переменной для хранения полного пути доступа к файлу, содержимое которого будет удалено:

$filename = "C:/Documents and Settings/Administrators/MyFiles/myfile.txt";

Функция unlink() выполняется, получая один параметр, путь доступа исходного файла — $filename. Функция unlink() возвращает значение true, если файл удаляется успешно; иначе возвращается значение false. Возвращаемое значение хранится в переменной $status.

$status = unlink($filename) or die("Невозможно удалить файл");

Если функция unlink() отказывает, выполняется функция exit(), выводя сообщение об ошибке. Иначе с помощью оператора echo выводится сообщение об успехе:

echo "файл удален успешно";

Переименование файлов

Этот раздел описывает, как использовать PHP для переименования файлов в системах Windows.

PHP содержит функцию rename() для переименования файлов. Эта функция определена ниже:

rename($orig_filename, $new_filename) – переименует файл, определенный первым параметром, в имя, определенное вторым параметром. Функция возвращает значение true или false.

Следующий пример показывает, как переименовать файл с помощью функции rename():

filerename.php 

<?php

$orig_filename = "C:/Documents and Settings/Administrator/MyFiles/myfile.txt";
$new_filename = "C:/Documents and Settings/Administrator/MyFiles/newfile.txt";
$status = rename($orig_filename, $new_filename) or exit("Невозможно переименовать файл");

echo "файл успешно переименован";

?>

Первый шаг состоит в создании переменной для хранения полного пути доступа к файлу, который будет переименован:

$orig_filename = "C:/Documents and Settings/Administrators/MyFiles/myfile.txt";

Второй шаг состоит в создании переменной для хранения полного пути доступа к файлу, который будет создан, когда старый файл будет переименован:

$new_filename = "C:/Documents and Settings/Administrators/MyFiles/newfile.txt";

При выполнении функция rename() получает два параметра, путь доступа к исходному файлу — $orig_filename и путь доступа к файлу, который будет создан, когда старый файл будет переименован — $new_filename. Функция rename() возвращает значение true, если файл переименовывается успешно, иначе возвращается значение false. Возвращаемое значение хранится в переменной $status.

$status = rename($orig_filename,$new_filename) or exit("Невозможно переименовать файл");

Если функция rename() отказывает, выполняется функция exit(), выводящая сообщение об ошибке. Иначе выводится сообщение об успехе с помощью оператора echo.

echo "файл успешно переименован";

Получение данных формы

В большинстве случаев введенные пользователями данные формы записывают в СУБД, такую, как MS Access и MySQL, с помощью функций ODBC и MySQL, рассмотренных в разделах "Доступ к базам данных" и "Доступ к базе данных MySQL" . Аналогичным образом данные формы можно также записать в текстовый файл. Этот раздел описывает, как использовать PHP для получения данных формы и записи их в текстовый файл.


Рассмотрим приведенную выше страницу с формой. Следующий пример показывает, как записать отправленные данные формы в текстовый файл:

<?php

if ($_POST['SubmitB'] == "Submit Data")
{
$file_name = "c:\formfile.txt";
$open_file = fopen($file_name, "a+");

$file_contents= $_POST['FName'] . "," . $_POST['LName'] . "," . $_POST['DateTime'] ."\n";

fwrite($open_file,$file_contents);

fclose($open_file);

echo "Данные формы успешно записаны в файл";
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD/XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml11-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" 
lang="en">
<head>
  <title>Страница Web </title>
</head>
<body>

<p>Запись данных формы в файл </p>

<p>
<form method="post" action="createfile.php">

Enter First Name <input type="text" name="FName"/><br/><br/>
Enter Last Name  <input type="text" name="LName"/><br/><br/>
<input type="hidden" name="DateTime" value="<?php echo date('g:i a') ?>"/>
<input type="submit" name="SubmitB" value="Submit Data"/>

</form>
</p>

</body>
</html>
Пример 11.1.

В этом примере форма страницы XHTML содержит текстовое поле для имени и фамилии пользователя. Также кодируется скрытое поле, в которое заносится с помощью функции PHP date() текущие дата и время. Когда нажимается кнопка отправки формы, создается новый текстовый файл 'formfile.txt' и открывается в режиме добавления:

$file_name = "c:\formfile.txt";
$open_file = fopen($file_name, "a+");

Затем переменной $file_contents присваиваются значения суперглобальных переменных POST, содержащие имя и фамилию пользователя и текущее значение даты и времени. К строкам присоединяется запятая, чтобы создать разграничители этих значений. В конце каждой строки добавляется символ новой строки для создания возврата каретки:

$file_contents= $_POST['FName'] . "," . $_POST['LName'] . "," . $_POST['DateTime'] ."\n";

Наконец, содержимое переменной $file_contents записывается (добавляется) в текстовый файл. Файл закрывается, и используется оператор echo для вывода подтверждающего сообщения в окне браузера:

fclose($open_file);
echo "Данные формы успешно записаны в файл";

Пересылка файлов

В некоторых динамичных приложениях Web необходимо разрешать пользователям пересылку файлов с локального компьютера на сервер Web. Такое приложение может позволить пользователям обмениваться файлами с другими пользователями или просто предоставить механизм для хранения файлов для будущего использования. Этот раздел вводит функцию PHP для пересылки файлов.

В PHP пересылку файлов можно реализовать с помощью следующей функции:

move_uploaded_file(имя_файла, место_назначения) – перемещает файл в указанное место на сервере.

Прежде чем переходить к деталям кода PHP, давайте посмотрим на элементы управления формы XHTML, необходимые для создания страницы для пересылки файлов.

<form enctype="multipart/form-data" action="upload.php" method="post">

Select File: <input type="file" name="uploadFile">

<input name="SubmitB" type="submit" value="Upload File">

</form>

Блок кода начинается со стандартного тега XHTML <form>. Кроме атрибутов action и method форма, используемая для пересылки файлов, должна включать тип кодирования или атрибут "encrypt". Когда форма применяется для пересылки файлов должно использоваться значение атрибута encrypt "multipart/form-data".

После тега <form> следует элемент текстового поля <input>. Этот элемент управления нужен для определения расположения и имени файла, который будет пересылаться. Он содержит атрибуты name и type. Атрибут type должен быть задан как "file". name имеет определенное пользователем значение, которое будет использоваться сервером для идентификации файла источника во время процесса пересылки.

Текстовое поле file включает также кнопку "Browse…" при выводе в окне браузера. Когда нажимается эта кнопка, появляется диалоговое окно, позволяющее пользователю найти на своем локальном компьютере файл, который будет пересылаться.

Последним элементом управления является кнопка отправки ( submit ). Кнопка отправки используется для инициирования процесса отправки формы. Когда нажимается эта кнопка, информация о файле посылается на страницу upload.php, которая содержит код PHP для пересылки файла в папку, расположенную на сервере Web.

После кодирования формы XHTML на страницу можно добавить сценарий PHP для выполнения динамической пересылки файла. Когда файл пересылается с помощью функции move_uploaded_file(), он кратко хранится во временном месте на сервере Web. Для перемещения файла в его конечное место назначения и манипуляций с его различными свойствами, используется суперглобальный массив PHP $_FILES. Массив $_FILES применяет значение name, заданное в теге <input type="file" name="uploadFile"/> (в данном случае 'uploadFile' ) для идентификации пересылаемого файла. Записи, связанные с массивом $_FILES, описаны ниже.

$_FILES['uploadFile']['tmp_name'] – каталог на сервере web, где временно хранится файл. По умолчанию используется каталог uploadtemp, расположенный в папке PHP.

$_FILES['uploadFile']['name']имя файла в системе пользователя.

$_FILES['uploadFile']['size']размер файла в байтах.

$_FILES['uploadFile']['type'] – тип MIME файла.

$_FILES['uploadFile']['error']код ошибки, связанный с пересылкой файла (0 – успешная пересылка, 1 – файл превышает максимальный размер пересылки, 2 – файл превышает максимальный размер файла, 3 – файл частично загружен, 4 – файл не загружен).

Следующие блоки кода показывают, как массив $_FILES используется с функцией move_uploaded_file() для создания простой процедуры пересылки.

upload.php 

<?php

  if ($_POST[SubmitB] == "Upload File")
  {
  

  move_uploaded_file ($_FILES['uploadFile'] ['tmp_name'], 
   "../PHPTutorial/ECommerce/Databases/{$_FILES['uploadFile'] ['name']}");
       
 echo "Файл загружен.";
       
  
  }


?>

<form enctype="multipart/form-data" action="upload.php" method="post">

Select File: <input type="file" name="uploadFile">

<input name="SubmitB" type="submit" value="Upload File">

</form>

Когда нажимается кнопка "Upload File", то файл, определенный в <input type="file" name="uploadFile"/>, автоматически посылается во временную папку на сервере Web. Затем вызывается функция move_uploaded_file() для перемещения файла. Первый параметр функции, $_FILES['uploadFile'] ['tmp_name'], становится ссылкой на файл, когда функция готовится к перемещению его в конечное место назначения. Второй параметр, "../PHPTutorial/ECommerce/Databases/{$_FILES['uploadFile'] ['name']}", является относительным путем доступа к папке, в которой был временно сохранен файл. Последняя часть пути доступа включает код {$_FILES['uploadFile'] ['name']}. Это можно интерпретировать как имя файла, который был введен в текстовое поле file с именем "uploadFile". Вкратце, функция move_uploaded_file() перемещает файл из временной папки пересылки folder ($_FILES['uploadFile'] ['tmp_name']) в папку "../PHPTutorial/ECommerce/Databases/), и файл сохраняется с тем именем, которое ввел пользователь, ({$_FILES['uploadFile'] ['name']}). Файлы можно пересылать в любой каталог на сервере Web, однако папка места назначения должна иметь полномочия доступа для записи ("write").

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

Следующие блоки кода показывают модифицированную версию предыдущей процедуры пересылки, которая содержит проверку ошибок.

upload.php 

<?php

if ($_POST[SubmitB] == "Upload File")
{

move_uploaded_file ($_FILES['uploadFile'] ['tmp_name'], 
       "../PHPTutorial/ECommerce/Databases/{$_FILES['uploadFile'] ['name']}");
      
      if($_FILES['uploadFile'] ['error'] > 0)
      {
            switch ($_FILES['uploadFile'] ['error'])
      {
      
      case 1: echo 'Файл превышает максимальный серверный размер для пересылки';
      break;
      
      case 2: echo 'Файл превышает максимальный размер файла';
      break;
      
      case 3: echo 'Файл загрузился только частично';
      break;
      
      case 4: echo 'Никакой файл не загрузился';
      break;
      
      }
            
      }
      
      else
      
      {
      
      echo 'Файл успешно загружен';
      
      }
}

?>

<form enctype="multipart/form-data" action="upload.php" method="post">

Select File: <input type="file" name="uploadFile"/>

<input type="hidden" name="MAX_FILE_SIZE" value="1000000"/>

<input name="SubmitB" type="submit" value="Upload File"/>

</form>
Пример 11.2.

Обновленный код включает оператор if и оператор switch/case для проверки статуса пересылки файла. После выполнения функции move_uploaded_file() оператор if проверяет значение массива $_FILES['uploadFile'] ['error']. Если значение больше 0, то произошла ошибка. Значение $_FILES['uploadFile'] ['error'] передается оператору switch и проверяется. После этого выводится соответствующее сообщение об ошибке. Если значение $_FILES['uploadFile'] ['error'] равно 0, оператор else выводит сообщение об успешном выполнении.

Еще одним новым свойством, включенным в этот пример, является скрытое текстовое поле XHTML с именем "MAX_FILE_SIZE". Это специальный скрытый тег, который можно использовать с тегом file, <input type="file" name="uploadFile"/>, для задания максимального размера файла. Если файл превышает определенное значение, то произойдет ошибка. Это значение измеряется в байтах. Здесь максимальный размер файла задан равным 1,000,000 байт (приблизительно 1 мегабайт). Можно также задать максимальный серверный размер пересылки. Это максимальный размер файла, заданный на сервере в файле PHP.ini.

< Лекция 10 || Лекция 11: 123 || Лекция 12 >
Максим Матросов
Максим Матросов
Наталья Джабасова
Наталья Джабасова