PHP
Чтение данных запроса
GET , лучше всего предоставлять данные, необходимые для отображения страницы, и их можно использовать несколько раз (поисковые запросы, фильтры данных . ). Они являются частью URL-адреса, что означает, что они могут быть добавлены в закладки и часто используются повторно.
Запросы POST, с другой стороны, предназначены для отправки данных на сервер только один раз (контактные формы, формы входа . ). В отличие от GET, который принимает только ASCII, запросы POST также позволяют бинарные данные, включая загрузку файлов .
Вы можете найти более подробное объяснение их различий здесь .
Уязвимость данных запроса
Получение данных из суперглобальных переменных $ _GET и $ _POST без какой-либо проверки считается плохой практикой и открывает методы для пользователей для потенциального доступа или компрометации данных с помощью инъекций кода и SQL . Неверные данные должны быть проверены и отклонены, чтобы предотвратить такие атаки.
Данные запроса должны быть экранированы в зависимости от того, как они используются в коде, как указано здесь и здесь . В этом ответе можно найти несколько различных функций эвакуации для общих случаев использования данных.
Обработка ошибок загрузки файлов
$_FILES[«FILE_NAME»][‘error’] (где «FILE_NAME» — это значение атрибута имени входного файла, представленного в вашей форме) может содержать одно из следующих значений:
- UPLOAD_ERR_OK — Нет ошибки, файл загружен с успехом.
- UPLOAD_ERR_INI_SIZE — Загруженный файл превышает директиву upload_max_filesize в php.ini .
- UPLOAD_ERR_PARTIAL — загруженный файл превышает директиву MAX_FILE_SIZE, указанную в HTML-форме.
- UPLOAD_ERR_NO_FILE — файл не загружен.
- UPLOAD_ERR_NO_TMP_DIR — Отсутствует временная папка. (Из PHP 5.0.3).
- UPLOAD_ERR_CANT_WRITE — Не удалось записать файл на диск. (Из PHP 5.1.0).
- UPLOAD_ERR_EXTENSION — расширение PHP остановило загрузку файла. (Из PHP 5.2.0).
Основным способом проверки ошибок является следующее:
Чтение данных POST
Данные из запроса POST хранятся в суперглобальном $_POST в форме ассоциативного массива.
Обратите внимание, что доступ к несуществующему элементу массива генерирует уведомление, поэтому существование всегда следует проверять с помощью функций isset() или empty() или оператора null coalesce.
$from = isset($_POST["name"]) ? $_POST["name"] : "NO NAME"; $message = isset($_POST["message"]) ? $_POST["message"] : "NO MESSAGE"; echo "Message from $from: $message";
$from = $_POST["name"] ?? "NO NAME"; $message = $_POST["message"] ?? "NO MESSAGE"; echo "Message from $from: $message";
Чтение данных GET
Данные из запроса GET хранятся в суперглобальном $_GET в форме ассоциативного массива.
Обратите внимание, что доступ к несуществующему элементу массива генерирует уведомление, поэтому существование всегда следует проверять с помощью функций isset() или empty() или оператора null coalesce.
Пример: (для URL /topics.php?author=alice&topic=php )
$author = isset($_GET["author"]) ? $_GET["author"] : "NO AUTHOR"; $topic = isset($_GET["topic"]) ? $_GET["topic"] : "NO TOPIC"; echo "Showing posts from $author about $topic";
$author = $_GET["author"] ?? "NO AUTHOR"; $topic = $_GET["topic"] ?? "NO TOPIC"; echo "Showing posts from $author about $topic";
Чтение исходных данных POST
Обычно данные, отправленные в запросе POST, представляют собой структурированные пары ключ / значение с типом MIME- application/x-www-form-urlencoded . Однако для многих приложений, таких как веб-сервисы, вместо них необходимо отправить необработанные данные, часто в формате XML или JSON. Эти данные могут быть прочитаны с использованием одного из двух методов.
php://input — это поток, который обеспечивает доступ к необработанному тексту запроса.
$rawdata = file_get_contents("php://input"); // Let's say we got JSON $decoded = json_decode($rawdata);
$HTTP_RAW_POST_DATA — это глобальная переменная, содержащая необработанные данные POST. Он доступен только в том случае, если always_populate_raw_post_data директива always_populate_raw_post_data в php.ini .
$rawdata = $HTTP_RAW_POST_DATA; // Or maybe we get XML $decoded = simplexml_load_string($rawdata);
Эта переменная устарела с PHP версии 5.6 и была удалена в PHP 7.0.
Обратите внимание, что ни один из этих методов не доступен, если для типа содержимого задано значение multipart/form-data , которое используется для загрузки файлов.
Загрузка файлов с помощью HTTP PUT
PHP обеспечивает поддержку метода HTTP PUT, используемого некоторыми клиентами для хранения файлов на сервере. Запросы PUT намного проще, чем загрузка файлов с использованием запросов POST, и они выглядят примерно так:
PUT /path/filename.html HTTP/1.1
В ваш PHP-код вы тогда сделаете что-то вроде этого:
Также здесь вы можете прочитать интересные вопросы и ответы о получении файла через HTTP PUT.
Передача массивов POST
Обычно элемент HTML-формы, представленный в PHP, приводит к одному значению. Например:
Это приводит к следующему результату:
Однако могут быть случаи, когда вы хотите передать массив значений. Это можно сделать, добавив PHP-подобный суффикс к имени HTML-элементов:
Это приводит к следующему результату:
Array ( [foo] => Array ( [0] => bar [1] => baz ) )
Вы также можете указать индексы массива в виде чисел или строк:
Что возвращает этот вывод:
Array ( [foo] => Array ( [42] => bar [foo] => baz ) )
Этот метод можно использовать, чтобы избежать циклов обработки после массива $_POST , делая ваш код более компактным и более кратким.
- Начало работы с PHP
- APCu
- BC Math (бинарный калькулятор)
- Imagick
- IMAP
- JSON
- Loops
- PDO
- PHP MySQLi
- php mysqli affected rows возвращает 0, когда он должен возвращать положительное целое число
- PHP Встроенный сервер
- PHPDoc
- PSR
- SimpleXML
- SQLite3
- Streams
- URL-адрес
- UTF-8,
- WebSockets
- XML
- YAML в PHP
- Автозагрузка грунтовки
- Альтернативный синтаксис для структур управления
- Анализ HTML
- Асинхронное программирование
- Аутентификация HTTP
- Безопасность
- Буферизация вывода
- Вклад в PHP Core
- Внедрение зависимости
- Внесение изменений в Руководство по PHP
- Волшебные константы
- Волшебные методы
- Вывод значения переменной
- Выполнение по массиву
- Генераторы
- закрытие
- Защитите Remeber Me
- Интерфейс командной строки (CLI)
- Использование cURL в PHP
- Использование MongoDB
- Использование Redis с PHP
- Использование SQLSRV
- Итерация массива
- Как определить IP-адрес клиента
- Как разбить URL-адрес
- Класс Datetime
- Классы и объекты
- Клиент SOAP
- Комментарии
- Компилировать расширения PHP
- Компиляция ошибок и предупреждений
- Константы
- Контрольные структуры
- криптография
- кэш
- локализация
- Манипулирование массивом
- Манипуляции заголовков
- Массивы
- Машинное обучение
- Менеджер зависимостей композитора
- Многопоточное расширение
- многопроцессорная обработка
- Монго-PHP
- Область переменных
- Обработка изображений с помощью GD
- Обработка исключений и отчетов об ошибках
- Обработка нескольких массивов вместе
- Обработка файлов
- Общие ошибки
- операторы
- отладка
- Отправка электронной почты
- отражение
- переменные
- Переменные Superglobal PHP
- Печенье
- Поддержка Unicode в PHP
- Пространства имен
- Работа с датами и временем
- Развертывание докеров
- Регулярные выражения (regexp / PCRE)
- Рекомендации
- Рецепты
- Розетки
- Сервер SOAP
- Сериализация
- Сериализация объектов
- сессии
- Соглашения о кодировании
- Создание PDF-файлов в PHP
- Спектакль
- Строковый анализ
- Структуры данных SPL
- Тестирование устройства
- Тип жонглирования и нерегулярные проблемы сравнения
- Тип подсказки
- Типы
- Установка в средах Linux / Unix
- Установка среды PHP в Windows
- Фильтры и функции фильтра
- Форматирование строк
- функции
- Функции хеширования пароля
- Функциональное программирование
- Черты
- Чтение данных запроса
- Шаблоны проектирования
Отправка данных на сервер
Самым простым способом передачи данных на сервер приложению PHP извне представляет передача данных через строку запроса.
Строка запроса представляет набор параметров, которые помещаются в адресе после вопросительного знака. При этом каждый параметр определяет название и значение. Например, в адресе:
http://localhost/user.php?name=Tom&age=36
Часть ?name=Tom&age=36 представляет строку запроса, в которой есть два параметра name и age . Для каждого параметра определено имя и значение, которые отделяются знаком равно. Параметр name имеет значение «Tom», а параметр age — значение 36. Друг от друга параметры отделяются знаком амперсанда.
Например, определим следующий скрипт user.php со следующим содержимым:
if(isset($_GET["age"])) < $age = $_GET["age"]; >echo "Имя: $name
Возраст: $age"; ?>
Когда мы вводим в адресную строку браузера некий адрес и нажимаем на оправку, то серверу отправляется запрос типа GET . В PHP по умолчанию определен глобальный ассоциативный массив $_GET , который хранит все значения, передаваемые в запроса GET. Используя ключи передаваемых данных, мы можем из массива $_GET получить передаваемые значения.
При отправки строки запроса ключами в этом массиве будут названия параметров, а значениями — значения параметров.
Например, в строке запроса передается параметр name=Tom . Соответственно, чтобы получить значение параметра name из запроса, обращаемся по соответствующему ключу:
Однако стоит учитывать, что в адресной строке необязательно будет использоваться строка запроса или конкретно данный параметр. Поэтому перед получением значения параметра сначала смотрим, а передан ли вообще такой параметр:
Теперь обратимся к этому скрипту, например, так http://localhost/user.php?name=Tom&age=36 :