Пересылка файлов
В некоторых динамичных приложениях 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.
Лекция 12. Отправка E-mail
Этот раздел описывает, как использовать службы SMTP для отправки автоматических сообщений e-mail из приложений PHP. E-mail посылается с сервера Web через его службу простого протокола пересылки почты SMTP. Как и предполагает название, это ограниченная в возможностях служба e-mail, однако ее достаточно для создания автоматических сообщений e-mail. Необходимо отметить, что требуется сервер SMTP, чтобы можно было воспользоваться функциями e-mail в PHP. В операционных системах XP Professional, Windows 2000 server и Windows 2003 server службы SMTP объединены с информационными службами Интернет (IIS). В Linux/Unix популярными пакетами SMTP являются Sendmail и Qmail.
При выполнении PHP на сервере с помощью служб SMTP IIS, может понадобиться сконфигурировать его, чтобы разрешить пересылку сообщений e-mail. Выполните следующие действия.
- Откройте инструменты администрирования IIS
- Остановите используемую по умолчанию службу виртуального сервера SMTP.
- Откройте окно свойств используемого по умолчанию виртуального сервера SMTP.
- Щелкните на вкладке "Access" и нажмите кнопку "Relay...".
- Нажмите кнопку "Only the list below" и добавьте один компьютер с IP-адресом 127.0.0.1.
- Нажмите кнопку "OK", чтобы закрыть окно вкладок и свойств "Access".
- Перезапустите используемую по умолчанию службу виртуального сервера SMTP.
Необходимо также сделать следующие изменения в конфигурационном файле PHP — php.ini – чтобы система PHP могла использовать службы SMTP. Откройте файл php.ini с помощью текстового редактора и найдите следующие строки:
[mail function]
;For Win32 only
SMTP = localhost
;For Win 32 only
sendmail_from = me@localhost.com
Необходимо изменить директиву SMTP, чтобы она указывала на используемый сервер SMTP. Если используются локальные службы SMTP, то это значение должно быть задано как localhost. Вторая директива sendmail_from является адресом email, применяемым в заголовке From исходящей почты e-mail. Должна быть задана действительная учетная запись e-mail, если пользователям будет разрешено отвечать на автоматически создаваемые сообщения e-mail.
В PHP имеется функция mail() для отправки e-mail. Эта функция определена ниже:
mail(string_to, string_subject, string_message,string_additional_headers) – позволяет посылать сообщение e-mail. Возвращает true, если сообщение успешно послано, иначе возвращается значение false.
Следующий пример демонстрирует использование функции mail():
<?php
$to = 'youraddress@domain.com';
$subject = 'PHP Mail';
$msg = 'hello';
$headers = 'From: webmaster@example.com' . "\r\n" .
'Reply-To: webmaster@example.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $msg, $headers);
?>
Первый шаг состоит в создании переменной для хранения адреса e-mail, куда будет послано сообщение:
$to ="youraddress@domain.com";
Это может быть любой действительный адрес e-mail. Несколько адресов e-mail должны разделяться запятой ",".
Переменная $subject содержит тему сообщения e-mail. Эта строка появится в строке subject (тема) сообщения.
$subject="PHP Mail";
Основное содержание тела сообщения e-mail присваивается переменной $msg. Если потребуется, то можно соединять несколько переменных $msg вместе. Это часто бывает нужно, когда посылается длинное описательное сообщение.
$msg = "Сообщение, созданное с помощью функции PHP mail().";
Затем создаются заголовки e-mail и присваиваются переменной $headers. Заголовки e-mail являются строками в начале сообщений e-mail, которые определяют их структуру и делают их, по сути, действительными почтовыми адресами. Хотя функция mail() может использоваться без заголовков, рекомендуется включать заголовки "From:" и "Reply-To:"
$headers = "From: My Web Site <myaddress@mydomain.com>";
$headers .= "Reply-To: myaddress@mydomain.com";
Наконец, вызывается функция mail() для отправки сообщения:
mail($to,$subject,$msg, $headers);
В большинстве случаев параметры to, subject, и message функции mail() не кодируются жестким образом, как показано в предыдущем примере. Вместо этого они подставляются динамически в результате ввода пользователя. Например, рассмотрим страницу, которая позволяет пользователю электронным образом регистрироваться для получения товара или услуги. Пользователь вводит имя, фамилию, адрес e-mail, и номер телефона. Эта информация передается на страницу PHP, которая анализирует информацию и посылает пользователю подтверждающее сообщение e-mail. Следующий пример демонстрирует этот процесс:
<!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>
<h3> Страница регистрации </h3>
<form name="registration" method="post" action="email.php">
First Name: <input type="text" name="fname"/>
Last Name: <input type="text" name="lname"/>
Email Address: <input type="text" name="email"/>
Telephone: <input type="text" name="telephone"/>
<input type="submit" name="Submit Registration"/>
</form>
</body>
</html>
Страница registration.htm является стандартной страницей формы XHTML, которая позволяет пользователю вводить имя, фамилию, адрес e-mail и номер телефона. Когда нажимается кнопка "Submit Registration", данные формы передаются на страницу PHP email.php как переменные PHP $_POST[]:
$_POST['fname'] – содержит имя пользователя
$_POST['lname'] – содержит фамилию пользователя
$_POST['email'] – содержит адрес e-mail пользователя
$_POST['telephone'] – содержит номер телефона пользователя
Следующий сценарий показывает, как информация формы анализируется и используется функцией mail():
<?php
$to = $_POST[email];
$subject = "Подтверждение регистрации";
$msg = "Дорогой: " . $_POST[fname] . " " . $_POST[lname] . ",\n\n";
$msg .= "Вы успешно зарегистрировались.";
$headers = "From: Registration Site <myaddress@mydomain.com>";
$headers .= "Reply-To: registration@mydomain.com";
mail($to, $subject, $msg, $headers);
?>
Страница email.php получает значения из суперглобального массива $_POST[] (содержащего значение, отправленные из registration.htm) и присваивает их скалярным переменным, с которыми будет проще работать. Затем создаются заголовки e-mail и вызывается функция mail(). Скалярные переменные передают функции необходимые параметры.
Дата добавления: 2015-04-19; просмотров: 866;