Устанавливаем на windows apache, mysql и php
Содержание:
- Структура URL адресов в админке
- Why using PHP Server Stacks?
- LAMP Server
- 5.1 Строка запроса (Request-Line).
- PHP $_SERVER
- Пример двойного редиректа
- Установка MySQL
- Four Essential tools for PHP Servers are:
- Параметры запроса
- Распаковка архива Apache
- Простой роутинг
- Как в PHP поменять заголовки и метод HTTP запроса
- Latest Magento Tips, Guides, & News
Структура URL адресов в админке
Обычно URL адреса в админке формируются по одной из следующих схем:
И сразу рассмотрим простой пример:
Итак, мы видим, что модулем здесь является products, а действием, к примеру, add. Что теперь с этим делать?
Если вы знакомы с ООП и MVC, тогда модулем для вас будет название класса, а действием — метод этого класса, который нужно запустить. Если действие не указано, то принято запускать метод под названием index.
Если вы ничего не поняли — воспринимайте модуль как название файла, который нужно подключить, а действие — как, собственно, действие, которое нужно выполнить.
Перепишем пример, написанный нами в единой точке входа, под новую схему URL:
Итак, мы берём 1-ый фрагмент URL и проверяем, существует ли в папке pages файл с таким названием.
Т.е. при переходе на страницу /test/test2 скрипт проверит существование файла /pages/test.php. Если файл есть — PHP выполнит этот файл, в противном случае выполнится файл /pages/404.php.
Как видите, при таком подходе нам больше не нужно прописывать соответствие URL-адресов и PHP-файлов. PHP сам будет искать нужный файл в папке pages по первому фрагменту URL.
Теперь осталось только создать файл pages/products.php. Сделаем небольшую заготовку:
Вот так выглядит обработка действий. Мы смотрим на второй фрагмент URL и ищем обработчик этого действия. Для каждого действия (add, update, delete) нужно прописать отдельный блок elseif.
Внутри обработчика add мы смотрим на то, каким методом пришёл запрос, GET или POST. Если GET — отображаем форму, если POST — добавляем товар.
Если вам не нравится вложенная проверка метода, можно сделать иначе. В файле index.php сохраним метод в отдельную переменную:
products.php
Готово. Да, если вам не нравится, что в коде 2 раза встречается одно и то же действие, только с разными методами, можете использовать немного упрощённую схему URL-адресов из фреймворка Laravel:
Добавление префикса /admin/ в URL
Немного изменим код index.php:
Теперь при запросе страницы /admin/products PHP будет искать файл с названием не products.php, а admin_products.php.
Переименуйте файл и не забудьте заменить в нём все $segments на $segments, поскольку в $segments теперь лежит модуль, а в $segments действие.
Why using PHP Server Stacks?
If you are a budding developer, you don’t know how frustrating it is to install a Web Server.
It does not end at web servers, developers also have to install PHP, MariaDB, and sometimes Pearl, Ruby and other programming languages.
You can download them separately, and then install them to a same directory. And then you have to activate each of them before running the local host.
Else, you can easily download a PHP server, that is already stacked with the PHP, a database, OS, and a web server. They are a one-click installer of various useful programs that a developer needs to create an environment for web app deployment.
However, there are various type of PHP servers, depending on the requirements of the developer.
Let’s look at them in detail.
LAMP Server
LAMP is an acronym for Linux, Apache, MySQL and PHP. If a developer wants to use Pearl instead of PHP, he can download the Pearl.
It is a group of open-source software downloaded and installed individually. LAMP is mainly associated with the developers who like to work on Linux.
Developers love the flexibility and creativity space that Linux offers. For beginners, the LAMP could be a little bit difficult. Various complicated settings could baffle a non-experienced person. But it is a popular stack for the past decade.
LAMP combination is a widely used PHP server. There is a vast ecosystem of LAMP on the internet.
Linux is the OS for LAMP, but you can use alternative components for your needs. There is also WAMP, MAMP, and WIMP. A different set of tools for a different kind of need.
5.1 Строка запроса (Request-Line).
Строка запроса (Request-Line) начинается с лексемы метода, затем
следует запрашиваемый URI (Request-URI), версия протокола и CRLF.
Эти элементы разделяются SP. В строке запроса (Request-Line) не
допустимы CR и LF, исключение составляет конечная
последовательность CRLF.
Request-Line = Method SP Request-URI SP HTTP-Version CRLF
5.1.1 Метод (Method).
Лексема метода указывает метод, который нужно применить к ресурсу,
идентифицированному запрашиваемым URI (Request-URI). Метод
чувствителен к регистру.
Method = "OPTIONS" ; | "GET" ; | "HEAD" ; | "POST" ; | "PUT" ; | "DELETE" ; | "TRACE" ; | extension-method extension-method = token
Список методов, применимых к ресурсу, может быть указан в поле
заголовка Allow (). Возврашаемый код состояния ответа
всегда сообщает клиенту, допустим ли метод для ресурса в настоящее
время, так как набор допустимых методов может изменяться
динамически. Серверам СЛЕДУЕТ возвратить код состояния 405 (Метод
не дозволен, Method Not Allowed), если метод известен серверу, но
не применим для запрошенного ресурса, и 501 (Не реализовано, Not
Implemented), если метод не распознан или не реализован сервером.
Список методов, известных серверу, может быть указан в поле
заголовка ответа Public ().
Методы GET и HEAD ДОЛЖНЫ поддерживаться всеми универсальными
(general-purpose) серверами. Остальные методы опциональны; однако,
если вышеупомянутые методы реализованы, то они ДОЛЖНЫ иметь
семантику, описанную в разделе 9.
5.1.2 Запрашиваемый URI (Request-URI).
Запрашиваемый URI (Request-URI) — это Единообразный Идентификатор
Ресурса (URL, ), который идентифицирует ресурс запроса.
Request-URI = "*" | absoluteURI | abs_path
Три опции для запрашиваемого URI (Request-URI) зависят от
характера запроса. Звездочка «*» означает, что запрос обращается
не к специфическому ресурсу, а к серверу непосредственно, и
допускается только в том случае, когда используемый метод не
обязательно обращается к ресурсу.
В качестве примера:
OPTIONS * HTTP/1.1
absoluteURI необходим, когда запрос производится через
прокси-сервер. Прокси-сервер перенаправляет запрос на сервер или
обслуживает его, пользуясь кэшем, и возвращает ответ
Обратите
внимание, что прокси-сервер МОЖЕТ переслать запрос другому
прокси-серверу или непосредственно серверу, определенному
absoluteURI. Чтобы избежать зацикливания запроса прокси-сервер
ДОЛЖЕН быть способен распознавать все имена сервера, включая любые
псевдонимы, локальные разновидности, и числовые IP адреса.
Request-Line может быть, например, таким:
GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1
Чтобы обеспечить переход к absoluteURI во всех запросах в будущих
версиях HTTP, все HTTP/1.1 серверы ДОЛЖНЫ принимать absoluteURI
в запросах, хотя HTTP/1.1 клиенты будут генерировать их только в
запросах к прокси-серверам.
Наиболее общая форма Request-URI — та, которая используется для
идентификации ресурса на первоначальном сервере или шлюзе. В этом
случае абсолютный путь URI (смотрите , abs_path)
ДОЛЖЕН быть передан как Request-URI, а сетевое расположение URI
(net_loc) ДОЛЖНО быть передано в поле заголовка Host. Для
последнего примера клиент, желающий получить ресурс
непосредственно с первоначального сервера должен создать TCP
соединение на 80 порт хоста «www.w3.org» и послать строки:
GET /pub/WWW/TheProject.html HTTP/1.1 Host: www.w3.org
Если прокси-сервер получает запрос без пути в Request-URI, и метод
запроса допускает форму запроса «*», то последний прокси-сервер в
цепочке запросов ДОЛЖЕН передать запрос, в котором Request-URI
равен «*». Например запрос
OPTIONS http://www.ics.uci.edu:8001 HTTP/1.1
OPTIONS * HTTP/1.1 Host: www.ics.uci.edu:8001
Request-URI передается в формате, определенном в .
Первоначальный сервер ДОЛЖЕН декодировать Request-URI, чтобы
правильно интерпретировать запрос. Серверам СЛЕДУЕТ отвечать на
недопустимые Request-URI соответствующим кодом состояния.
В запросах, которые передаются далее, прокси-сервера никогда НЕ
ДОЛЖНЫ перезаписывать часть «abs_path» запрашиваемого URI
(Request-URI), за исключением случая, отмеченного выше, когда
пустой abs_path заменяется на «*», независимо от внутренней
реализации прокси-сервера.
Обратите внимание: правило «ничто не перезаписывать»
предохраняет прокси-сервера от изменения значения запроса,
в котором первоначальный сервер неправильно использует не
зарезервированные символы URL для своих целей. Реализаторам
следует знать, что некоторые до-HTTP/1.1 прокси-сервера, как
известно, перезаписывали Request-URI.
PHP $_SERVER
$_SERVER is a PHP super global variable which holds information about headers,
paths, and script locations.
The example below shows how to use some of the elements in $_SERVER:
Example
<?php echo $_SERVER;echo «<br>»;
echo $_SERVER;echo «<br>»;echo $_SERVER;
echo «<br>»;echo $_SERVER;echo «<br>»;echo $_SERVER;echo «<br>»;echo $_SERVER;?>
The following table lists the most important elements that can go inside $_SERVER:
Element/Code | Description |
---|---|
$_SERVER | Returns the filename of the currently executing script |
$_SERVER | Returns the version of the Common Gateway Interface (CGI) the server is using |
$_SERVER | Returns the IP address of the host server |
$_SERVER | Returns the name of the host server (such as www.w3schools.com) |
$_SERVER | Returns the server identification string (such as Apache/2.2.24) |
$_SERVER | Returns the name and revision of the information protocol (such as HTTP/1.1) |
$_SERVER | Returns the request method used to access the page (such as POST) |
$_SERVER | Returns the timestamp of the start of the request (such as 1377687496) |
$_SERVER | Returns the query string if the page is accessed via a query string |
$_SERVER | Returns the Accept header from the current request |
$_SERVER | Returns the Accept_Charset header from the current request (such as utf-8,ISO-8859-1) |
$_SERVER | Returns the Host header from the current request |
$_SERVER | Returns the complete URL of the current page (not reliable because not all user-agents support it) |
$_SERVER | Is the script queried through a secure HTTP protocol |
$_SERVER | Returns the IP address from where the user is viewing the current page |
$_SERVER | Returns the Host name from where the user is viewing the current page |
$_SERVER | Returns the port being used on the user’s machine to communicate with the web server |
$_SERVER | Returns the absolute pathname of the currently executing script |
$_SERVER | Returns the value given to the SERVER_ADMIN directive in the web server configuration file (if your script runs on a virtual host, it will be the value defined for that virtual host) (such as someone@w3schools.com) |
$_SERVER | Returns the port on the server machine being used by the web server for communication (such as 80) |
$_SERVER | Returns the server version and virtual host name which are added to server-generated pages |
$_SERVER | Returns the file system based path to the current script |
$_SERVER | Returns the path of the current script |
$_SERVER | Returns the URI of the current page |
❮ Previous
Next ❯
Пример двойного редиректа
Для того, чтобы было понятно, о чем идет речь, приведу пример. Допустим, у вас настроен и добавление к урлу в конце слеш. То есть вы хотите такое преобразование:
http://site.ru/catalog -> https://site.ru/catalog
Допустим, у вас сначала был настроен редирект на https подобным образом:
server { listen 80; root /var/www/site.ru/public; location / { return 301 https://site.ru$request_uri; } }
А потом вас попросили добавить редирект всех урлов без слеша на тот же урл только со слешем на конце. Вы идете в секцию c listen 443 и добавляете редирект.
server { listen 443 http2; ................... location / { rewrite ^(*)$ $1/ permanent; ................... }
# curl -I -L http://site.ru/catalog HTTP/1.1 301 Moved Permanently Server: nginx Content-Type: text/html Content-Length: 162 Connection: keep-alive Location: https://site.ru/catalog HTTP/2 301 server: nginx content-type: text/html content-length: 162 location: https://site.ru/catalog/ HTTP/2 200 server: nginx content-type: text/html; charset=utf-8 vary: Accept-Encoding
На выходе у вас 2 редиректа вместо одного, что плохо для СЕО. Надо по возможности все реализовать в одном. В данном случае напрашивается простое и очевидное решение:
server { listen 80; server_name site.ru www.site.ru; root /var/www/site.ru/public; location / { return 301 https://site.ru$request_uri/; } }
Вроде бы все нормально. Теперь редирект будет автоматически добавлять слеш в конец запроса. Но проблемы начнутся со ссылками на медиа файлы. Например, запрос http://site.ru/catalog/img.png будет превращаться в https://site.ru/catalog/img.png, что нам совершенно не нужно. Чтобы это исправить, надо сделать так.
server { listen 80; server_name site.ru www.site.ru; location ~* ^.+.(js|css|png|jpg|jpeg|gif|webp|ico|woff|txt)$ { return 301 https://site.ru$request_uri; } location / { return 301 https://site.ru$request_uri/; } }
Теперь все будет нормально, так как location со статикой указан в виде регулярного выражения. В случае попадания запроса в указанное правило, будет выполнен редирект без слеша. Все остальное попадет в следующий префиксный /. То же самое можно сделать с помощью if и одного location, но c if работать будет медленнее. Там где можно обходиться без if, лучше его не использовать.
Установка MySQL
На следующей странице выбираем для скачивания mysql-installer-community:
В открывшемся окне кликаем по No thanks, just start my download:
Начнется загрузка файла для установки MySQL. Дожидаемся скачивания и запускаем установочный файл — в открывшемся окне выбираем Server only:
В следующем окне кликаем по Execute:
… и дожидаемся установки СУБД:
Откроется окно конфигурации MySQL — нажимаем Next:
Выбираем установку одиночного сервера MySQL:
Оставляем все значения по умолчанию для настроек сети:
Требуем сложные пароли:
Вводим дважды пароль для пользователя root:
* также, на данном этапе мы можем сразу добавить новых пользователей.
Устанавливаем СУБД как сервис и стартуем его:
Настройки готовы для применения — нажимаем Execute:
Дожидаемся применения настроек и кликаем по Next:
Настройка завершена:
Установка завершена — нажимаем Finish.
Сервер баз данных готов к использованию.
По умолчанию, PHP поддерживаем mysql — в этом можно убедиться на странице phpinfo, найдя раздел mysqlnd:
Four Essential tools for PHP Servers are:
- Operating System
- Web Server
- DBMS
- PHP
Let’s look at each one:
Operating System
Operating System is system software that manages computer hardware and various software.
The operating system helps you in communicating with the computer. Humans can’t use any computer that does not have any operating system.
Most popular computer operating systems are:
- Windows
- Linux
- Mac OS
Web Server
A Web server is a program that uses HTTP (Hypertext Transfer Protocol) to serve the files that form Web pages to users.
Popular Open Source Web Server are:
- Internet Information Service
- Apache HTTP Server
- LIGHTTPD
- NGINX
- Node.js
MariaDB and MySQL are the most popular Database Management Systems.
A DBMS does processing and managing of data.
PHP
Last but not least is PHP.
PHP is a server scripting language, developed to make dynamic web pages. The PHP interpreter executes PHP language.
What is Solution Stack?
Solution Stack or Software Stack is a set of various programs that are essential in creating a complete platform.
Параметры запроса
Мы привыкли, что на нашем сайте каждый PHP-сценарий отвечает за одну страницу. Посетитель сайта вводит в адресную строку путь, который состоит из имени домена и имени PHP-сценария. Например, так: .
Но как быть, если одна страница должна показывать разную информацию?
На сайте дневника наблюдений за погодой мы сделали отдельную страницу, чтобы показывать на ней информацию о погоде из истории за один конкретный день. То есть страница одна, но показывает разные данные, в зависимости от выбранного дня.
Также пользователи хотят добавить в закладки адреса страниц с нужными им днями. Получается, что имея только один сценарий сделать страницу, способную показывать дневник погоды за любой день невозможно? Вовсе нет!
Из чего состоит URI
URI — это уникальный идентификатор ресурса. Ресурс в нашем случае — это полный путь до страницы сайта. И вот как может выглядеть ресурс для показа погоды за конкретный день:
Разберем, из чего состоит этот URI.
Во-первых, здесь есть имя домена: .
Затем идёт имя сценария:
А всё что идёт после — это параметры запроса.
Параметры запроса — это как бы дополнительные атрибуты адреса страницы. Они отделяются от имени страницы знаком запроса. В примере выше параметр запроса только один: date=2017-10-30.
Имя этого параметра:, значение: .
Параметров запроса может быть несколько, тогда они разделяются знаком амперсанда:
В примере выше указывается два аргумента: дата и единица измерения температуры.
Параметры запроса как внешние переменные
Теперь в адресе страницы используются параметры запроса, но какая нам от этого польза? Она состоит в том, что если имя страницы вызывает к исполнению соответствующий PHP-сценарий, то параметры запроса превращаются в специальные внешние переменные в этом сценарии. То есть, если в адресе присутствуют такие параметры, то их легко получить внутри кода сценария и выполнить с ними какие-нибудь действия. Например, показать погоду за конкретный день в выбранных единицах измерения.
Получение параметров запроса
Если есть внешние переменные, то как их прочитать?
Все параметры запроса находятся в специальном, ассоциативном массиве , а значит сценарий, вызванный с таким адресом: будет иметь в этом массиве два значения с ключами и .
Запрос на получение данных за выбранный день выглядит так:
В первой строчке примера выше мы получаем значение параметра , а если он отсутствует, то используем текущую дату в качестве выбранного дня.Никогда не полагайтесь на существование параметра в массиве и делайте проверку либо функцией , либо как в этом примере.
В этом задании вы сможете потренироваться использовать .
Формирование URI с параметрами запроса
Иногда нужно совершить обратную операцию: сформировать адрес страницы, включив туда нужные параметры запроса из массива.
Скажем, на странице погодного дневника надо поставить ссылку на следующий и предыдущий день. Нужно также сохранить выбранную единицу измерений. То есть необходимо сохранить текущие параметры запроса, поменять значение одного из них (день), и сформировать новую ссылку.
Вот как это можно сделать:
Здесь мы использовали две функции:
- — получает имя текущего сценария;
- — преобразует ассоциативный массив в строку запроса.
Распаковка архива Apache
Открываем скаченный с веб-сервером архив и распаковываем (копируем) директорию «Apache24» в корень локального диска C:
Для базовой настройки веб-сервера Apache перейдем в директорию «C:\Apache24\conf\» и найдем файл «httpd.conf». Откроем данный файл в текстовом редакторе, просмотрим его и по необходимости внесем изменения. Большая часть файла состоит из комментарий и пояснений, начинающихся со знака # (решетка). В качестве текстового редактора могу посоветовать Notepad++.
Конфигурационный файл httpd.conf
httpd.conf — главный файл конфигурации веб-сервера Apache, содержащий директивы, управляющие работой веб-сервера.
Notepad++ — свободный текстовый процессор (текстовый редактор) с открытым исходным кодом для Windows с подсветкой синтаксиса большого количества языков программирования и разметки.
Изменим значения основных директив конфигурационного файла httpd.conf
ServerRoot "С:/Apache24"
каталог, в котором расположен веб-сервер
Listen 80
номер порта для веб-сервера
LoadModule rewrite_module modules/mod_rewrite.so
Для загрузки модуля mod_rewrite раскомментируем строку
AddDefaultCharset utf-8
значение кодировки по умолчанию
ServerAdmin admin@example.com
ServerName localhost:80
определяет имя и порт, который используется сервером для идентификации себя.
DocumentRoot "C:/Apache24/htdocs"
Назначаем корневую директорию управления сайтами
ErrorLog "logs/error.log"
расположение файла журнала ошибок.
LogLevel warn
уровень ошибок
CustomLog "logs/access.log" common
Установка сервиса (службы) Apache
Далее необходимо установить сервис Apache как службу. Для этого нам понадобится командная строка. Командная строка должна быть запущена от имени администратора.
Командная строка — позволяет вводить и выполнять команды операционной системы MS-DOS и другие компьютерные команды. Вводя команды, вы можете выполнять на компьютере различные задачи, не пользуясь мышью или сенсорным вводом.
Для того чтобы запустить командную строку необходимо нажать на кнопку «Пуск». В поле поиска введите «cmd» или «Командная строка», затем в списке результатов поиска наведите мышкой на найденный пункт («cmd» или «Командная строка»), щелкните по нему правой кнопкой мыши и выберите пункт «Запуск от имени администратора».
Перед нами появится окно консоли.
C:\Windows\system32>
Теперь необходимо перейти в директорию веб-сервера «bin» где находится файл «httpd.exe». Для этого используем команду «cd» и указываем полный путь до директории где находится файл «httpd.exe».
C:\Windows\system32>cd C:\Apache24\bin C:\Apache24\bin>
Для того, что бы установить сервис Apache как службу, необходимо выполнить команду
C:\Apache24\bin>httpd.exe -k install
При удачном выполнение установки получаем примерно такой ответ:
Installing the Apache2.4 service The Apache2.4 service is successfully installed. Testing httpd.conf.... Errors reported here must be corrected before the service can be started.
Перевод:
Установка службы Apache2.4
Служба Apache2.4 успешно установлен.
Тестирование httpd.conf ….
Ошибки, описанные здесь, должны быть исправлены и услуга может быть запущена.
Строка «The Apache2.4 service is successfully installed» означает, что служба установлена.
Если после строки «Errors reported here must be corrected before the service can be started» нет никаких сообщений, это означает, что в конфигурационных файлах не найдено критических ошибок и служба Apache24 запущена. Проверить ее работу можно открыв в браузере страницу localhost или страницу 127.0.0.1. Если страница по данным адресам открывается, то Вы добились желаемого, веб-сервер Apache установлен.
В случае, если после строки «Errors reported here must be …» присутствуют сообщения, то необходимо их исправить и перезапустить службу Apache. Обращаю Ваше на фразу «перезапустить», а не установить, ведь служба Apache24 уже установлена, просто она не может быть запущена, так как имеет ошибки в конфигурации.
Простой роутинг
Если единая точка входа настроена правильно, то при заходе по любому несуществующему URL-адресу, например /test должен запуститься файл index.php.
URL текущей страницы находится в переменной $_SERVER
Теперь мы можем написать очень простой роутер, который смотрит на текущий URL и подключает соответствующий скрипт:
Внесём ещё пару доработок. Во-первых, зачастую URL-адреса должны работать вне зависимости от наличия GET-параметров, поэтому вырежем их из URI:
Кроме этого, часто требуется получить доступ к определённой части URL. Для этого разобьём URL на части по слешу:
В переменной $segments для URL /products/15 будет лежать массив вида .
Теперь мы можем легко добавить маршруты для админки:
Это самый простой вариант роутинга. Не идеальный, конечно, но и не требующий знания регулярных выражений (хотя никто не мешает их использовать) и подключения сторонних библиотек.
При хранении URL адресов в базе данных роутинг будет выглядеть примерно так (реальный код зависит от библиотеки, которую вы используете для взаимодействия с БД):
Как в PHP поменять заголовки и метод HTTP запроса
В этой статье мы использовали утилиту cURL. Рассмотрим вариант, когда вы работаете с cURL через PHP — типичный случай для веб-серверов.
Что касается использования методов, отличных от GET, то для метода POST есть специальный параметр CURLOPT_POST, для метода PUT есть CURLOPT_PUT.
Для DELETE, CONNECT, HEAD и других более редки либо просто произвольных методов запроса используйте CURLOPT_CUSTOMREQUEST следующим образом (замените «МЕТОД» на нужный вам):
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "МЕТОД");
Создадим теперь файл methods.php:
sudo gedit /var/www/html/methods.php
и скопируем в него:
<?php $target_url = "localhost/headers.php"; $agent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36'; //$referer = 'REFERER HERE'; $cookies = ''; $ch = curl_init($target_url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "MIAL"); curl_setopt($ch, CURLOPT_USERAGENT, $agent); //curl_setopt($ch, CURLOPT_REFERER, $referer); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookies); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookies); //curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 'true'); $response_data = curl_exec($ch); if (curl_errno($ch) > 0) { die(PHP_EOL . PHP_EOL . 'Ошибка curl: ' . curl_error($ch) . PHP_EOL . PHP_EOL . print_r(curl_getinfo($ch)) . PHP_EOL . PHP_EOL); } elseif (empty($response_data)) { die(PHP_EOL . PHP_EOL . 'Returned empty result: ' . print_r(curl_getinfo($ch)) . PHP_EOL . PHP_EOL); } curl_close($ch); print_r (headers_list()) . PHP_EOL; echo $response_data . PHP_EOL;
Этот скрипт делает HTTP запрос указанным методом и показывает все полученные HTTP заголовки ответа.
Файл headers.php делаем таким:
<?php header('HTTP/1.1 599 ' . 'Just because we can!'); header ('HackWare: I am here!');
Запустим methods.php прямо в командной строке:
php /var/www/html/methods.php
В последнем примере мы добились:
- cURL в скрипте PHP использует пользовательский метод запроса MIAL — можно использовать для проверки, какие методы поддерживает сервер; ещё такие запросы не обнаруживаются фильтром «http» в Wireshark.
- ответ мы получили с произвольным комментарием в строке состояния и с заголовком с произвольным именем и содержанием.