<!DOCTYPE html>
<html class="h-100" data-bs-theme="light" data-mantine-color-scheme="light" lang="ru" prefix="og: https://ogp.me/ns#">
<head>
<meta content="width=device-width, initial-scale=1.0" name="viewport">
<meta content="IE=Edge" http-equiv="X-UA-Compatible">
<link crossorigin="true" href="https://cdn.hexlet.io" rel="preconnect">
<link href="https://mc.yandex.ru" rel="preconnect">
<meta content="aa2vrdtq64dub8knuf83lwywit311w" name="facebook-domain-verification">
<link href="/favicon.ico" rel="icon" sizes="any">
<link href="/favicon.svg" rel="icon" type="image/svg+xml">
<link href="/apple-touch-icon.png" rel="apple-touch-icon">
<link href="/manifest.webmanifest" rel="manifest">
<script>
//<![CDATA[
window.gon={};gon.ym_counter="25559621";gon.is_bot=true;gon.applications={};gon.current_user={"id":null,"last_viewed_notification_id":null,"email":null,"state":null,"first_name":"","last_name":"","created_at":"2026-02-26 17:31:43 UTC","current_program":null,"current_team":null,"full_name":"","guest":true,"can_use_paid_features":false,"is_hexlet_employee":false,"sanitized_phone_number":"","can_subscribe":true,"can_renew_education":false};gon.token="P9b_M9FemBUgpFjsbQ6SSsTCraT2Sbwg_gtlugFhGZHQBzQEIyA1dZbnfHRhAWI9BMuADv5-QoJD6__uU2b-_w";gon.locale="ru";gon.language="ru";gon.theme="light";gon.rails_env="production";gon.mobile=false;gon.google={"analytics_key":"UA-1360700-51","optimize_key":"GTM-5QDVFPF"};gon.captcha={"google_v3_site_key":"6LenGbgZAAAAAM7HbrDbn5JlizCSzPcS767c9vaY","yandex_site_key":"ysc1_Vyob5ZPPUdPBsu0ykt8bVFdzsfpoVjQChLGl2b4g19647a89","verification_failed":null};gon.social_signin=false;gon.typoreporter_google_form_id="1FAIpQLSeibfGq-KvWQ2Fyru-zkFFRVTLBuzXAHAoEyN1p49FtDmNoNA";
//]]>
</script>
<meta charset="utf-8">
<title>Веб внутри PHP | Ключевые аспекты веб-разработки на PHP</title>
<meta name="description" content="Веб внутри PHP / Ключевые аспекты веб-разработки на PHP: Знакомимся с ключевым отличием PHP от других языков программирования">
<link rel="canonical" href="https://ru.hexlet.io/courses/php-overview-of-web-development/lessons/web-in-php/theory_unit">
<meta name="robots" content="noarchive">
<meta property="og:title" content="Веб внутри PHP">
<meta property="og:title" content="Ключевые аспекты веб-разработки на PHP">
<meta property="og:description" content="Веб внутри PHP / Ключевые аспекты веб-разработки на PHP: Знакомимся с ключевым отличием PHP от других языков программирования">
<meta property="og:url" content="https://ru.hexlet.io/courses/php-overview-of-web-development/lessons/web-in-php/theory_unit">
<meta name="csrf-param" content="authenticity_token" />
<meta name="csrf-token" content="ZWMMUwSab66ccprVyBIsFNLlkigZV3iFxanlHavY9SaKssdk9uTCzioxvk3EHdxjEuy_ghFghid4SX9J-d8SSA" />
<script src="/vite/assets/inertia-INZxX8jp.js" crossorigin="anonymous" type="module"></script><link rel="modulepreload" href="/vite/assets/chunk-DsPFFUou.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/preload-helper-BJ4cLWpC.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/init-nkZBEvfU.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/ahoy-DrlRQ-1D.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/analytics-6pOtQ3OW.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/ErrorFallbackBlock-naDSYSy9.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Surface-DL2bpZA-.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/gon-D3e4yh1x.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/mantine-CGMYrt2Y.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/utils-DRqSHbQE.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/routes-CCH8ilKF.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/extends-C-EagtpE.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/inheritsLoose-BBd-DCVI.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/objectWithoutPropertiesLoose-DRHXDhjp.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/index.esm-DAqKOkZ0.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Button-CGPUux8l.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/CloseButton-D1euiPao.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Group-BX48WcuU.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Loader-BQEY8g6v.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Modal-Cy3HByv7.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/OptionalPortal-1Hza5P2w.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Stack-CtjJzfw4.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Textarea-Ck64llAy.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Box-B5-OOzBf.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/DirectionProvider-Dc9zdUke.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/events-DJQOhap0.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/use-reduced-motion-D2owz4wa.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/use-disclosure-zKtK5W1r.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/use-hotkeys-Cnc_Rwkb.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/random-id-DOQyszCZ.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/notifications.store-C-3AFSMn.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/exports-C_MrNx_T.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/axios-BEvgo0ym.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/dayjs.min-BkKovM-s.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/i18next-BlSq9s7B.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/client-U9M77rxp.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/react-dom-DaLxUz_h.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/useTranslation-Bx1Cdrkz.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/compiler-runtime-6XxiPFnt.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/jsx-runtime-CwjcCKJi.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/react-CkL4ZRHB.js" as="script" crossorigin="anonymous">
<link rel="stylesheet" href="/vite/assets/application-BqhCP46M.js" />
<script src="/vite/assets/application-Df9RExpe.js" crossorigin="anonymous" type="module"></script><link rel="modulepreload" href="/vite/assets/chunk-DsPFFUou.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/autocomplete-VMNbxKGl.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/routes-CCH8ilKF.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/createPopper-C3aM9r1M.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/js.cookie-D1-O8zkX.js" as="script" crossorigin="anonymous"><link rel="stylesheet" href="/vite/assets/application-C8HjmMaq.css" media="screen" />
<script>
window.ym = function(){(ym.a=ym.a||[]).push(arguments)};
window.addEventListener('load', function() {
setTimeout(function() {
ym.l = 1*new Date();
ym(window.gon.ym_counter, "init", {
clickmap: true,
trackLinks: true,
accurateTrackBounce: true,
webvisor: true
});
// Загружаем скрипт
var k = document.createElement('script');
k.async = 1;
k.src = 'https://mc.yandex.ru/metrika/tag.js';
document.head.appendChild(k);
ym(window.gon.ym_counter, 'getClientID', function(clientID) {
window.ymClientId = clientID;
});
}, 1500);
});
</script>
<!-- Google Tag Manager - deferred -->
<script>
// dataLayer stub сразу — пуши работают до загрузки скрипта
window.dataLayer = window.dataLayer || [];
// Сам скрипт — отложенно после load
window.addEventListener('load', function() {
setTimeout(function() {
dataLayer.push({'gtm.start': new Date().getTime(), event: 'gtm.js'});
var j = document.createElement('script');
j.async = true;
j.src = 'https://www.googletagmanager.com/gtm.js?id=GTM-WK88TH';
document.head.appendChild(j);
}, 1500);
});
</script>
<!-- End Google Tag Manager -->
</head>
<body>
<noscript>
<div>
<img alt="" src="https://mc.yandex.ru/watch/25559621" style="position:absolute; left:-9999px;">
</div>
</noscript>
<header class="sticky-top bg-body">
<nav class="navbar navbar-expand-lg">
<div class="container-xxl">
<a class="navbar-brand" href="/"><img alt="Логотип Хекслета" height="24" src="https://ru.hexlet.io/vite/assets/logo_ru_light-BpiEA1LT.svg" width="96">
</a><button aria-controls="collapsable" aria-expanded="false" aria-label="Меню" class="navbar-toggler border-0 mb-0 mt-1" data-bs-target="#collapsable" data-bs-toggle="collapse">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="collapsable">
<ul class="navbar-nav mb-lg-0 mt-lg-1">
<li class="nav-item dropdown">
<button aria-haspopup class="btn nav-link" data-bs-toggle="dropdown" type="button">
Все курсы
<span class="bi bi-chevron-down align-middle ms-1"></span>
</button>
<ul class="dropdown-menu">
<li>
<a class="dropdown-item d-flex py-2" href="/courses"><div class="fw-bold me-auto">Все что есть</div>
<div class="text-muted">117</div>
</a></li>
<li>
<hr class="dropdown-divider">
</li>
<li class="dropdown-item">
<b>Популярные категории</b>
</li>
<li>
<a class="dropdown-item py-2" href="/courses_devops">Курсы по DevOps
</a></li>
<li>
<a class="dropdown-item py-2" href="/courses_data_analytics">Курсы по аналитике данных
</a></li>
<li>
<a class="dropdown-item py-2" href="/courses_programming">Курсы по программированию
</a></li>
<li>
<a class="dropdown-item py-2" href="/courses_testing">Курсы по тестированию
</a></li>
<li>
<hr class="dropdown-divider">
</li>
<li class="dropdown-item">
<b>Популярные курсы</b>
</li>
<li>
<a class="dropdown-item py-2" href="/programs/devops-engineer-from-scratch">DevOps-инженер с нуля
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/go">Go-разработчик
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/java">Java-разработчик
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/python">Python-разработчик
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/qa-auto-engineer-java">Автоматизатор тестирования на Java
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/data-analytics">Аналитик данных
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/frontend">Фронтенд-разработчик
</a></li>
</ul>
</li>
<li class="nav-item dropdown">
<button aria-haspopup class="btn nav-link" data-bs-toggle="dropdown" type="button">
О Хекслете
<span class="bi bi-chevron-down align-middle"></span>
</button>
<ul class="dropdown-menu bg-body">
<li>
<a class="dropdown-item py-2" href="/pages/about">О нас
</a></li>
<li>
<a class="dropdown-item py-2" href="/blog">Блог
</a></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://special.hexlet.io/hse-research" role="button">Результаты (Исследование)
</span></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://career.hexlet.io" role="button">Хекслет Карьера
</span></li>
<li>
<a class="dropdown-item py-2" href="/testimonials">Отзывы студентов
</a></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://t.me/hexlet_help_bot" role="button">Поддержка (В ТГ)
</span></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://special.hexlet.io/referal-program/?promo_creative=priglasite-druzei&promo_name=referal-program&promo_position=promo_position&promo_start=010724&promo_type=link" role="button">Реферальная программа
</span></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://special.hexlet.io/certificate" role="button">Подарочные сертификаты
</span></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://hh.ru/employer/4307094" role="button">Вакансии
</span></li>
<li>
<span class="dropdown-item d-flex external-link" rel="noopener noreferrer nofollow" data-href="https://b2b.hexlet.io" data-target="_blank" role="button">Компаниям
</span></li>
<li>
<span class="dropdown-item d-flex external-link" rel="noopener noreferrer nofollow" data-href="https://hexly.ru/" data-target="_blank" role="button">Колледж
</span></li>
<li>
<span class="dropdown-item d-flex external-link" rel="noopener noreferrer nofollow" data-href="https://hexlyschool.ru/" data-target="_blank" role="button">Частная школа
</span></li>
</ul>
</li>
<li><a class="nav-link" href="/subscription/new">Подписка</a></li>
</ul>
<ul class="navbar-nav flex-lg-row align-items-lg-center gap-2 ms-auto">
<li>
<a class="nav-link" aria-label="Переключить тему" href="/theme/switch?new_theme=dark"><span aria-hidden="true" class="bi bi-moon"></span>
</a></li>
<li>
<span data-target="_self" class="nav-link external-link" data-href="/u/new" role="button"><span>Регистрация</span>
</span></li>
<li>
<span data-target="_self" class="nav-link external-link" data-href="https://ru.hexlet.io/session/new" role="button"><span>Вход</span>
</span></li>
</ul>
</div>
</div>
</nav>
</header>
<div class="x-container-xxxl">
</div>
<main class="mb-6 min-vh-100 h-100">
<link rel="preload" as="image" href="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6Mzk5MiwicHVyIjoiYmxvYl9pZCJ9fQ==--e9d0f30948ea766a7e6bc3e3d56c192344d45fb8/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Programming-cuate%20(1).png"/><link rel="preload" as="image" href="/vite/assets/development-BVihs_d5.png"/><div id="app" data-page="{"component":"web/courses/lessons/theory_unit","props":{"errors":{},"locale":"ru","language":"ru","httpsHost":"https://ru.hexlet.io","host":"ru.hexlet.io","colorScheme":"light","auth":{"user":{"id":null,"last_viewed_notification_id":null,"email":null,"state":null,"first_name":"","last_name":"","created_at":"2026-02-26T17:31:42.990Z","current_program":null,"current_team":null,"full_name":"","guest":true,"can_use_paid_features":false,"is_hexlet_employee":false,"sanitized_phone_number":"","can_subscribe":true,"can_renew_education":false}},"cloudflareTurnstileSiteKey":"0x4AAAAAAA15KmeFXzd2H0Xo","vkIdClientId":"51586979","yandexIdClientId":"88d071f1d3384eb4bd1deb37910235c7","formAuthToken":"AsbFKaybCdmk6mvSp54ufTGI-aAv4iw8n6lNQx5jb2HtFw4eXuWkuRKpT0qrkd4K8YHUCifV0p4iSdcXTGSIDw","topics":[{"id":29779,"title":"Я прошу прощения, но что это значит:\n> ...запустите встроенный в php веб-сервер php -S localhost:5555\n\nКак запустить? что именно сделать?\nЯ запустить не сумел.\nЭто делается с помощью командной строки?","plain_title":"Я прошу прощения, но что это значит: ...запустите встроенный в php веб-сервер php -S localhost:5555 Как запустить? что именно сделать? Я запустить не сумел. Это делается с помощью командной строки? ","creator":{"public_name":"Олег Откидач","id":195914,"is_tutor":false},"comments":[{"creator":{"public_name":"Олег Откидач","id":195914,"is_tutor":false},"id":64549,"body":"Хорошо.\nМне в голову не приходило, что php надо устанавливать (мы ведь не устанавливаем JavaScript)...\n\nУстановил, буду грызть дальше...","topic_id":29779},{"creator":{"public_name":"Сергей К.","id":5174,"is_tutor":false},"id":64539,"body":"В php есть встоенный веб-сервер. Запускается он с помощью команды `php -S localhost:5555`. У вас должен быть установлен php. Узнать текущую версию можно с помощью команды `php -v`.","topic_id":29779},{"creator":{"public_name":"Сергей К.","id":5174,"is_tutor":false},"id":64561,"body":"Для javascript существует свой интерпретатор - nodejs.","topic_id":29779},{"creator":{"public_name":"Динара Хажипова","id":312372,"is_tutor":false},"id":102715,"body":"Здравствуйте! пытаюсь установить на Windows 10 PHP, можно ли использовать что-то из этого - OpenServer, XAMPP, Denwer?","topic_id":29779}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Веб внутри PHP","entity_url":null,"active":true}},{"id":48427,"title":"Добрый вечер, есть пару вопросов по данной лекции\n1) насколько распространена практика использования hidden intup-ов для обработки значений формы,и является ли она современной? (потому что на просторах интернета особенно на форумах его применяли в 2012-13 годах)\n2) зачем нам для формы атрибут action и название файла, если обработка формы происходит в текущем файле?","plain_title":"Добрый вечер, есть пару вопросов по данной лекции 1) насколько распространена практика использования hidden intup-ов для обработки значений формы,и является ли она современной? (потому что на просторах интернета особенно на форумах его применяли в 2012-13 годах) 2) зачем нам для формы атрибут action и название файла, если обработка формы происходит в текущем файле? ","creator":{"public_name":"Turgay","id":321161,"is_tutor":false},"comments":[{"creator":{"public_name":"Turgay","id":321161,"is_tutor":false},"id":104075,"body":"Понятно, спасибо большое **Kirill Mokevnin**, ","topic_id":48427},{"creator":{"public_name":"Kirill Mokevnin","id":1,"is_tutor":false},"id":104074,"body":"1. Не уверен что до конца понял вопрос. Скрытые поля используются для разных защитных механизмов (csrf) от ботов и злоумышленников (специальные поля, которые люди не заполняют, а боты заполняют). Используются для расширения методов HTTP и отправки не только get и post. Используются для определения локали и всяких вспомогательных штук. Делается это как правило не самими разработчиками, а фреймворками, которые автоматически добавляют все что нужно для работы. Вы можете посмотреть исходники форм на Хекслете, например при регистрации.\n2. Если смотреть на тот пример, это просто копипаста из интернета. Она собственно приведена как пример того, как код писать не надо)\n","topic_id":48427}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Веб внутри PHP","entity_url":null,"active":true}},{"id":13074,"title":"При работе с windows через vagrant, как я полагаю, файл, который мы редактируем, должен находиться на локальной машине, а виртуальная должна его \"увидеть\" и подгрузить в папку home/vagrant.\n\nХотя `vagrant up` при запуске пишет:\n```\n==> default: Mounting shared folders...\n default: /vagrant => D:/student/php\n```\nмол \"да, я смотрю в папку на локалке\", файлов и папок, размещённых на локалке - там не отображается. \n\nЕсли в Vagrantfile раскомментировать строку: `config.vm.network \"forwarded_port\", guest: 80, host: 8080` то по адресу localhost:8080 станет загружаться файлик апача, лежащий в `/var/www/html` **виртуальной** машины.\n\nПри этом, разумеется, даже разместив файл index.php внутри виртуальной машины (home/vagrant), команда `php -S localhost:8000` запускает веб-сервер, но файл не исполняется. \n\nВ связи с этим вопрос: \nГде должен размещаться и редактироваться файл - на локалке или в виртуалке?\n* Если на локалке, то как его \"связать\" с виртуалкой?\n* Если на виртуалке, то как его открывать в редакторе кода, а не в командной строке?","plain_title":"При работе с windows через vagrant, как я полагаю, файл, который мы редактируем, должен находиться на локальной машине, а виртуальная должна его \"увидеть\" и подгрузить в папку home/vagrant. Хотя vagrant up при запуске пишет: ==> default: Mounting shared folders... default: /vagrant => D:/student/php мол \"да, я смотрю в папку на локалке\", файлов и папок, размещённых на локалке - там не отображается. Если в Vagrantfile раскомментировать строку: config.vm.network \"forwarded_port\", guest: 80, host: 8080 то по адресу localhost:8080 станет загружаться файлик апача, лежащий в /var/www/html виртуальной машины. При этом, разумеется, даже разместив файл index.php внутри виртуальной машины (home/vagrant), команда php -S localhost:8000 запускает веб-сервер, но файл не исполняется. В связи с этим вопрос: Где должен размещаться и редактироваться файл - на локалке или в виртуалке? * Если на локалке, то как его \"связать\" с виртуалкой? * Если на виртуалке, то как его открывать в редакторе кода, а не в командной строке? ","creator":{"public_name":"Sergei Melodyn","id":162475,"is_tutor":true},"comments":[{"creator":{"public_name":"Sergei Melodyn","id":162475,"is_tutor":true},"id":27428,"body":"Разобрался, надо было раскомментировать строчку с подключением второй папки и разрешить доступ вагранту в Windows (у меня появлялся запрос на разрешение доступа к сетям):\n```\n # Create a forwarded port mapping which allows access to a specific port\n # within the machine from a port on the host machine. In the example below,\n # accessing \"localhost:8080\" will access port 80 on the guest machine.\n # NOTE: This will enable public access to the opened port\n config.vm.network \"forwarded_port\", guest: 80, host: 8080\n```\n```\n # Share an additional folder to the guest VM. The first argument is\n # the path on the host to the actual folder. The second argument is\n # the path on the guest to mount the folder. And the optional third\n # argument is a set of non-required options.\n config.vm.synced_folder \"D:/student/php/site\", \"/var/www/html\"\n```\n\nЭто делается в Vagrantfile при отключенной виртуалке. Последующий vagrant up запустит сразу и сервер, и отправит index.php в нужную директорию. После этого можно редактировать файл в Windows, смотреть результат в браузере на порту 8080. Выполнять `php -S localhost:8000` при этом уже не нужно.","topic_id":13074},{"creator":{"public_name":"Kirill Mokevnin","id":1,"is_tutor":false},"id":27397,"body":"> то по адресу localhost:8080 станет загружаться файлик апача, лежащий в /var/www/html виртуальной машины.\n\nЭто смотря что внутри запущено. Чтобы там открылся апач его еще надо поставить (про апач вообще надо давно забыть).\n\n> При этом, разумеется, даже разместив файл index.php внутри виртуальной машины (home/vagrant), команда php -S localhost:8000 запускает веб-сервер, но файл не исполняется.\n\nЕсли он запускается внутри, то порт 8000 нужно пробросить наружу, иначе как его открыть?\n\n> Где должен размещаться и редактироваться файл - на локалке или в виртуалке?\n\nНе имеет значения, данные синхронизируются в обе стороны. Почему конкретно у тебя файлы не пробрасываются я сказать не могу, с виндой всегда такие проблемы. Только гуглинг и чтение доков.\n\n","topic_id":13074}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Веб внутри PHP","entity_url":null,"active":true}},{"id":33689,"title":"Здравствуйте! Могу ля я установить для написания кода в качестве IDE, вместо VSC, PhpStorm, он вроде бы как \"посерьезней\" ?)","plain_title":"Здравствуйте! Могу ля я установить для написания кода в качестве IDE, вместо VSC, PhpStorm, он вроде бы как \"посерьезней\" ?) ","creator":{"public_name":"Александр","id":234930,"is_tutor":false},"comments":[{"creator":{"public_name":"Александр","id":234930,"is_tutor":false},"id":73447,"body":"Хорошо, начну с VScode, для расширения кругозора!) Спасибо","topic_id":33689},{"creator":{"public_name":"Александр Некрасов","id":244158,"is_tutor":false},"id":73410,"body":"**Александр Швецов**, Посмотрите вот [это](https://youtu.be/OhLIhyCrNGE). ","topic_id":33689},{"creator":{"public_name":"Александр Некрасов","id":244158,"is_tutor":false},"id":73407,"body":"**Александр Швецов**, Доброе утро.\n\nНа самом деле особой разницы нет. Можно хоть блокнот из Виндовс. Тут нужно понимать различия. Есть IDE, а есть редакторы кода. Шторм - IDE, это инструмент в котором огромное количество возможностей. Но он тяжеловесный. Долго грузится(при этом он каждый раз индексирует весь проект), имеет кучу фишечек, которые начинающему разработчику нафиг не нужны. Плюс платный.\n\nЯ бы для начала рекомендовал VS Code.В нем есть все что нужно \"из коробки\". А Шторм имеет смысл брать, когда вы будете знать для чего он вам нужен. Но решать Вам ;).","topic_id":33689},{"creator":{"public_name":"Александр","id":234930,"is_tutor":false},"id":73409,"body":"Спасибо, fessan! Буду брать PhpStorm. Выбор - лучше сразу себя приучать к интерфейсу, да и так трудностей обучения хватает. Будем приучать себя к хорошему) Еще раз спасибо за оперативность ответа!","topic_id":33689}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Веб внутри PHP","entity_url":null,"active":true}},{"id":54267,"title":"Добрый день, как с этим быть?\n\nпо итогу сайт ничего не выводит в браузере\n\nneosolution@DESKTOP-DHKK5VL:~/hexlet-git$ php -S localhost:5555\n\nPHP 7.2.24-0ubuntu0.18.04.7 Development Server started at Mon Apr 26 17:36:19 2021\nListening on http://localhost:5555\nDocument root is /home/neosolution/hexlet-git\nPress Ctrl-C to quit.\n\n*файл я уже создал и данные правильно внес","plain_title":"Добрый день, как с этим быть? neosolution@DESKTOP-DHKK5VL:~/hexlet-git$ php -S localhost:5555 PHP 7.2.24-0ubuntu0.18.04.7 Development Server started at Mon Apr 26 17:36:19 2021 Listening on http://localhost:5555 Document root is /home/neosolution/hexlet-git Press Ctrl-C to quit. ","creator":{"public_name":"","id":355887,"is_tutor":false},"comments":[{"creator":{"public_name":"Roman Ashikov","id":226258,"is_tutor":true},"id":115361,"body":"Приветствую!\n\nНасколько я понял, у вас вопрос по самостоятельной работе?\n\nС локальными ошибками, не смотря в код, бывает очень сложно сказать в чём же проблема. Не могли бы вы залить самостоятельную работу в репозиторий на GitHub и в топике отправить ссылку на него. Я гляну код и попробую вам помочь.\n\nКстати, для более оперативной помощи в решении локальных проблем можно писать ребятам в наш слак. Там всегда есть народ, в том числе и опытные разработчики и кто-нибудь обязательно вам поможет разобраться. О том как подключиться к нашему слаку можно почитать тут: https://help.hexlet.io/ru/articles/111445-soobshchestvo-kheksleta-v-slake","topic_id":54267}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Веб внутри PHP","entity_url":null,"active":true}},{"id":70821,"title":"Пока форма не отправлена, $first_name и $last_name у нас, получается, не объявлены. Это ведь вызовет нотис ?","plain_title":"Пока форма не отправлена, $firstname и $lastname у нас, получается, не объявлены. Это ведь вызовет нотис ? ","creator":{"public_name":"Madcat","id":484465,"is_tutor":false},"comments":[{"creator":{"public_name":"Nikolai Gagarinov","id":104929,"is_tutor":true},"id":148387,"body":"Добрый день.\n\nДаже более. На 8.1 версии будет предупреждение (Warning), еще при попытке получить ключ из массива `$_POST`.\n\nВ данном примере показан код, как НЕ надо писать. К сожалению такое можно встретить в продакшене, тк отключаются ошибки и предупреждения PHP и код выполняется молча, с ошибками.","topic_id":70821}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Веб внутри PHP","entity_url":null,"active":true}},{"id":67464,"title":"Сохраните код выше в файл index.php и в этой же папке запустите встроенный в php веб-сервер php -S localhost:5555. Затем откройте в браузере адрес localhost:5555.\n\nЭто нужно делать в коммандной строке или в виндовс? Если в коммандной, в теории ничего не говорилось про браузеры в unix","plain_title":"Сохраните код выше в файл index.php и в этой же папке запустите встроенный в php веб-сервер php -S localhost:5555. Затем откройте в браузере адрес localhost:5555. Это нужно делать в коммандной строке или в виндовс? Если в коммандной, в теории ничего не говорилось про браузеры в unix ","creator":{"public_name":"Александр","id":446103,"is_tutor":false},"comments":[{"creator":{"public_name":"Maksim Litvinov","id":198906,"is_tutor":true},"id":141581,"body":"Подскажите, какую операционную систему вы используете? Обычно значок браузера есть прямо на рабочем столе. Можно открыть браузер таким образом, нажав на этот значок. Еще можно запустить браузер Firefox из командной строки. Откройте новую вкладку терминала и выполните в ней команду `firefox`. ","topic_id":67464},{"creator":{"public_name":"Александр","id":446103,"is_tutor":false},"id":141503,"body":"Ну а как его открыть? Какой командой он вызывается? Мы такого не проходили","topic_id":67464},{"creator":{"public_name":"Александр","id":446103,"is_tutor":false},"id":141466,"body":"Но в теории не проговаривали ни один браузер. Я даже не знаю как они называются в ubuntu. Загуглил, там фаервол похоже нужно сначала устанавливать. Может быть вы сделаете норм инструкцию по его установке? Установке других программ которые необходимы?","topic_id":67464},{"creator":{"public_name":"Maksim Litvinov","id":198906,"is_tutor":true},"id":141461,"body":"Сервер нужно запустить из командной строки. Откройте терминал и выполните эту команду. Она запустит встроенный в php сервер. Затем откройте любой браузер и откройте страницу по адресу `localhost:5555`. Так вы сможете посмотреть созданную страницу","topic_id":67464},{"creator":{"public_name":"Александр","id":446103,"is_tutor":false},"id":141764,"body":"Спасибо, сработало.\n\nА как студент должен догадаться что сервер нужно запускать в терминале, а браузер открывать в windows?","topic_id":67464},{"creator":{"public_name":"Maksim Litvinov","id":198906,"is_tutor":true},"id":141500,"body":"Какую операционную систему вы используете? Например в Ubuntu изначально уже установлен браузер Mozilla, можете использовать его, он вполне подойдёт","topic_id":67464},{"creator":{"public_name":"Александр","id":446103,"is_tutor":false},"id":141592,"body":"Я использую терминал Ubuntu WSL. Значков нет, рабочего стола нет, есть командная строка.\n\nКоманда firefox не найдена","topic_id":67464},{"creator":{"public_name":"Maksim Litvinov","id":198906,"is_tutor":true},"id":141768,"body":"Отлично! Я добавил ссылку на эту документацию в урок","topic_id":67464},{"creator":{"public_name":"Maksim Litvinov","id":198906,"is_tutor":true},"id":141724,"body":"Попробуйте запустить сервер в WSL и использовать браузер в Windows, чтобы открыть страницу `localhost:5555`. Вот [ссылка](https://docs.microsoft.com/ru-ru/windows/wsl/networking#accessing-linux-networking-apps-from-windows-localhost) на доку, как получить доступ к сетевым приложениям Linux из Windows","topic_id":67464}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Веб внутри PHP","entity_url":null,"active":true}},{"id":91184,"title":"\"...запустите встроенный в php веб-сервер php -S localhost:5555...\"\nЯ понимаю, что команды надо запускать в командной строке. Но откуда командная строка должна знать команду php? Как его устанавливать? Первая мысль - сначала написать npm install php. )) Это шутка, разумеется.\nЕсли серьезно, ни отдельный урок, ни целый курс так не начинают. Надо прямо сказать, не в комментах, а в первой строке теории: устанавливаем php и делаем это, например, таким-то образом. Конечно, я найду, как его установить. А также найду, что такое WSL (\"...если вы используете WSL, посмотрите, как получить доступ к сетевым приложениям Linux из Windows\"). \nБуду ли курс проходить, пока не знаю. Нужна простая и четкая композиция - от известного к неизвестному, от простого к сложному. \n\"Вы увидите, что вывелась строчка Hello World. Фантастика, да?\"\nА в чем \"фантастика\"-то? Я не могу разделить эмоции автора. Для этого мне нужно более рациональное объяснение происходящего. Можно ведь открыть html-файл с инлайновым JS-скриптом, в котором одна строчка с alert. \"Фантастика\", получается, в том, что вообще есть сервер. И благодаря серверу в адресной строке будет не путь к html-файлу в файловой системе, а localhost и порт. Так откуда сервер взялся, из воздуха? Из php? А php откуда взялся? Его надо было установить. С этого и стоило начать.\nКроме того, длинный анти-пример кода (как не надо его писать) в первом уроке - не очень удачное решение. \nОбычно я под уроками и курсами не пишу вообще никаких комментариев, а не только развернутых. Но накопилась, видимо, усталость от русскоязычных курсов, в том числе от тех, которые часто выглядят как черновики и наброски.","plain_title":"\"...запустите встроенный в php веб-сервер php -S localhost:5555...\" Я понимаю, что команды надо запускать в командной строке. Но откуда командная строка должна знать команду php? Как его устанавливать? Первая мысль - сначала написать npm install php. )) Это шутка, разумеется. Если серьезно, ни отдельный урок, ни целый курс так не начинают. Надо прямо сказать, не в комментах, а в первой строке теории: устанавливаем php и делаем это, например, таким-то образом. Конечно, я найду, как его установить. А также найду, что такое WSL (\"...если вы используете WSL, посмотрите, как получить доступ к сетевым приложениям Linux из Windows\"). Буду ли курс проходить, пока не знаю. Нужна простая и четкая композиция - от известного к неизвестному, от простого к сложному. \"Вы увидите, что вывелась строчка Hello World. Фантастика, да?\" А в чем \"фантастика\"-то? Я не могу разделить эмоции автора. Для этого мне нужно более рациональное объяснение происходящего. Можно ведь открыть html-файл с инлайновым JS-скриптом, в котором одна строчка с alert. \"Фантастика\", получается, в том, что вообще есть сервер. И благодаря серверу в адресной строке будет не путь к html-файлу в файловой системе, а localhost и порт. Так откуда сервер взялся, из воздуха? Из php? А php откуда взялся? Его надо было установить. С этого и стоило начать. Кроме того, длинный анти-пример кода (как не надо его писать) в первом уроке - не очень удачное решение. Обычно я под уроками и курсами не пишу вообще никаких комментариев, а не только развернутых. Но накопилась, видимо, усталость от русскоязычных курсов, в том числе от тех, которые часто выглядят как черновики и наброски. ","creator":{"public_name":"Olga","id":678981,"is_tutor":false},"comments":[{"creator":{"public_name":"Maksim Litvinov","id":198906,"is_tutor":true},"id":180504,"body":"Приветствую, Ольга! Порекомендую вам начать одну из наших профессий, например вот [профессия по PHP](https://ru.hexlet.io/programs/php). Курсы внутри профессии выстроены в определенном порядке. Именно в таком порядке их и нужно проходить. В каждом следующем курсе мы опираемся на знания, полученные в предыдущих пройденных курсах. До курса по веб разработке в программе есть много других курсов. В том числе курс по настройке окружения, где мы подробно рассматриваем, как установить PHP и курс по работе в командной сроке","topic_id":91184}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Веб внутри PHP","entity_url":null,"active":true}}],"lesson":{"exercise":null,"units":[{"id":2158,"name":"theory","url":"/courses/php-overview-of-web-development/lessons/web-in-php/theory_unit"},{"id":6186,"name":"quiz","url":"/courses/php-overview-of-web-development/lessons/web-in-php/quiz_unit"}],"links":[],"ordered_units":[{"id":2158,"name":"theory","url":"/courses/php-overview-of-web-development/lessons/web-in-php/theory_unit"},{"id":6186,"name":"quiz","url":"/courses/php-overview-of-web-development/lessons/web-in-php/quiz_unit"}],"id":1043,"slug":"web-in-php","state":"approved","name":"Веб внутри PHP","course_order":200,"goal":"Знакомимся с ключевым отличием PHP от других языков программирования","self_study":null,"theory_video_provider":null,"theory_video_uid":null,"theory":"PHP, в отличие от всех остальных языков, содержит веб внутри себя. В то время как в других экосистемах любая работа с вебом — всего лишь набор дополнительных библиотек, а сами языки при этом про веб не знают ничего. PHP знает о вебе все. Это стало одной из ключевых причин его успеха. Создание примитивного интерактивного сайта на php не требует буквально ничего, кроме самого языка. PHP позволяет мешать HTML и свой код в одном файле, а веб-сервер сразу же выведет его как готовую веб-страницу.\n\n```php\n<html>\n <head>\n <title>PHP Test</title>\n </head>\n <body>\n <?php echo '<p>Hello World</p>'; ?>\n </body>\n</html>\n```\n\nСохраните код выше в файл *index.php* и в этой же папке запустите встроенный в php веб-сервер `php -S localhost:5555`. Затем откройте в браузере адрес [localhost:5555](http://localhost:5555) (если вы используете WSL, посмотрите, [как получить доступ к сетевым приложениям Linux из Windows](https://docs.microsoft.com/ru-ru/windows/wsl/networking#accessing-linux-networking-apps-from-windows-localhost)). Вы увидите, что вывелась строчка _Hello World_. Фантастика, да? Подобное не сработает больше ни в одном другом языке программирования. Для запуска примитивной страницы вам придется самостоятельно настраивать веб-сервер, устанавливать и/или импортировать дополнительные библиотеки, писать код, который генерирует соответствующую страницу, причем, возможно, вы не обойдетесь одним файлом.\n\nВесь секрет кода выше в том, что php-файлы могут содержать HTML-разметку, именно по этой причине необходимо использовать тег `<?php ?>`. Интерпретатор должен как-то узнавать, где разметка, а где код, который нужно обрабатывать.\n\nСо временем та простая страница превращается в подобный код:\n\n```php\n<?php\n if ($_POST['process'] === 1) {\n $first_name = htmlentities($_POST['first_name']);\n $last_name = htmlentities($_POST['last_name']);\n if (empty($last_name)){\n echo \"<p class=\\\"error\\\">Your last name cannot be blank</p>\";\n } else {\n echo \"<p>Hello there, \".$first_name.\" \".$last_name.\"</p>\";\n }\n }\n?>\n\n<!DOCTYPE html>\n<html>\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n <title>Form validation example</title>\n <style>\n .error{color:red;}\n input{display:block; margin-bottom:10px;}\n </style>\n </head>\n\n <body>\n <h1>Form Validation Example</h1>\n <h2>Please enter your name</h2>\n\n <form action=\"validation_example_2.php\" method=\"post\">\n <label for=\"first_name\">First name:</label>\n <input name=\"first_name\" id=\"first_name\" type=\"text\" value=\"<?php echo($first_name); ?>\" />\n\n <label for=\"last_name\">Last name:</label>\n <input name=\"last_name\" id=\"last_name\" type=\"text\" value=\"<?php echo($last_name); ?>\" />\n\n <input type=\"hidden\" name=\"process\" value=\"1\" />\n <input type=\"submit\" value=\"Submit\" />\n </form>\n </body>\n</html>\n```\n\nСложность резко возросла, но это еще только цветочки. Код выше выполняет довольно простую задачку. Любой более-менее живой сайт содержит в сотни и тысячи раз больше кода. На этом этапе преимущества, которые дал нам php при старте, превращаются в недостатки. Код не структурирован и перемешан с разметкой, его тяжело менять и отлаживать, вся система быстро деградирует.\n\nОткровенно говоря, профессиональные разработчики не используют php именно таким образом, как описано выше. Современная php разработка мало чем отличается от того, как все происходит в других экосистемах. Почти все, что нужно для веба, берется из сторонних библиотек. Несмотря на это, множество людей продолжают писать код описанным выше способом. Одна из причин заключается в том, что в сети полно обучающих материалов, которые приучают к подобному стилю.\n\nМы так писать не будем. Все, что было выше, показано исключительно в ознакомительных целях.\n\nКроме прочего, в php встроено множество функций, предназначенных для работы с исключительно веб-сущностями. Начиная от экранирования тегов, заканчивая работой с куками (cookies). Некоторые из них удобны и используются в повседневной практике, другие неудобны, и для них существуют пакеты-заменители.\n"},"lessonMember":null,"courseMember":null,"course":{"start_lesson":{"exercise":null,"units":[{"id":2155,"name":"theory","url":"/courses/php-overview-of-web-development/lessons/intro/theory_unit"}],"links":[],"ordered_units":[{"id":2155,"name":"theory","url":"/courses/php-overview-of-web-development/lessons/intro/theory_unit"}],"id":1040,"slug":"intro","state":"approved","name":"Введение","course_order":100,"goal":"Знакомимся с целями и задачами курса","self_study":null,"theory_video_provider":null,"theory_video_uid":null,"theory":"Обучение PHP на Хекслете — процесс довольно длительный и непростой. Он включает в себя десятки курсов. Перед тем, как касаться непосредственно веб-программирования и соответствующего инструментария, необходимо научиться программировать в принципе. Причем знание синтаксиса языка не делает из вас программиста, также как знание правил шахмат не делает из вас шахматиста. Во время процесса обучения вас начнут посещать мысли «_зачем я это учу?_», «_как это поможет мне в работе?_», «_я хочу уже делать сайты, дайте мне нужные инструменты!_» и тому подобное. Даже если бы сразу начинать с веб-разработки, то вы бы просто не смогли понять практически ничего из-за огромного объема сопутствующих тем, в которых нужно разбираться. Получается парадокс: курс называется `Ключевые аспекты веб-разработки на PHP`, но изучать веб-разработку как таковую мы будем позже.\n\nМотивация в обучении важна, но она есть только тогда, когда мы понимаем, ради чего мы что-то делаем. Это основная причина создания курса, который вы проходите прямо сейчас. В нем мы поверхностно пройдемся по тому, как делается веб на PHP. Познакомимся со **встроенными возможностями PHP**, **фреймворками**, **http**, **шаблонизацией**, **базами данных**, **orm**, **тестами**, работе с **коллекциями**, **API** и многими другими вещами. Каждая из перечисленных выше тем требует от вас понимания некоторых фундаментальных вопросов, которые как раз и рассматриваются в будущих курсах. Другими словами, в этом курсе мы дадим обоснование всему дальнейшему обучению.\n\nВ некоторых уроках курса встречается блок \"**Что нужно выучить**\". В нем перечислены вещи, которые будут изучаться на Хекслете и которые нужны для понимания соответствующей темы. Этот блок не призыв к действию, он лишь показывает насколько глубока кроличья нора. Нельзя сразу начать с конца. Перед реальной разработкой нужно потратить некоторое время на изучение базовых концепций.\n\nСам курс наполнен огромным количеством новой информации, терминами, концепциями, синтаксисом. И у нас нет ни цели, ни возможности их полностью охватить и, более того, разобрать. Не стоит сильно переживать, если вы что-то совсем не понимаете. Закончив программу обучения («профессию»), вы не только поймете, но и сможете использовать все, о чем говорится в курсе.\n"},"id":158,"slug":"php-overview-of-web-development","challenges_count":0,"name":"Ключевые аспекты веб-разработки на PHP","allow_indexing":true,"state":"approved","course_state":"finished","pricing_type":"free","description":"На этом курсе вы изучите основные аспекты современной веб-разработки в PHP. Вы узнаете о сетевых протоколах и интерфейсах, базах данных и ORM, веб-фреймворках и концепции MVC. Знания из этого курса помогут определиться с дальнейшими областями изучения, дадут общую картину современного бекэнда и веб-разработки.","kind":"additional","updated_at":"2026-01-20T11:52:30.433Z","language":"php","duration_cache":13860,"skills":["Использовать в своем жаргоне такие страшные слова как MVC, HTTP, DNS, ORM","Создавать простейшие страницы с использованием PHP","Устанавливать и запускать приложение на микрофреймворке Slim","Реалистично оценивать объем знаний необходимых для профессиональной разработки"],"keywords":["HTTP","фреймворки","ORM","тестирование","коллекции","шаблонизация"],"lessons_count":13,"cover":"https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6ODc4MSwicHVyIjoiYmxvYl9pZCJ9fQ==--0eb7d51e9c327b0fdb2988aebc2e64bbd6fa05df/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJwbmciLCJyZXNpemVfdG9fZmlsbCI6WzYwMCw0MDBdfSwicHVyIjoidmFyaWF0aW9uIn19--6067466c2912ca31a17eddee04b8cf2a38c6ad17/image.png"},"recommendedLandings":[{"stack":{"id":2,"slug":"php","title":"PHP-разработчик","audience":"for_beginners","start_type":"weekly","pricing_model":"purchase","priority":"high","kind":"profession","state":"published","stack_state":"finished","order":60,"duration_in_months":10},"id":1,"slug":"php","title":"РНР-разработчик","subtitle":"Изучите PHP и Laravel для разработки и проектирования REST API","subtitle_for_lists":"Изучите PHP и Laravel для разработки и проектирования REST API","locale":"ru","current":true,"duration_in_months_text":"10 месяцев","stack_slug":"php","price_text":"от 5 650 ₽","duration_text":"10 месяцев","cover_list_variant":"https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6Mzk5MiwicHVyIjoiYmxvYl9pZCJ9fQ==--e9d0f30948ea766a7e6bc3e3d56c192344d45fb8/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Programming-cuate%20(1).png"}],"lessonMemberUnit":null,"accessToLearnUnitExists":true,"accessToCourseExists":true},"url":"/courses/php-overview-of-web-development/lessons/web-in-php/theory_unit","version":"0b0c6d4ebbd40fd58630a0dd89cc25544ccdf24e","encryptHistory":false,"clearHistory":false}"><style data-mantine-styles="true">:root, :host{--mantine-font-family: Arial, sans-serif;--mantine-font-family-headings: Arial, sans-serif;--mantine-heading-font-weight: normal;--mantine-radius-default: 0rem;--mantine-primary-color-filled: var(--mantine-color-indigo-filled);--mantine-primary-color-filled-hover: var(--mantine-color-indigo-filled-hover);--mantine-primary-color-light: var(--mantine-color-indigo-light);--mantine-primary-color-light-hover: var(--mantine-color-indigo-light-hover);--mantine-primary-color-light-color: var(--mantine-color-indigo-light-color);--mantine-spacing-xxl: calc(4rem * var(--mantine-scale));--mantine-font-size-xs: 12px;--mantine-font-size-sm: 14px;--mantine-font-size-md: 16px;--mantine-font-size-lg: clamp(16.0000px, calc(15.2727px + 0.2273vw), 18.0000px);--mantine-font-size-xl: clamp(16.0000px, calc(14.5455px + 0.4545vw), 20.0000px);--mantine-font-size-display-3: clamp(32.0000px, calc(26.1818px + 1.8182vw), 48.0000px);--mantine-font-size-display-2: clamp(36.0000px, calc(25.8182px + 3.1818vw), 64.0000px);--mantine-font-size-display-1: clamp(40.0000px, calc(25.4545px + 4.5455vw), 80.0000px);--mantine-font-size-h1: clamp(28.0000px, calc(23.6364px + 1.3636vw), 40.0000px);--mantine-font-size-h2: clamp(24.0000px, calc(21.0909px + 0.9091vw), 32.0000px);--mantine-font-size-h3: clamp(20.0000px, calc(17.0909px + 0.9091vw), 28.0000px);--mantine-font-size-h4: clamp(16.0000px, calc(13.0909px + 0.9091vw), 24.0000px);--mantine-font-size-h5: clamp(16.0000px, calc(14.5455px + 0.4545vw), 20.0000px);--mantine-font-size-h6: 1rem;--mantine-primary-color-0: var(--mantine-color-indigo-0);--mantine-primary-color-1: var(--mantine-color-indigo-1);--mantine-primary-color-2: var(--mantine-color-indigo-2);--mantine-primary-color-3: var(--mantine-color-indigo-3);--mantine-primary-color-4: var(--mantine-color-indigo-4);--mantine-primary-color-5: var(--mantine-color-indigo-5);--mantine-primary-color-6: var(--mantine-color-indigo-6);--mantine-primary-color-7: var(--mantine-color-indigo-7);--mantine-primary-color-8: var(--mantine-color-indigo-8);--mantine-primary-color-9: var(--mantine-color-indigo-9);--mantine-color-red-0: #ffeaea;--mantine-color-red-1: #fed4d4;--mantine-color-red-2: #f4a7a8;--mantine-color-red-3: #ec7878;--mantine-color-red-4: #e55050;--mantine-color-red-5: #e03131;--mantine-color-red-6: #e02829;--mantine-color-red-7: #c71a1c;--mantine-color-red-8: #b21218;--mantine-color-red-9: #9c0411;--mantine-color-violet-0: #fce9ff;--mantine-color-violet-1: #f1cfff;--mantine-color-violet-2: #e09bff;--mantine-color-violet-3: #d16fff;--mantine-color-violet-4: #be37fe;--mantine-color-violet-5: #b51afe;--mantine-color-violet-6: #b009ff;--mantine-color-violet-7: #9b00e4;--mantine-color-violet-8: #8a00cc;--mantine-color-violet-9: #7800b3;--mantine-color-indigo-0: #edecff;--mantine-color-indigo-1: #d6d5fe;--mantine-color-indigo-2: #aaa9f4;--mantine-color-indigo-3: #7b79eb;--mantine-color-indigo-4: #5451e4;--mantine-color-indigo-5: #3b37e0;--mantine-color-indigo-6: #2d2adf;--mantine-color-indigo-7: #1f1ec7;--mantine-color-indigo-8: #1819b2;--mantine-color-indigo-9: #0c149e;--mantine-color-cyan-0: #dffdff;--mantine-color-cyan-1: #caf5ff;--mantine-color-cyan-2: #99e8ff;--mantine-color-cyan-3: #64daff;--mantine-color-cyan-4: #3ccffe;--mantine-color-cyan-5: #24c8fe;--mantine-color-cyan-6: #00c2ff;--mantine-color-cyan-7: #00ade4;--mantine-color-cyan-8: #009acd;--mantine-color-cyan-9: #0085b5;--mantine-color-green-0: #e9fdec;--mantine-color-green-1: #d7f6dc;--mantine-color-green-2: #b0eab9;--mantine-color-green-3: #86df94;--mantine-color-green-4: #62d574;--mantine-color-green-5: #4ccf5f;--mantine-color-green-6: #3fcc54;--mantine-color-green-7: #2fb344;--mantine-color-green-8: #25a03b;--mantine-color-green-9: #138a2e;--mantine-color-yellow-0: #fff7e2;--mantine-color-yellow-1: #ffeecd;--mantine-color-yellow-2: #ffdc9c;--mantine-color-yellow-3: #ffc966;--mantine-color-yellow-4: #feb93a;--mantine-color-yellow-5: #feae1e;--mantine-color-yellow-6: #ffa90f;--mantine-color-yellow-8: #ca8200;--mantine-color-yellow-9: #af7000;--mantine-h1-font-size: clamp(28.0000px, calc(23.6364px + 1.3636vw), 40.0000px);--mantine-h1-font-weight: normal;--mantine-h2-font-size: clamp(24.0000px, calc(21.0909px + 0.9091vw), 32.0000px);--mantine-h2-font-weight: normal;--mantine-h3-font-size: clamp(20.0000px, calc(17.0909px + 0.9091vw), 28.0000px);--mantine-h3-font-weight: normal;--mantine-h4-font-size: clamp(16.0000px, calc(13.0909px + 0.9091vw), 24.0000px);--mantine-h4-font-weight: normal;--mantine-h5-font-size: clamp(16.0000px, calc(14.5455px + 0.4545vw), 20.0000px);--mantine-h5-font-weight: normal;--mantine-h6-font-size: 1rem;--mantine-h6-font-weight: normal;}
:root[data-mantine-color-scheme="dark"], :host([data-mantine-color-scheme="dark"]){--mantine-color-anchor: var(--mantine-color-text);--mantine-color-dimmed: #495057;--mantine-color-dark-filled: var(--mantine-color-dark-5);--mantine-color-dark-filled-hover: var(--mantine-color-dark-6);--mantine-color-dark-light: rgba(105, 105, 105, 0.15);--mantine-color-dark-light-hover: rgba(105, 105, 105, 0.2);--mantine-color-dark-light-color: var(--mantine-color-dark-0);--mantine-color-dark-outline: var(--mantine-color-dark-1);--mantine-color-dark-outline-hover: rgba(184, 184, 184, 0.05);--mantine-color-gray-filled: var(--mantine-color-gray-5);--mantine-color-gray-filled-hover: var(--mantine-color-gray-6);--mantine-color-gray-light: rgba(222, 226, 230, 0.15);--mantine-color-gray-light-hover: rgba(222, 226, 230, 0.2);--mantine-color-gray-light-color: var(--mantine-color-gray-0);--mantine-color-gray-outline: var(--mantine-color-gray-1);--mantine-color-gray-outline-hover: rgba(241, 243, 245, 0.05);--mantine-color-red-filled: var(--mantine-color-red-5);--mantine-color-red-filled-hover: var(--mantine-color-red-6);--mantine-color-red-light: rgba(236, 120, 120, 0.15);--mantine-color-red-light-hover: rgba(236, 120, 120, 0.2);--mantine-color-red-light-color: var(--mantine-color-red-0);--mantine-color-red-outline: var(--mantine-color-red-1);--mantine-color-red-outline-hover: rgba(254, 212, 212, 0.05);--mantine-color-pink-filled: var(--mantine-color-pink-5);--mantine-color-pink-filled-hover: var(--mantine-color-pink-6);--mantine-color-pink-light: rgba(250, 162, 193, 0.15);--mantine-color-pink-light-hover: rgba(250, 162, 193, 0.2);--mantine-color-pink-light-color: var(--mantine-color-pink-0);--mantine-color-pink-outline: var(--mantine-color-pink-1);--mantine-color-pink-outline-hover: rgba(255, 222, 235, 0.05);--mantine-color-grape-filled: var(--mantine-color-grape-5);--mantine-color-grape-filled-hover: var(--mantine-color-grape-6);--mantine-color-grape-light: rgba(229, 153, 247, 0.15);--mantine-color-grape-light-hover: rgba(229, 153, 247, 0.2);--mantine-color-grape-light-color: var(--mantine-color-grape-0);--mantine-color-grape-outline: var(--mantine-color-grape-1);--mantine-color-grape-outline-hover: rgba(243, 217, 250, 0.05);--mantine-color-violet-filled: var(--mantine-color-violet-5);--mantine-color-violet-filled-hover: var(--mantine-color-violet-6);--mantine-color-violet-light: rgba(209, 111, 255, 0.15);--mantine-color-violet-light-hover: rgba(209, 111, 255, 0.2);--mantine-color-violet-light-color: var(--mantine-color-violet-0);--mantine-color-violet-outline: var(--mantine-color-violet-1);--mantine-color-violet-outline-hover: rgba(241, 207, 255, 0.05);--mantine-color-indigo-filled: var(--mantine-color-indigo-5);--mantine-color-indigo-filled-hover: var(--mantine-color-indigo-6);--mantine-color-indigo-light: rgba(123, 121, 235, 0.15);--mantine-color-indigo-light-hover: rgba(123, 121, 235, 0.2);--mantine-color-indigo-light-color: var(--mantine-color-indigo-0);--mantine-color-indigo-outline: var(--mantine-color-indigo-1);--mantine-color-indigo-outline-hover: rgba(214, 213, 254, 0.05);--mantine-color-blue-filled: var(--mantine-color-blue-5);--mantine-color-blue-filled-hover: var(--mantine-color-blue-6);--mantine-color-blue-light: rgba(116, 192, 252, 0.15);--mantine-color-blue-light-hover: rgba(116, 192, 252, 0.2);--mantine-color-blue-light-color: var(--mantine-color-blue-0);--mantine-color-blue-outline: var(--mantine-color-blue-1);--mantine-color-blue-outline-hover: rgba(208, 235, 255, 0.05);--mantine-color-cyan-filled: var(--mantine-color-cyan-5);--mantine-color-cyan-filled-hover: var(--mantine-color-cyan-6);--mantine-color-cyan-light: rgba(100, 218, 255, 0.15);--mantine-color-cyan-light-hover: rgba(100, 218, 255, 0.2);--mantine-color-cyan-light-color: var(--mantine-color-cyan-0);--mantine-color-cyan-outline: var(--mantine-color-cyan-1);--mantine-color-cyan-outline-hover: rgba(202, 245, 255, 0.05);--mantine-color-teal-filled: var(--mantine-color-teal-5);--mantine-color-teal-filled-hover: var(--mantine-color-teal-6);--mantine-color-teal-light: rgba(99, 230, 190, 0.15);--mantine-color-teal-light-hover: rgba(99, 230, 190, 0.2);--mantine-color-teal-light-color: var(--mantine-color-teal-0);--mantine-color-teal-outline: var(--mantine-color-teal-1);--mantine-color-teal-outline-hover: rgba(195, 250, 232, 0.05);--mantine-color-green-filled: var(--mantine-color-green-5);--mantine-color-green-filled-hover: var(--mantine-color-green-6);--mantine-color-green-light: rgba(134, 223, 148, 0.15);--mantine-color-green-light-hover: rgba(134, 223, 148, 0.2);--mantine-color-green-light-color: var(--mantine-color-green-0);--mantine-color-green-outline: var(--mantine-color-green-1);--mantine-color-green-outline-hover: rgba(215, 246, 220, 0.05);--mantine-color-lime-filled: var(--mantine-color-lime-5);--mantine-color-lime-filled-hover: var(--mantine-color-lime-6);--mantine-color-lime-light: rgba(192, 235, 117, 0.15);--mantine-color-lime-light-hover: rgba(192, 235, 117, 0.2);--mantine-color-lime-light-color: var(--mantine-color-lime-0);--mantine-color-lime-outline: var(--mantine-color-lime-1);--mantine-color-lime-outline-hover: rgba(233, 250, 200, 0.05);--mantine-color-yellow-filled: var(--mantine-color-yellow-5);--mantine-color-yellow-filled-hover: var(--mantine-color-yellow-6);--mantine-color-yellow-light: rgba(255, 201, 102, 0.15);--mantine-color-yellow-light-hover: rgba(255, 201, 102, 0.2);--mantine-color-yellow-light-color: var(--mantine-color-yellow-0);--mantine-color-yellow-outline: var(--mantine-color-yellow-1);--mantine-color-yellow-outline-hover: rgba(255, 238, 205, 0.05);--mantine-color-orange-filled: var(--mantine-color-orange-5);--mantine-color-orange-filled-hover: var(--mantine-color-orange-6);--mantine-color-orange-light: rgba(255, 192, 120, 0.15);--mantine-color-orange-light-hover: rgba(255, 192, 120, 0.2);--mantine-color-orange-light-color: var(--mantine-color-orange-0);--mantine-color-orange-outline: var(--mantine-color-orange-1);--mantine-color-orange-outline-hover: rgba(255, 232, 204, 0.05);--app-cta-gradient: linear-gradient(90deg, var(--mantine-color-blue-9) 0%, var(--mantine-color-cyan-7) 100%);--app-color-surface: #2e2e2e;}
:root[data-mantine-color-scheme="light"], :host([data-mantine-color-scheme="light"]){--mantine-color-anchor: var(--mantine-color-text);--mantine-color-dimmed: #495057;--mantine-color-red-light: rgba(224, 40, 41, 0.1);--mantine-color-red-light-hover: rgba(224, 40, 41, 0.12);--mantine-color-red-outline-hover: rgba(224, 40, 41, 0.05);--mantine-color-violet-light: rgba(176, 9, 255, 0.1);--mantine-color-violet-light-hover: rgba(176, 9, 255, 0.12);--mantine-color-violet-outline-hover: rgba(176, 9, 255, 0.05);--mantine-color-indigo-light: rgba(45, 42, 223, 0.1);--mantine-color-indigo-light-hover: rgba(45, 42, 223, 0.12);--mantine-color-indigo-outline-hover: rgba(45, 42, 223, 0.05);--mantine-color-cyan-light: rgba(0, 194, 255, 0.1);--mantine-color-cyan-light-hover: rgba(0, 194, 255, 0.12);--mantine-color-cyan-outline-hover: rgba(0, 194, 255, 0.05);--mantine-color-green-light: rgba(63, 204, 84, 0.1);--mantine-color-green-light-hover: rgba(63, 204, 84, 0.12);--mantine-color-green-outline-hover: rgba(63, 204, 84, 0.05);--mantine-color-yellow-light: rgba(255, 169, 15, 0.1);--mantine-color-yellow-light-hover: rgba(255, 169, 15, 0.12);--mantine-color-yellow-outline-hover: rgba(255, 169, 15, 0.05);--app-color-surface: #f1f3f5;--app-cta-gradient: linear-gradient(90deg, var(--mantine-color-blue-filled) 0%, var(--mantine-color-cyan-5) 100%);}</style><style data-mantine-styles="classes">@media (max-width: 35.99375em) {.mantine-visible-from-xs {display: none !important;}}@media (min-width: 36em) {.mantine-hidden-from-xs {display: none !important;}}@media (max-width: 47.99375em) {.mantine-visible-from-sm {display: none !important;}}@media (min-width: 48em) {.mantine-hidden-from-sm {display: none !important;}}@media (max-width: 61.99375em) {.mantine-visible-from-md {display: none !important;}}@media (min-width: 62em) {.mantine-hidden-from-md {display: none !important;}}@media (max-width: 74.99375em) {.mantine-visible-from-lg {display: none !important;}}@media (min-width: 75em) {.mantine-hidden-from-lg {display: none !important;}}@media (max-width: 87.99375em) {.mantine-visible-from-xl {display: none !important;}}@media (min-width: 88em) {.mantine-hidden-from-xl {display: none !important;}}</style><div style="position:absolute;top:0rem" class=""></div><div style="max-width:var(--container-size-xl);height:100%;min-height:0rem" class=""><style data-mantine-styles="inline">.__m__-_R_5ub_{--grid-gutter:0rem;}</style><div style="height:100%;min-height:0rem" class="m_410352e9 mantine-Grid-root __m__-_R_5ub_"><div class="m_dee7bd2f mantine-Grid-inner" style="height:100%"><style data-mantine-styles="inline">.__m__-_R_rdub_{--col-flex-grow:auto;--col-flex-basis:91.66666666666667%;--col-max-width:91.66666666666667%;}@media(min-width: 48em){.__m__-_R_rdub_{--col-flex-grow:auto;--col-flex-basis:83.33333333333334%;--col-max-width:83.33333333333334%;}}</style><div style="min-width:0rem;height:100%;min-height:0rem;display:flex" class="m_96bdd299 mantine-Grid-col __m__-_R_rdub_"><style data-mantine-styles="inline">.__m__-_R_6qrdub_{margin-top:0rem;padding-inline:var(--mantine-spacing-xs);width:100%;}@media(min-width: 48em){.__m__-_R_6qrdub_{margin-top:var(--mantine-spacing-xl);width:80%;}}@media(min-width: 62em){.__m__-_R_6qrdub_{padding-inline:var(--mantine-spacing-xl);}}</style><div style="margin-inline:auto;max-width:var(--mantine-breakpoint-xl)" class="__m__-_R_6qrdub_"><div style="color:var(--mantine-color-dimmed)" class="m_4451eb3a mantine-Center-root" data-inline="true"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;margin-inline-end:calc(0.125rem * var(--mantine-scale));color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-lock "><path d="M5 13a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v6a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2v-6"></path><path d="M11 16a1 1 0 1 0 2 0a1 1 0 0 0 -2 0"></path><path d="M8 11v-4a4 4 0 1 1 8 0v4"></path></svg></div><p style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Ключевые аспекты веб-разработки на PHP</p></div><h1 style="--title-fw:var(--mantine-h1-font-weight);--title-lh:var(--mantine-h1-line-height);--title-fz:var(--mantine-h1-font-size);margin-bottom:var(--mantine-spacing-xl)" class="m_8a5d1357 mantine-Title-root" data-order="1">Теория: Веб внутри PHP</h1><script type="application/ld+json">{"@context":"https://schema.org","@type":"LearningResource","name":"Веб внутри PHP","inLanguage":"ru","isPartOf":{"@type":"LearningResource","name":"Ключевые аспекты веб-разработки на PHP"},"isAccessibleForFree":"False","hasPart":{"@type":"WebPageElement","isAccessibleForFree":"False","cssSelector":".paywalled"}}</script><div class=""><div style="--alert-color:var(--mantine-color-indigo-light-color);margin-bottom:var(--mantine-spacing-lg);font-size:var(--mantine-font-size-lg)" class="m_66836ed3 mantine-Alert-root" id="mantine-_R_remqrdub_" role="alert" aria-describedby="mantine-_R_remqrdub_-body" aria-labelledby="mantine-_R_remqrdub_-title"><div class="m_a5d60502 mantine-Alert-wrapper"><div class="m_667f2a6a mantine-Alert-icon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-rocket "><path d="M4 13a8 8 0 0 1 7 7a6 6 0 0 0 3 -5a9 9 0 0 0 6 -8a3 3 0 0 0 -3 -3a9 9 0 0 0 -8 6a6 6 0 0 0 -5 3"></path><path d="M7 14a6 6 0 0 0 -3 6a6 6 0 0 0 6 -3"></path><path d="M14 9a1 1 0 1 0 2 0a1 1 0 1 0 -2 0"></path></svg></div><div class="m_667c2793 mantine-Alert-body"><div class="m_6a03f287 mantine-Alert-title"><span id="mantine-_R_remqrdub_-title" class="m_698f4f23 mantine-Alert-label">Полный доступ к материалам</span></div><div id="mantine-_R_remqrdub_-body" class="m_7fa78076 mantine-Alert-message"><div style="--group-gap:var(--mantine-spacing-md);--group-align:center;--group-justify:space-between;--group-wrap:wrap" class="m_4081bf90 mantine-Group-root"><p class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Зарегистрируйтесь и получите доступ к этому и десяткам других курсов</p><a style="--button-height:var(--button-height-xs);--button-padding-x:var(--button-padding-x-xs);--button-fz:var(--mantine-font-size-xs);--button-bg:linear-gradient(45deg, var(--mantine-color-blue-filled) 0%, var(--mantine-color-cyan-filled) 100%);--button-hover:linear-gradient(45deg, var(--mantine-color-blue-filled) 0%, var(--mantine-color-cyan-filled) 100%);--button-color:var(--mantine-color-white);--button-bd:none" class="mantine-focus-auto mantine-active m_77c9d27d mantine-Button-root m_87cf2631 mantine-UnstyledButton-root" data-variant="gradient" data-size="xs" href="/u/new"><span class="m_80f1301b mantine-Button-inner"><span class="m_811560b9 mantine-Button-label">Зарегистрироваться</span></span></a></div></div></div></div></div><div class="paywalled m_d08caa0 mantine-Typography-root"><p>PHP, в отличие от всех остальных языков, содержит веб внутри себя. В то время как в других экосистемах любая работа с вебом — всего лишь набор дополнительных библиотек, а сами языки при этом про веб не знают ничего. PHP знает о вебе все. Это стало одной из ключевых причин его успеха. Создание примитивного интерактивного сайта на php не требует буквально ничего, кроме самого языка. PHP позволяет мешать HTML и свой код в одном файле, а веб-сервер сразу же выведет его как готовую веб-страницу.</p>
<div style="margin-bottom:var(--mantine-spacing-lg)" class="m_e597c321 mantine-CodeHighlight-codeHighlight" dir="ltr"><div class="m_be7e9c9c mantine-CodeHighlight-controls"><button style="--ai-bg:transparent;--ai-hover:transparent;--ai-color:inherit;--ai-bd:none" class="mantine-focus-auto mantine-active m_d498bab7 mantine-CodeHighlight-control m_8d3f4000 mantine-ActionIcon-root m_87cf2631 mantine-UnstyledButton-root" data-variant="none" type="button" aria-label="Copy code"><span class="m_8d3afb97 mantine-ActionIcon-icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M8 8m0 2a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2z"></path><path d="M16 8v-2a2 2 0 0 0 -2 -2h-8a2 2 0 0 0 -2 2v8a2 2 0 0 0 2 2h2"></path></svg></span></button></div><div style="--scrollarea-scrollbar-size:calc(0.25rem * var(--mantine-scale));--sa-corner-width:0px;--sa-corner-height:0px" class="m_f744fd40 mantine-CodeHighlight-scrollarea m_d57069b5 mantine-ScrollArea-root" dir="ltr"><div style="overflow-x:hidden;overflow-y:hidden;overscroll-behavior-inline:none" class="m_c0783ff9 mantine-ScrollArea-viewport" data-scrollbars="xy"><div class="m_b1336c6 mantine-ScrollArea-content"><pre class="m_2c47c4fd mantine-CodeHighlight-pre" style="padding:0"><code class="m_5caae6d3 mantine-CodeHighlight-code"><html>
<head>
<title>PHP Test</title>
</head>
<body>
<?php echo '<p>Hello World</p>'; ?>
</body>
</html></code></pre></div></div></div><button class="mantine-focus-auto m_c9378bc2 mantine-CodeHighlight-showCodeButton m_87cf2631 mantine-UnstyledButton-root" data-hidden="true" type="button">Expand code</button></div>
<p>Сохраните код выше в файл <em>index.php</em> и в этой же папке запустите встроенный в php веб-сервер <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight">php -S localhost:5555</code>. Затем откройте в браузере адрес <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="http://localhost:5555" rel="noopener noreferrer" target="_blank">localhost</a></p><div></div> (если вы используете WSL, посмотрите, <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://docs.microsoft.com/ru-ru/windows/wsl/networking#accessing-linux-networking-apps-from-windows-localhost" rel="noopener noreferrer" target="_blank">как получить доступ к сетевым приложениям Linux из Windows</a>). Вы увидите, что вывелась строчка <em>Hello World</em>. Фантастика, да? Подобное не сработает больше ни в одном другом языке программирования. Для запуска примитивной страницы вам придется самостоятельно настраивать веб-сервер, устанавливать и/или импортировать дополнительные библиотеки, писать код, который генерирует соответствующую страницу, причем, возможно, вы не обойдетесь одним файлом.<p></p>
<p>Весь секрет кода выше в том, что php-файлы могут содержать HTML-разметку, именно по этой причине необходимо использовать тег <code style="margin-bottom:var(--mantine-spacing-lg)" class="m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight m_e597c321 mantine-CodeHighlight-codeHighlight m_dfe9c588 mantine-InlineCodeHighlight-inlineCodeHighlight"><?php ?></code>. Интерпретатор должен как-то узнавать, где разметка, а где код, который нужно обрабатывать.</p>
<p>Со временем та простая страница превращается в подобный код:</p>
<div style="margin-bottom:var(--mantine-spacing-lg)" class="m_e597c321 mantine-CodeHighlight-codeHighlight" dir="ltr"><div class="m_be7e9c9c mantine-CodeHighlight-controls"><button style="--ai-bg:transparent;--ai-hover:transparent;--ai-color:inherit;--ai-bd:none" class="mantine-focus-auto mantine-active m_d498bab7 mantine-CodeHighlight-control m_8d3f4000 mantine-ActionIcon-root m_87cf2631 mantine-UnstyledButton-root" data-variant="none" type="button" aria-label="Copy code"><span class="m_8d3afb97 mantine-ActionIcon-icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M8 8m0 2a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2z"></path><path d="M16 8v-2a2 2 0 0 0 -2 -2h-8a2 2 0 0 0 -2 2v8a2 2 0 0 0 2 2h2"></path></svg></span></button></div><div style="--scrollarea-scrollbar-size:calc(0.25rem * var(--mantine-scale));--sa-corner-width:0px;--sa-corner-height:0px" class="m_f744fd40 mantine-CodeHighlight-scrollarea m_d57069b5 mantine-ScrollArea-root" dir="ltr"><div style="overflow-x:hidden;overflow-y:hidden;overscroll-behavior-inline:none" class="m_c0783ff9 mantine-ScrollArea-viewport" data-scrollbars="xy"><div class="m_b1336c6 mantine-ScrollArea-content"><pre class="m_2c47c4fd mantine-CodeHighlight-pre" style="padding:0"><code class="m_5caae6d3 mantine-CodeHighlight-code"><?php
if ($_POST['process'] === 1) {
$first_name = htmlentities($_POST['first_name']);
$last_name = htmlentities($_POST['last_name']);
if (empty($last_name)){
echo "<p class=\"error\">Your last name cannot be blank</p>";
} else {
echo "<p>Hello there, ".$first_name." ".$last_name."</p>";
}
}
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Form validation example</title>
<style>
.error{color:red;}
input{display:block; margin-bottom:10px;}
</style>
</head>
<body>
<h1>Form Validation Example</h1>
<h2>Please enter your name</h2>
<form action="validation_example_2.php" method="post">
<label for="first_name">First name:</label>
<input name="first_name" id="first_name" type="text" value="<?php echo($first_name); ?>" />
<label for="last_name">Last name:</label>
<input name="last_name" id="last_name" type="text" value="<?php echo($last_name); ?>" />
<input type="hidden" name="process" value="1" />
<input type="submit" value="Submit" />
</form>
</body>
</html></code></pre></div></div></div><button class="mantine-focus-auto m_c9378bc2 mantine-CodeHighlight-showCodeButton m_87cf2631 mantine-UnstyledButton-root" data-hidden="true" type="button">Expand code</button></div>
<p>Сложность резко возросла, но это еще только цветочки. Код выше выполняет довольно простую задачку. Любой более-менее живой сайт содержит в сотни и тысячи раз больше кода. На этом этапе преимущества, которые дал нам php при старте, превращаются в недостатки. Код не структурирован и перемешан с разметкой, его тяжело менять и отлаживать, вся система быстро деградирует.</p>
<p>Откровенно говоря, профессиональные разработчики не используют php именно таким образом, как описано выше. Современная php разработка мало чем отличается от того, как все происходит в других экосистемах. Почти все, что нужно для веба, берется из сторонних библиотек. Несмотря на это, множество людей продолжают писать код описанным выше способом. Одна из причин заключается в том, что в сети полно обучающих материалов, которые приучают к подобному стилю.</p>
<p>Мы так писать не будем. Все, что было выше, показано исключительно в ознакомительных целях.</p>
<p>Кроме прочего, в php встроено множество функций, предназначенных для работы с исключительно веб-сущностями. Начиная от экранирования тегов, заканчивая работой с куками (cookies). Некоторые из них удобны и используются в повседневной практике, другие неудобны, и для них существуют пакеты-заменители.</p></div><div style="margin-block:var(--mantine-spacing-xl)" class=""><h2 style="--title-fw:var(--mantine-h2-font-weight);--title-lh:var(--mantine-h2-line-height);--title-fz:var(--mantine-h2-font-size);margin-bottom:var(--mantine-spacing-md)" class="m_8a5d1357 mantine-Title-root" data-order="2">Рекомендуемые программы</h2><style data-mantine-styles="inline">.__m__-_R_2mremqrdub_{--carousel-slide-gap:var(--mantine-spacing-xs);--carousel-slide-size:70%;}@media(min-width: 36em){.__m__-_R_2mremqrdub_{--carousel-slide-gap:var(--mantine-spacing-xl);--carousel-slide-size:50%;}}</style><div style="--carousel-control-size:calc(2.5rem * var(--mantine-scale));--carousel-controls-offset:var(--mantine-spacing-sm);margin-bottom:var(--mantine-spacing-lg);padding-block:var(--mantine-spacing-sm);background:var(--app-color-surface)" class="m_17884d0f mantine-Carousel-root responsiveClassName" data-orientation="horizontal" data-include-gap-in-size="true"><div class="m_39bc3463 mantine-Carousel-controls" data-orientation="horizontal"><button class="mantine-focus-auto m_64f58e10 mantine-Carousel-control m_87cf2631 mantine-UnstyledButton-root" type="button" data-inactive="true" data-type="previous" tabindex="-1"><svg viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg" style="transform:rotate(90deg);width:calc(1rem * var(--mantine-scale));height:calc(1rem * var(--mantine-scale));display:block"><path d="M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z" fill="currentColor" fill-rule="evenodd" clip-rule="evenodd"></path></svg></button><button class="mantine-focus-auto m_64f58e10 mantine-Carousel-control m_87cf2631 mantine-UnstyledButton-root" type="button" data-inactive="true" data-type="next" tabindex="-1"><svg viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg" style="transform:rotate(-90deg);width:calc(1rem * var(--mantine-scale));height:calc(1rem * var(--mantine-scale));display:block"><path d="M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z" fill="currentColor" fill-rule="evenodd" clip-rule="evenodd"></path></svg></button></div><div class="m_a2dae653 mantine-Carousel-viewport" data-type="media"><div class="m_fcd81474 mantine-Carousel-container __m__-_R_2mremqrdub_" data-orientation="horizontal"><div class="m_d98df724 mantine-Carousel-slide" data-orientation="horizontal"><div tabindex="0" style="cursor:pointer;height:100%"><a style="text-decoration:none" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/programs/php?promo_name=programs_list&promo_position=course&promo_creative=catalog_card&promo_type=card" target="_blank"><div style="height:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root" data-with-border="true"><div style="--group-gap:calc(0.25rem * var(--mantine-scale));--group-align:center;--group-justify:flex-start;--group-wrap:nowrap" class="m_4081bf90 mantine-Group-root"><span style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">10 месяцев</span><span class="mantine-focus-auto m_b6d8b162 mantine-Text-root">·</span><span style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">С нуля</span></div><p style="margin-bottom:var(--mantine-spacing-sm);font-size:var(--mantine-font-size-h5);font-weight:bold" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">РНР-разработчик</p><p class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Изучите PHP и Laravel для разработки и проектирования REST API</p><div style="margin-top:auto" class=""><div class="m_4451eb3a mantine-Center-root"><img style="opacity:0.8;width:70%" class="m_9e117634 mantine-Image-root mantine-visible-from-xs" src="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6Mzk5MiwicHVyIjoiYmxvYl9pZCJ9fQ==--e9d0f30948ea766a7e6bc3e3d56c192344d45fb8/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Programming-cuate%20(1).png" alt="РНР-разработчик" loading="eager"/></div><div style="--group-gap:var(--mantine-spacing-md);--group-align:end;--group-justify:space-between;--group-wrap:wrap;margin-top:var(--mantine-spacing-xs)" class="m_4081bf90 mantine-Group-root"><p style="font-size:var(--mantine-font-size-xl)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">от 5 650 ₽</p><p style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Посмотреть →</p></div></div></div></a></div></div><div class="m_d98df724 mantine-Carousel-slide" data-orientation="horizontal"><div tabindex="0" style="cursor:pointer;height:100%"><a style="text-decoration:none" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/courses?promo_name=programs_list&promo_position=course&promo_creative=catalog_card&promo_type=card"><div style="height:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root" data-with-border="true"><h2 style="--title-fw:var(--mantine-h2-font-weight);--title-lh:var(--mantine-h2-line-height);--title-fz:var(--mantine-h2-font-size);margin-bottom:var(--mantine-spacing-md);font-size:var(--mantine-font-size-h3)" class="m_8a5d1357 mantine-Title-root" data-order="2" data-responsive="true">Каталог</h2><p style="margin-bottom:auto" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Полный список доступных курсов по разным направлениям</p><div style="margin-top:auto" class=""><div class="m_4451eb3a mantine-Center-root"><img style="opacity:0.8;width:70%" class="m_9e117634 mantine-Image-root mantine-visible-from-xs" src="/vite/assets/development-BVihs_d5.png" alt="Orientation"/></div></div></div></a></div></div></div></div></div></div></div></div></div><style data-mantine-styles="inline">.__m__-_R_1bdub_{--col-flex-grow:auto;--col-flex-basis:8.333333333333334%;--col-max-width:8.333333333333334%;}@media(min-width: 48em){.__m__-_R_1bdub_{--col-flex-grow:auto;--col-flex-basis:16.666666666666668%;--col-max-width:16.666666666666668%;}}</style><div style="min-width:0rem;height:100%;min-height:0rem" class="m_96bdd299 mantine-Grid-col __m__-_R_1bdub_"><div style="margin-inline:var(--mantine-spacing-xs)" class="mantine-visible-from-sm"><a style="--button-color:var(--mantine-color-white);margin-bottom:var(--mantine-spacing-lg);text-decoration:none" class="mantine-focus-auto m_849cf0da mantine-focus-auto m_77c9d27d mantine-Button-root m_87cf2631 mantine-UnstyledButton-root m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/courses/php-overview-of-web-development/lessons/web-in-php/finish_unit?unit=theory" data-disabled="true" data-block="true" disabled=""><span class="m_80f1301b mantine-Button-inner"><span class="m_811560b9 mantine-Button-label"><span style="margin-inline-end:var(--mantine-spacing-xs)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Дальше</span>→</span></span></a><a style="padding-inline:0rem" class="mantine-focus-auto m_f0824112 mantine-NavLink-root m_87cf2631 mantine-UnstyledButton-root"><span class="m_690090b5 mantine-NavLink-section" data-position="left"><div style="--ti-size:var(--ti-size-sm);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="sm"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-list-numbers "><path d="M11 6h9"></path><path d="M11 12h9"></path><path d="M12 18h8"></path><path d="M4 16a2 2 0 1 1 4 0c0 .591 -.5 1 -1 1.5l-3 2.5h4"></path><path d="M6 10v-6l-2 2"></path></svg></div></span><div class="m_f07af9d2 mantine-NavLink-body"><span class="m_1f6ac4c4 mantine-NavLink-label">Навигация по теме</span><span class="m_57492dcc mantine-NavLink-description">Теория</span></div><span class="m_690090b5 mantine-NavLink-section" data-position="right"></span></a><div style="margin-block:var(--mantine-spacing-lg)" class="m_3eebeb36 mantine-Divider-root" data-orientation="horizontal" role="separator"></div><div style="margin-block:var(--mantine-spacing-lg)" class=""><div style="justify-content:space-between;margin-bottom:calc(0.1875rem * var(--mantine-scale));color:var(--mantine-color-dimmed);font-size:var(--mantine-font-size-xs)" class="m_8bffd616 mantine-Flex-root __m__-_R_qimrbdub_"><p style="font-size:var(--mantine-font-size-xs)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Завершено</p><p style="font-size:var(--mantine-font-size-xs)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">0 / 13</p></div><div style="--progress-size:var(--progress-size-sm)" class="m_db6d6462 mantine-Progress-root" data-size="sm"><div style="--progress-section-size:0%;--progress-section-color:var(--mantine-color-gray-filled)" class="m_2242eb65 mantine-Progress-section" role="progressbar" aria-valuemax="100" aria-valuemin="0" aria-valuenow="0" aria-valuetext="0%"></div></div></div><button style="padding-inline:0rem" class="mantine-focus-auto m_f0824112 mantine-NavLink-root m_87cf2631 mantine-UnstyledButton-root" type="button"><span class="m_690090b5 mantine-NavLink-section" data-position="left"><div style="--ti-size:var(--ti-size-sm);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="sm"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-message "><path d="M8 9h8"></path><path d="M8 13h6"></path><path d="M18 4a3 3 0 0 1 3 3v8a3 3 0 0 1 -3 3h-5l-5 3v-3h-2a3 3 0 0 1 -3 -3v-8a3 3 0 0 1 3 -3h12"></path></svg></div></span><div class="m_f07af9d2 mantine-NavLink-body"><span class="m_1f6ac4c4 mantine-NavLink-label">Обсуждения (архив)</span><span class="m_57492dcc mantine-NavLink-description"></span></div></button><div style="--toc-bg:var(--mantine-color-blue-light);--toc-color:var(--mantine-color-blue-light-color);--toc-size:var(--mantine-font-size-sm);--toc-radius:var(--mantine-radius-sm);margin-top:var(--mantine-spacing-xl)" class="m_bcaa9990 mantine-TableOfContents-root" data-variant="light" data-size="sm"></div></div><div class="mantine-hidden-from-sm"><div style="--stack-gap:0rem;--stack-align:stretch;--stack-justify:flex-start" class="m_6d731127 mantine-Stack-root"><a style="--button-color:var(--mantine-color-white);margin-bottom:var(--mantine-spacing-xs);padding:0rem;text-decoration:none" class="mantine-focus-auto m_849cf0da mantine-focus-auto m_77c9d27d mantine-Button-root m_87cf2631 mantine-UnstyledButton-root m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/courses/php-overview-of-web-development/lessons/web-in-php/finish_unit?unit=theory" data-disabled="true" data-block="true" disabled=""><span class="m_80f1301b mantine-Button-inner"><span class="m_811560b9 mantine-Button-label">→</span></span></a><button style="--ai-size:var(--ai-size-sm);--ai-bg:transparent;--ai-hover:var(--mantine-color-indigo-light-hover);--ai-color:var(--mantine-color-indigo-light-color);--ai-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;padding-block:var(--mantine-spacing-lg);color:inherit;width:100%" class="mantine-focus-auto m_8d3f4000 mantine-ActionIcon-root m_87cf2631 mantine-UnstyledButton-root" data-variant="subtle" data-size="sm" data-disabled="true" type="button" disabled=""><span class="m_8d3afb97 mantine-ActionIcon-icon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-list-numbers "><path d="M11 6h9"></path><path d="M11 12h9"></path><path d="M12 18h8"></path><path d="M4 16a2 2 0 1 1 4 0c0 .591 -.5 1 -1 1.5l-3 2.5h4"></path><path d="M6 10v-6l-2 2"></path></svg></span></button><button style="--ai-size:var(--ai-size-sm);--ai-bg:transparent;--ai-hover:var(--mantine-color-indigo-light-hover);--ai-color:var(--mantine-color-indigo-light-color);--ai-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;padding-block:var(--mantine-spacing-lg);color:inherit;width:100%" class="mantine-focus-auto mantine-active m_8d3f4000 mantine-ActionIcon-root m_87cf2631 mantine-UnstyledButton-root" data-variant="subtle" data-size="sm" type="button"><span class="m_8d3afb97 mantine-ActionIcon-icon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-message "><path d="M8 9h8"></path><path d="M8 13h6"></path><path d="M18 4a3 3 0 0 1 3 3v8a3 3 0 0 1 -3 3h-5l-5 3v-3h-2a3 3 0 0 1 -3 -3v-8a3 3 0 0 1 3 -3h12"></path></svg></span></button></div></div></div></div></div></div></div>
</main>
<footer class="bg-dark fw-light text-light px-3 py-5">
<div class="row small">
<div class="col-12 col-sm-6 col-md-3">
<div class="h5 mb-3">Хекслет</div>
<ul class="list-unstyled">
<li>
<a class="nav-link link-light py-1 ps-0" href="/pages/about">О нас</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/testimonials">Отзывы</a>
</li>
<li>
<span class="nav-link link-light py-1 ps-0 external-link" data-href="https://b2b.hexlet.io" role="button">Корпоративное обучение</span>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/blog">Блог</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/qna">Вопросы и ответы</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/glossary">Глоссарий</a>
</li>
<li>
<span class="nav-link link-light py-1 ps-0 external-link" data-href="https://help.hexlet.io" data-target="_blank" role="button">Справка</span>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" target="_blank" rel="noopener noreferrer" href="/map">Карта сайта</a>
</li>
</ul>
</div>
<div class="col-12 col-sm-6 col-md-3">
<div class="h5 fw-normal mb-3">Направления</div>
<ul class="list-unstyled">
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_devops">DevOps
</a></li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_data_analytics">Аналитика
</a></li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_backend_development">Бэкенд
</a></li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_programming">Программирование
</a></li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_testing">Тестирование
</a></li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_front_end_dev">Фронтенд
</a></li>
</ul>
</div>
<div class="col-12 col-sm-6 col-md-3">
<div class="h5">Профессии</div>
<ul class="list-unstyled">
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/devops-engineer-from-scratch">DevOps-инженер с нуля</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/go">Go-разработчик</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/java">Java-разработчик</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/python">Python-разработчик </a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/data-analytics">Аналитик данных</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/qa-engineer">Инженер по ручному тестированию</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/php">РНР-разработчик</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/frontend">Фронтенд-разработчик</a>
</li>
</ul>
</div>
<div class="col-12 col-sm-6 col-md-3">
<div class="h5">Навыки</div>
<ul class="list-unstyled">
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/python-django-developer">Django</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/docker">Docker</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/php-laravel-developer">Laravel</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/postman">Postman</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/js-react-developer">React</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/js-rest-api">REST API в Node.js</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/spring-boot">Spring Boot</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/typescript">Typescript</a>
</li>
</ul>
</div>
</div>
<hr>
<div class="row">
<div class="col-12 col-sm-4 col-md-2">
<div class="fs-4">
<ul class="list-unstyled d-flex">
<li class="me-3">
<a aria-label="Telegram" target="_blank" class="link-light" rel="noopener noreferrer nofollow" href="https://t.me/hexlet_ru"><span class="bi bi-telegram"></span>
</a></li>
<li>
<a aria-label="Youtube" target="_blank" class="link-light" rel="noopener noreferrer nofollow" href="https://www.youtube.com/user/HexletUniversity"><span class="bi bi-youtube"></span>
</a></li>
</ul>
</div>
<div class="mb-2 d-flex flex-column">
<a class="link-light text-decoration-none" rel="nofollow" href="mailto:support@hexlet.io">support@hexlet.io</a>
<a class="link-light text-decoration-none py-2" target="_blank" href="https://t.me/hexlet_help_bot">t.me/hexlet_help_bot</a>
</div>
<ul class="list-unstyled d-flex">
<li class="me-3">
<span class="link-light text-decoration-none opacity-50 x-font-size-18 external-link" rel="nofollow" data-href="https://hexlet.io/locale/switch?new_locale=en" data-target="_self" role="button"><span class="my-auto">EN</span>
</span></li>
<li class="me-3">
<span class="link-light text-decoration-none opacity-50 x-font-size-18 opacity-100 external-link" rel="nofollow" data-href="https://ru.hexlet.io/locale/switch?new_locale=ru" data-target="_self" role="button"><span class="my-auto">RU</span>
</span></li>
<li class="me-3">
<span class="link-light text-decoration-none opacity-50 x-font-size-18 external-link" rel="nofollow" data-href="https://kz.hexlet.io/locale/switch?new_locale=kz" data-target="_self" role="button"><span class="my-auto">KZ</span>
</span></li>
</ul>
</div>
<div class="col-12 col-sm-4 col-md-3">
<ul class="list-unstyled fs-4">
<li class="mb-3">
<a class="link-light text-decoration-none" href="tel:8%20800%20100%2022%2047">8 800 100 22 47</a>
<span class="d-block opacity-50 small">бесплатно по РФ</span>
</li>
<li>
<a class="link-light text-decoration-none" href="tel:%2B7%20495%20085%2021%2062">+7 495 085 21 62</a>
<span class="d-block opacity-50 small">бесплатно по Москве</span>
</li>
</ul>
</div>
<div class="col-12 col-sm-4 col-md-3">
<div class="small mb-3">Образовательные услуги оказываются на основании Л035-01298-77/01989008 от 14.03.2025</div>
<ul class="list-unstyled small">
<li>
<a class="nav-link link-light py-1 ps-0" href="/pages/legal">Правовая информация</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/pages/offer">Оферта</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/pages/license">Лицензия</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/pages/contacts">Контакты</a>
</li>
</ul>
</div>
<div class="col-12 col-sm-12 col-md-4 small">
<div class="mb-2">
<div>ООО «<a href="/" class="text-decoration-none link-light">Хекслет Рус</a>»</div>
<div>108813 г. Москва, вн.тер.г. поселение Московский,</div>
<div>г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3</div>
<div>ОГРН 1217300010476</div>
<div>ИНН 7325174845</div>
</div>
<hr>
<div>АНО ДПО «<a href="/" class="text-decoration-none link-light">Учебный центр «Хекслет</a>»</div>
<div>119331 г. Москва, вн. тер. г. муниципальный округ</div>
<div>Ломоносовский, пр-кт Вернадского, д. 29</div>
<div>ОГРН 1247700712390</div>
<div>ИНН 7736364948</div>
</div>
</div>
</footer>
<div id="root-assistant-offcanvas"></div>
<script src="/vite/assets/assistant-CdBlNCiQ.js" crossorigin="anonymous" type="module"></script><link rel="modulepreload" href="/vite/assets/chunk-DsPFFUou.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/init-nkZBEvfU.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/ErrorFallbackBlock-naDSYSy9.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/MarkdownBlock-DbyKWoR_.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/gon-D3e4yh1x.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/mantine-CGMYrt2Y.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/shiki-V011pkdv.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/utils-DRqSHbQE.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/routes-CCH8ilKF.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/lib-XR8Qr8kR.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/dist-GCHh59xr.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Box-B5-OOzBf.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/notifications.store-C-3AFSMn.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/useIsomorphicEffect-HJ6VK0D3.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/lib-KSp6QbZ0.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/axios-BEvgo0ym.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/classnames-l6ipYlLR.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/dayjs.min-BkKovM-s.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/debounce-jMQ_Cf4f.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/i18next-BlSq9s7B.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/client-U9M77rxp.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/react-dom-DaLxUz_h.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/useTranslation-Bx1Cdrkz.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/compiler-runtime-6XxiPFnt.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/jsx-runtime-CwjcCKJi.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/react-CkL4ZRHB.js" as="script" crossorigin="anonymous">
<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v67327c56f0bb4ef8b305cae61679db8f1769101564043" integrity="sha512-rdcWY47ByXd76cbCFzznIcEaCN71jqkWBBqlwhF1SY7KubdLKZiEGeP7AyieKZlGP9hbY/MhGrwXzJC/HulNyg==" data-cf-beacon='{"version":"2024.11.0","token":"d11015b65d11429ea6b4a2ef37dd7e0b","server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script>
</body>
</html>