Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab1_php.doc
Скачиваний:
3
Добавлен:
27.08.2019
Размер:
113.15 Кб
Скачать

Upload_err_ok – значение: 0. Отсутствие ошибки, признак успешной загрузки файла

UPLOAD_ERR_INI_SIZE – значение: 1. Размер файла превысил значение, указанное в php.ini

UPLOAD_ERR_FORM_SIZE – значение: 2. Размер файла превысил значение MAX_FILE_SIZE, указанное в HTML форме

UPLOAD_ERR_PARTIAL – значение: 3. Файл загружен частично

UPLOAD_ERR_NO_FILE – значение: 4. Файл не загружен

Upload_err_no_tmp_dir – значение: 6. Отсутствует директория для временного сохранения файла

UPLOAD_ERR_CANT_WRITE – значение: 7. Ошибка при записи файла на диск

Загруженный файл сохраняется во временной директории сервера, если не указано другое место директивой upload_tmp_dir в файле php.ini.

Обработка загруженного файла

Функция

bool is_uploaded_file(sting filename)

проверяет, является ли файл, имя которого передано ей в качестве аргумента загруженным на сервер с помощью протокола HTTP POST. Возвращает true в случае успешной проверки. Функция помогает удостовериться в том, что никакой злоумышленник не заставил Ваш скрипт обрабатывать файл, который ему обрабатывать не положено, например, /etc/passwd

Правильным аргументом для данной функции является имя файла на сервере $_FILES['userfile']['tmp_name'].

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

bool move_uploaded_file(string filename, string destination),

которая выполняет такую же проверку, как и функция is_uploaded_file() и вдобавок перемещает его в указанное вторым аргументом место.

Пример 2 Обработка файла, загружаемого на сервер

<?php

// In PHP versions earlier than 4.1.0, $HTTP_POST_FILES

// should be used instead of $_FILES.

$uploaddir = './uploads/';

$uploadfile = $uploaddir .

basename($_FILES['userfile']['name']);

echo '<pre>';

if (move_uploaded_file($_FILES['userfile']['tmp_name'],

$uploadfile)) {

echo "File is valid, and was successfully uploaded.\n";

print_r($_FILE);

} else {

echo "Possible file upload attack!\n";

}

echo 'Here is some more debugging info:';

print_r($_FILES);

print "</pre>";

?>

PHP скрипт, обрабатывающий загрузку файла на сервер, должен использовать одну из функций is_uploaded_file(), move_uploaded_file(), а также проверять отсутствие ошибок загрузки файла ($_FILES['userfile']['error']). Чтобы Вы не делали с загружаемым файлом, Вам необходимо удалить его после загрузки из временной директории.

Если при отправки данных формы файл не был выбран, значение $_FILES['userfile']['size'] будет равняться 0, а строка $_FILES['userfile']['tmp_name'] будет пустой.

2 Обработка данных формы

Переменные GET-запроса попадают в массив $_GET, переменные POST-запроса – в массив $_POST. Серверные переменные (тип запроса, IP-адрес клиента, именя скрипта и т.д.) – в $_SERVER.

Например, если имеется форма, содержащая 2 текстовых поля для ввода имени пользователя и его электронной почты, причем параметры name обоих полей равны fname и email соответственно, т.е.

<form action=’script.php’ method=’POST’>

<input type=’text’ name=’fname’>

<input type=’text’ name=’email’>

<input type=’submit’ name=’subOk’>

</form> то в скрипте script.php, обрабатывающем запрос формы будет определен глобальный массив $_POST и данные формы будут доступны в виде: $_POST[‘fname’] – значение, введенное пользователем в поле fname, $_POST[‘email’] – значение, введенное пользователем в поле email.

Переменная $_SERVER[‘REQUEST_METHOD’] принимает значение POST или GET в зависимости от типа запроса.

Пример 3 Обработка GET-запроса

Если пользователь ввел данные в форму (установлена переменная $_GET['name']), отображается приветствие. Форма отправляет данные «сама на себя», т.е. адресует их на текущий URL

<html>

<body>

<?

if (isset($_GET['name'])) {

echo '<h1>Привет, <b>' . $_GET['name'] . '</b></h1>!';

}

?>

<form action="<? echo $_SERVER['PHP_SELF']; ?>">

Введите Ваше имя: <input type="text" name="name">

<br>

<input type="submit" value="OK">

</form>

</body>

</html>

Пример 4 Обработка POST запроса

Если пользователь ввел данные в каждое поле, отображается приветствие. Если какое-либо из полей пропущено, предлагается ввести недостающие данные. Обратите внимание, что в этом случае HTML-код генерируется таким образом, что ввод пользователя не теряется (заполняются поля value)

<html>

<body>

<?

$name = isset($_POST['name']) ? $_POST['name'] : '';

$year = isset($_POST['year']) ? $_POST['year'] : '';

if (isset($_POST['name'], $_POST['year'])) {

if ($_POST['name'] == '') {

echo 'Укажите имя!<br>';

} else if ($_POST['year'] < 1900 || $_POST['year'] > 2004) {

echo 'Укажите год рождения! Допустимый диапазон значений:

1900..2004<br>';

} else {

echo 'Здравствуйте, ' . $_POST['name'] . '!<br>';

$age = 2006 - $_POST['year'];

echo 'Вам ' . $age . ' лет<br>';

}

echo '<hr>';

}

?>

<form method="post" action="<? echo $_SERVER['PHP_SELF']; ?>">

Введите Ваше имя: <input type="text" name="name"

value="<? echo $name; ?>">

<br>

Введите Ваш год рождения: <input type="text" name="year"

value="<? echo $year; ?>">

<input type="submit" value="OK">

</form>

</body>

</html>

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]