Развитие языков программирования растёт с большой скоростью
Скачать 2.79 Mb.
|
ответ именно в формате JSON-данных. В такой способ мы задали заголовок, после чего выполнили запрос и получили данные в формате JSON. Конечно же можно было присвоить переменную полученным данных после чего взять и декодировать их для использования. Но для того чтобы получить какие-то JSON данные через сеть можно также воспользоваться расширением cURL. cURL имеет свой набор функций которые мы можем использовать для того чтобы работать с запросами. Например, вот как можно получать данные об герое по номер 5 на SWAPI с помощью cURL: $curl = curl_init(); // Запускаем переменную для которой будет использован cURL $url = "https://swapi.co/people/5"; PHP: Junior Kit 230 curl_setopt_array($curl, array( CURLOPT_URL => $url, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_HTTPHEADER => array( "content- type: application/json", ), )); $response = curl_exec($curl); // Получаем ответ после запроса в виде JSON данных $err = curl_error($curl); // Если будет ошибка то данная переменная получит её значение curl_close($curl); // Завершаем запрос if ($err) { exit($err); } else { echo $response; } ?> Теперь я пожалуй объясню как работает этот немного сложный код. Во-первых, мы создали переменную $curl которая использовалась для создания запроса. Дальше мы задали все параметры для запроса с помощью функции curl_setopt_array(). Внутри функции указаны такие параметры как: 1. URL к которому мы делаем запрос. 2. Версия HTTP протокола использующая в запросе. 3. HTTP-метод использующий в запросе. 4. Параметры для заголовка HTTP-запроса. PHP: Junior Kit 231 Дальше после указания всех этих параметров мы получаем ответ функции в переменную $response с помощью функции curl_exec(). Точнее мы импортировали ответ в эту переменную с помощью этой функции. Если у нас будет ошибка, то переменная $err получит её значение с помощью вызова функции curl_error(). В конце мы завершаем наш запрос с помощью функции curl_close(). И уже дальше идет логическая конструкция суть которой заключается в том что мы просто выводим либо ошибку(если она у нас есть), либо мы выводим ответ полученный после успешного запроса. Это также способ, с помощью которого можно получать данные. Но важно также сказать, что данные можно не только получать с помощью всех этих функций, но также и отправлять их. Если запрос прошёл успешно и вы получили ответ в переменную $response, то тогда можно декодировать информацию которая находиться в этой переменной, а все потому что ответ от SWAPI мы получили в виде JSON- данных. Когда мы декодируем ответ, то мы сможем обращаться к этим данным, только они будут представлены в виде простого массива. Конечно же можно и отправлять данные с помощью cURL. Только тогда уже надо поменять HTTP-метод который используется в запросе, а также указать в параметрах для запроса какие именно данные надо отправить в формате JSON. Вот код-пример, в котором идет отправка данных на локальный хост: $curl = curl_init(); $url = "localhost/test/index.php"; // Конечно же данный код работал бы если реально существовала такая папка которая имела бы этот файл. PHP: Junior Kit 232 // И кроме этого могла тажке обрабатывать все эти JSON запросы. $arr = array( "title" => "Super Post", "info" => "It’s super nice and interesing post", "authors" => array( "SuperUser1234", "Gordon", "RabbitMan", ) ); curl_setopt_array($curl, array( CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSOMREQUEST => "POST", // Заметьте что здесь уже другой метод HTTP запроса CURLOPT_POSTFIELDS => json_encode($arr), // Передаем массив из данными которые хотим передать в формате JSON CURLOPT_HTTPHEADER => array("content-type: application/json"), )); $response = curl_exec($curl); // Получаем ответ $err = curl_error($curl); curl_close($curl); // Завершаем запрос PHP: Junior Kit 233 if ($err) { exit($err); } else { echo $response; } ?> Вы можете здесь заметить новый параметр в массиве для параметров cURL, это CURLOPT_POSTFIELDS. В него мы передали массив данных, который мы сразу же кодируем в JSON данные. Сразу хочу сказать что это все просто пример того как можно передавать данные по сети в формате JSON. Поэтому не пробуйте тестировать код, поскольку будет ошибка об том что такой то и такой то файл не найден. Помните как мы с вами работали с HTTP через ARC? Так вот, теперь вы можете попробовать протестировать SWAPI внутри этого приложения и добавить даже что то свое в HTTP запрос. А давайте сейчас вернемся к нашей функции file_get_contents() . Кроме того чтобы с помощью этой функции можно доставать данные, то можно также и отправлять данные прямо как в cURL. Это даже логически выходит, поскольку остается только заменить метод и добавить поле с данными, которые мы хотим отправить. Вот например код в котором показано отправление данных с помощью file_get_contents(): $data = array( "book" => "PHP Junior Kit", "readed" => "27.07.2018", "user" => "CodeMan" ); $options = array( PHP: Junior Kit 234 "method" => "POST", // Выбираем метод для запроса "header" => "Content-Type: application/json", "content" => json_encode($data) // Указываем данные которые хотим отправить ); $context = stream_context_create(array("http" => $options)); $url = "localhost/test/test.php"; echo file_get_contents($url, false, $context); ?> Объяснять весь этот код не буду поскольку вы уже встречались с похожим в начале этого подраздела. Все важные моменты закомментированы и можете их прочитать, если вы что то не поняли. Кроме того что с помощью таких запросов вы можете получать содержимое страницы, вы можете также получать Cookies. На этом я завершу этот краткий раздел и мы сделаем заключение. Заключение В этом разделе мы с вами изучили, что такое JSON и как можно делать запросы. Обмениваться данными с помощью JSON легко, но надо не забывать об безопасности и шифровании если вы будете передавать какие-то важные данные. Хотя конечно же если это какие-то очень секретные данные то JSON лучше не использовать, а использовать другие способы для того чтобы отправлять и шифровать безопасно данные. Я завершу этот раздел, и конечно же, как и в каждом конце раздела попрошу читателя попрактиковаться с материалом который был PHP: Junior Kit 235 показан в этом разделе. А лучше ответить на вопросы и выполнить упражнения которые показаны ниже. Вопросы и упражнения для самоконтроля 1. Что такое JSON и для чего он нужен? 2. Какие есть способы передачи данных с помощью JSON? 3. Найдите другие ресурсы на которых вы сможете попрактиковаться работать с JSON. То есть такие как например Star Wars API. 4. Зачем нужны первых три параметра функции file_get_contents()? 5. Как задаются параметры для HTTP-запроса в функции file_get_contents()? 6. Как выглядит массив в массив в JSON’е? 7. Как инициализовать объект для cURL? 8. Для чего нужен параметр CURLOPT_POSTFIELDS в функции curl_setopt_array()? 9. Как вы сделаете так, чтобы в HTTP запросе передавались именно JSON данные? PHP: Junior Kit 236 15 Ошибки в коде Часто когда вы пишите программы и потом их запускаете, то может вылететь ошибка. Когда вы будете работать с какими то большими проектами, то часто вы будете получать не одну ошибку. И анализировать данные по отдельности не очень эффективно, поэтому надо научиться управлять ошибками в коде чтобы выводились все нужные данные для анализа, вместо того чтобы делать это вручную. Поэтому речь в этом разделе пойдет об том как управлять ошибками, а также выводит нужные данные об коде если у нас будет определенная ошибка. 15.1 Виды ошибок Думаю, что читатель на протяжении данной книги уже получал какие-нибудь ошибки во время изучения программирования на РНР. Кроме того что мы можем с вами наблюдать за тем как выводятся ошибки, мы можем также с ними работать. Простым примером работы с ошибками являться возможность поменять место для вывода ошибок. Или например можно сохранять логи с ошибками которые выводятся. Это полезно тогда когда нам надо хранить историю об ошибках. Можно также отключить показ ошибок, если будет потребность в этом. Вывод ошибок можно настроить через файлы конфигурации браузера. И запись логов также можно сразу же включить через файлы конфигурации браузера. Но давайте поговорим, о том, какие существуют виды ошибок, поскольку на протяжении этой книги я не говорил какие именно существуют ошибки. PHP: Junior Kit 237 ● Синтаксическая ошибка. Ошибка такого типа часто возникает когда вы например забыли поставить точку с запятой в конце команды. Или например вы забыли поставить фигурную скобку в логической конструкции. ● Фатальная ошибка. Очень серьезные ошибки которые могут возникнуть, например, при вызове несуществующей функции. Программа конечно же от такой ошибки останавливает свою работу. ● Предупреждение. Это уже не ошибка, а что то в роде небольших рекомендаций, которые мы можем получить от РНР. При предупреждении программа не останавливает свою работу. Простым примером предупреждения может быть ситуация когда мы забыли добавить все параметры в вызываемую функцию. ● Замечание. Это также свое родная рекомендация, которая возникает, например, когда мы хотим вывести переменную которая ещё не была создана. ● Строгое предупреждение. Возникает, тогда когда мы хотим воспользоваться устаревшими средствами. Например, устаревшей функция, которая уже не используется. Кроме этих видов ошибок, есть также несколько констант ошибок определенных в РНР: ● E_ERROR - тип фатальных ошибок. При такой ошибке работа программы сразу прекращается. ● E_WARNING - предупреждение для программиста, выполнение программы не останавливается. ● E_PARSE - ошибка возникающая во время компиляции программы. ● E_USER_WARNING - замечание для пользователя. Не представляет из себя какую то критичную ошибку. PHP: Junior Kit 238 ● E_COMPILE_WARNING - предупреждение которое создаеться при компиляции. Вот такие есть виды ошибок, которые вам надо знать. Переходим к самому управлению ошибками в РНР. Но перед этим скажу, что самым простым способом устранения синтаксических ошибок это использовать редакторы кода. Как например Sublime Text о котором я говорил в начале книги. Конечно же есть намного мощнее инструменты которые в несколько раз расширяют возможности. Например, можно также воспользоваться очень популярным и хорошим, но платным IDE - Web Storm. 15.2 Управление ошибками Для начала нам надо включить отслеживание ошибок с помощью функции error_reporting(), для того чтобы мы могли видеть любые ошибки: ?> Теперь мы сможем видеть любые ошибки. Хорошо, а теперь переходим к самому управлению. Первая функция с которой мы с вами познакомимся это будет set_error_handler, которая устанавливает пользовательский обработчик ошибок. Функция имеет 5 параметров. Внизу показан список этих параметров: ● errno - тип ошибки, указывается в виде числа. ● errstr - содержит сообщение об ошибке. ● errfile - необязательный параметр, который содержит в себе имя файла, в котором произошла ошибка. PHP: Junior Kit 239 ● errline - необязательный параметр, содержащий номер строки в котором произошла ошибка. ● errcontext - также необязательный параметр, содержащий переменные в области видимости где произошла ошибка. Самым простым примером использования этой функции, является функция, которая использует данную функцию для создания обработчика ошибок, вот похожий код с примером который можно найти также в документации разработчиков: // функция для создания обработчика ошибок function myHandler($level, $message, $file, $line, $context) { // в логической конструкции определяем вывод данных в зависимости от вида ошибки switch ($level) { case E_WARNING: $type = 'Warning'; break; case E_NOTICE: $type = 'Notice'; break; default; // Если уже нету никакой ошибки, то передам работу самому РНР return false; } // выводим содержание ошибка |