PHP
Загрузка файлов на сервер
Супер массив $_SERVER
Использование функции move_uploaded_file()
Переменные $_GET, $_POST, $_FILES и некоторые другие, являются суперглобальными переменными, потому, что они видны везде: они видны как в общем коде, так и внутри функций.
$_FILES - переменные файлов, загруженных по протоколу HTTP, то есть загруженных через форму методом POST (php.net).
Создание нового поля в форме
Для того, чтобы загрузить файл, нам неоходимо в форме создать соответствующее новое поле - это будет input с типом file - именно это тип позволяет прикреплять файл к полю формы, и дадим ему имя - name="file".
Но для того, чтобы форма могла отправить этот файл мы должны дописать для нее соответствующий атрибут, поскольку по умолчанию форма не может передавать файлы. Что бы она могла это сделать мы должны использовать атрибут enctype со значением multipart/form-data.
Распечатка массива $_FILES
Загружаем файл на сервер (php.net).
Так как вся иформация при отправке файла попадает в файл $_FILES, необходимо его распечатать.
В результате у нас появится новый многомерный массив, в котором содержится информация о загруженном файле .
Где - [file] - ключ массива, это ни что иное, как имя поля, которое мы указали в атрибуте name="file"
Использование функции move_uploaded_file()
Создадим папку upload.
Чтобы переместить, сохранить файл по указанному адресу в созданную нами папку (upload), мы используем функцию move_uploaded_file (php.net)- которая перемещает загруженный файл в новое место.
Описание функции:
move_uploaded_file ( $filename , $destination )
- $filename - путь к загруженному файлу,
- $destination - путь, по которому необходимо переместить файл.
В нашем случае - откуда берем:
- обращаемся к массиву $_FILES,
- внутри него ключ - 'file',
- и внутри его идет - 'tmp_name',
то есть: $_FILES ['file']['tmp_name'] в первом параметре,
и куда мы его будем отправлять:
- отправляем его в папку upload,
- пусть он будет с оригинальным именем, которое лежит в ключе 'name' массива 'file',
то есть: 'upload/' . $_FILES ['file']['name'] во втором параметре.
Если мы хотим загрузить файл под произвольным именем, то вместо $_FILES['file']['name'] запишем 'upload/test.jpg', где test.jpg - будет новое имя файла.
Файл index.php:
-- файл index.php --
<?php
(-1);
if ( isset ( $_POST ['send'])){
echo '<pre>';
print_r ( $_POST );
echo '<pre>';
}
// распечатываем файл $_FILES
// если у нас не пуст массив $_FILES, то мы его распечатаем
if (! empty ( $_FILES )){
echo '<pre>';
print_r ( $_FILES );
echo '<pre>';
}
// использование функции move_uploaded_file() для перемещения загруженного файла
( $_FILES ['file']['tmp_name'], 'upload/' . $_FILES ['file']['name']);
?>
<!doctype html>
<html>
<head>
<meta charset ="UTF-8">
<title> Document </title>
</head>
<body>
<!-- дописываем для формы атрибут enctype со значением "multipart/form-data" -->
<form method= "post" action= "" enctype= "multipart/form-data">
<!-- добавим еще одно поле input, с типом type="file" и с именем name="file" -->
<p>
<input type="file" name="file" >
</p>
<p>
< button type="submit" name="send" value="test"> Send </button>
</p>
</form>
<hr>
</body>
</html>
Обновляем страницу
Выбираем файл (Обзор)
Отправляем и распечатываем файл (Send)
В распечатке массива $_FILES содержится информация о загруженном файле:
Результат работы распечатки массива $_FILES:
Array
(
В ключе массива[file] - имя, которое мы указали в атрибуте: name="file":
[file] => Array
(
В ключ [name] попадает оригинальное имя файла
[name] => 2.jpg
Майн-тип файла
[type] => image/jpeg
Путь к временному файлу на сервере
[tmp_name] => C:\OSPanel\userdata\temp\phpCE3B.tmp
Числовые коды ошибок (код=0 - ошибок нет)
[error] => 0
Размер в байтах переданного файла
[size] => 388001
)
)
Супер массив $_SERVER
(php.net)
В этом массиве находится вся информация о сервере и среде исполнения. Мы можем получить к каждому из этих элементов массива доступ.
Например:
'PHP_SELF' - имя файла скрипта, который сейчас выполняется, относительно корня документов.
'SERVER_NAME' - имя хоста, на котором выполняется текущий скрипт.
'QUERY_STRING' - строка запроса, если есть, через которую была открыта страница.
Все, что идет после вопросительного знака в строке запроса - все это попадает в QUERY_STRING.
'DOCUMENT_ROOT' - директория корня документов.
'HTTP_HOST' - содержимое заголовка Host: из текущего запроса, если он есть.
'HTTP_REFERER' - адрес страницы (если есть - надо проверять), с которой браузер пользователя перешёл на эту страницу - очень полезеная возможность для статистики или для того, чтобы отправить пользователя на эту же страницу.
Создадим в нашей папке новый файл test.php и в нем дадим ссылку на наш файл
- lesson18.php, что бы мы пришли со страницы test.
Переходим на файл test.php и нажимаем нашу ссылку.
'REMOTE_ADDR' - IP-адрес пользователя.
'REQUEST_URI' - URI, который был предоставлен для доступа к этой странице. Например, '/index.html'.
<?php
echo '<pre>';
( $_SERVER);
echo '</pre>';
// выведет асоциативный массив, который содержит всю информацию
// о сервере и среде исполнения
echo $_SERVER['PHP_SELF'];
// выведет: /18/index.php - путь к нашему скрипту
echo '<br>';
echo $_SERVER['SERVER_NAME'];
// выведет имя хоста (phplessons)
echo '<br>';
echo $_SERVER['QUERY_STRING'];
// выведет: все, что идет после вопросительного знака в строке запроса (пусто)
echo '<br>';
echo $_SERVER['DOCUMENT_ROOT'];
// выведет: C:/OSPanel/domains/phplessons
echo '<br>';
echo $_SERVER ['HTTP_HOST'];
// совпадает с SERVER_NAME - выведет имя хоста(phplessons)
echo '<br>';
echo $_SERVER ['HTTP_REFERER'];
// выведет: http://phplessons/ - с этого адресса мы пришли на нашу страницу
echo '<br>';
echo $_SERVER ['REMOTE_ADDR'];
// выведет: 127.0.0.1
echo '<br>';
echo $_SERVER ['REQUEST_URI'];
// выведет: /18/ (URI, который был предоставлен для доступа к этой странице)
echo '<br>';
?>
Структура файлов урока
Наверх Наверх