Главная страница
Навигация по странице:

  • Синтаксическая ошибка

  • Фатальная ошибка

  • Предупреждение

  • Строгое предупреждение

  • Развитие языков программирования растёт с большой скоростью


    Скачать 2.79 Mb.
    НазваниеРазвитие языков программирования растёт с большой скоростью
    АнкорKostern
    Дата28.04.2022
    Размер2.79 Mb.
    Формат файлаpdf
    Имя файлаKostelny_PHP-Junior-Kit.644079.pdf
    ТипДокументы
    #503693
    страница10 из 14
    1   ...   6   7   8   9   10   11   12   13   14
    ответ именно в формате 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;
    }
    // выводим содержание ошибка

    PHP: Junior Kit
    240
    echo "
    1   ...   6   7   8   9   10   11   12   13   14


    написать администратору сайта