PHP — итоги
Кратко — что стоит унести из раздела "PHP". Если пункт кажется туманным — откройте указанную главу или оглавление.
FAQ — Часто задаваемые вопросы
Типичные сбои и ситуации, с которыми сталкиваются новички при работе с PHP на сервере. Здесь — что делать и где копать в главах; определения для зачёта — в чек-листе.
Вопрос. Страница белая, в браузере пусто, ошибок не видно.
Ответ. На production и часто на хостинге display_errors выключен — смотрите лог PHP (error_log) или временно включите вывод в php.ini/.user.ini на локалке. Проверьте синтаксис: php -l file.php. Подробнее здесь — первая программа, локальная среда.
Вопрос. Изменил .php, обновил страницу — старый текст на месте.
Ответ. Срабатывает OPcache или кэш прокси/CDN. Перезапустите PHP-FPM, очистите opcache в dev или отключите кэширование для разработки. Убедитесь, что правите тот файл, который реально отдаёт vhost. Подробнее здесь — локальная среда, что такое PHP.
Вопрос. http://localhost/script.php даёт 404 Not Found.
Ответ. Файл лежит не в DocumentRoot виртуального хоста или Apache/Nginx не настроен на PHP. Проверьте путь Open Server/XAMPP и что сервер запущен. Подробнее здесь — первая программа, локальная среда.
Вопрос. Форма отправлена, а $_POST пустой.
Ответ. У <form> нет method="post" и enctype="multipart/form-data" для файлов; поля без name; форма уходит на другой URL. Для отладки выведите $_SERVER['REQUEST_METHOD']. Подробнее здесь — данные со страницы, загрузка файлов.
Вопрос. Авторизация "слетает" при переходе на следующую страницу.
Ответ. Не вызван session_start() до вывода HTML, другой домен/путь cookie, HTTPS-only cookie на HTTP. Проверьте session.save_path и права на каталог сессий. Подробнее здесь — сессии, данные со страницы.
Вопрос. composer — "command not found" после установки PHP.
Ответ. Composer — отдельная утилита, не входит в PHP. Скачайте composer.phar или установщик, добавьте в PATH; в Open Server часто есть пункт меню. Подробнее здесь — Composer, локальная среда.
Вопрос. Class "App\Models\User" not found после composer install.
Ответ. Не сгенерирован autoload — выполните composer dump-autoload, проверьте namespace/use и PSR-4 в composer.json. Подробнее здесь — Composer, пространства имён.
Вопрос. Поменял .env в Laravel — настройки не изменились.
Ответ. Конфиг мог быть закэширован: php artisan config:clear и cache:clear. В production после деплоя иногда нужен config:cache заново. Подробнее здесь — Laravel, локальная среда.
Вопрос. Запрос работает в phpMyAdmin, в PHP — ошибка или пустой результат.
Ответ. Другая БД/пользователь в DSN, не тот charset, параметры не привязаны в PDO. Сравните host, dbname, user с теми же, что в панели. Подробнее здесь — PDO, phpMyAdmin.
Вопрос. Загрузка файла: "upload_max_filesize" / "POST Content-Length exceeded".
Ответ. Лимиты в php.ini (upload_max_filesize, post_max_size) и на nginx client_max_body_size. Увеличьте на dev, на production — валидируйте размер в коде. Подробнее здесь — загрузка файлов, phpMyAdmin FAQ.
Вопрос. JavaScript с фронта получает CORS error при вызове PHP API.
Ответ. Браузер блокирует кросс-домен без заголовков Access-Control-Allow-Origin (и preflight для POST/JSON). Настройте CORS в Laravel/Symfony middleware или nginx, на dev можно прокси через тот же origin. Подробнее здесь — Sanctum/API, HTTP основа.
Вопрос. "0" == false и "abc" == 0 дают true — это баг?
Ответ. Это слабое сравнение == с приведением типов. Для логики и безопасности используйте === и строгий режим declare(strict_types=1);. Подробнее здесь — типы и операторы, типизация.
Вопрос. Старый урок вызывает mysql_connect — fatal error.
Ответ. Расширение mysql_* удалено в PHP 7+. Перепишите на PDO или MySQLi; учебники до 2010-х нужно адаптировать. Подробнее здесь — PDO, история PHP.
Вопрос. XAMPP: Apache не стартует — порт 80 занят.
Ответ. Часто мешает Skype, IIS или другой веб-сервер. Смените порт Apache на 8080 в конфиге или освободите 80-й. Подробнее здесь — локальная среда, первая программа.
Вопрос. PHPUnit: "No tests executed" — файлы лежат рядом.
Ответ. Имена классов/методов должны соответствовать соглашениям PHPUnit (*Test.php, методы test* или атрибут #[Test]), autoload из composer. Запускайте из корня проекта: ./vendor/bin/phpunit. Подробнее здесь — Composer, исключения и тесты.
Вопрос. Laravel migrate: "Table already exists".
Ответ. Таблица создана вручную или миграции уже частично применены. Сверьте migrations, на dev можно migrate:fresh (уничтожит данные). На production — только точечные fix-миграции. Подробнее здесь — Laravel, PDO.
Вопрос. require падает на Windows: путь с \ не находит файл на Linux-сервере.
Ответ. На Linux пути чувствительны к регистру, разделитель — /. Используйте __DIR__ и DIRECTORY_SEPARATOR или функции фреймворка. Подробнее здесь — работа с файлами, первая программа.
Вопрос. После foreach ($arr as &$v) массив ведёт себя странно в следующем цикле.
Ответ. Ссылка $v остаётся привязанной к последнему элементу — вызовите unset($v) после цикла. Подробнее здесь — массивы, циклы.
Вопрос. json_encode вернул false — в API пустой ответ.
Ответ. Частая причина — невалидная UTF-8 или NAN/INF в данных. Проверьте json_last_error_msg(), нормализуйте строки. Подробнее здесь — сериализация, Symfony/API.
Вопрос. password_verify всегда false, хотя пароль верный.
Ответ. В БД сохранён не тот hash (md5/sha1 вместо password_hash), обрезана строка в VARCHAR(32) или лишние пробелы при чтении. Пересохраните hash через PASSWORD_BCRYPT или ARGON2ID. Подробнее здесь — форма и БД, безопасность.
Вопрос. Nginx отдаёт .php как скачиваемый файл, а не выполняет.
Ответ. Не настроен fastcgi_pass к PHP-FPM (location ~ \.php$). Проверьте сокет/port pool и SCRIPT_FILENAME. Подробнее здесь — что такое PHP, локальная среда.
Вопрос. strtotime('tomorrow') на сервере даёт "вчера" относительно Москвы.
Ответ. Часовой пояс PHP по умолчанию UTC — задайте date.timezone в php.ini или date_default_timezone_set(). Подробнее здесь — функции даты, локальная среда.
Вопрос. WordPress после установки плагина — белый экран админки.
Ответ. Fatal error в плагине — переименуйте папку плагина через FTP/файловый менеджер, включите WP_DEBUG в wp-config.php на staging. Подробнее здесь — WordPress, исключения.
Вопрос. С чего начать — "голый" PHP или сразу Laravel?
Ответ. Сначала синтаксис, формы, PDO, сессии на простых скриптах — иначе магия фреймворка непонятна. Laravel логичен после формы и БД. Подробнее здесь — оглавление, Laravel.
Вопрос. На хостинге PHP 7.4, локально 8.3 — проект падает после заливки.
Ответ. В коде могли использоваться функции только PHP 8+ (str_contains, enum, readonly). Сверьте composer.json platform.php и версию на хостинге; обновите тариф или понизьте код. Подробнее здесь — современный PHP, Composer.
Вопрос. На странице вместо PHP-кода виден текст <?php echo ... ?>.
Ответ. Файл открыт не через веб-сервер (file://) или расширение не .php, или PHP не подключён к Apache. Запускайте через http://localhost/.... Подробнее здесь — что такое PHP, первая программа.
Вопрос. Livewire не обновляет поле — в Network нет запросов.
Ответ. Не подключены @livewireStyles / @livewireScripts, конфликт версий Livewire и Laravel, или компонент вне layout. Проверьте консоль браузера на JS-ошибки. Подробнее здесь — Livewire, Laravel.
Вопрос. SQL-инъекция "не получилась" в учебном примере — значит, PDO всегда спасает?
Ответ. PDO безопасен только с подготовленными выражениями — конкатенация "SELECT … WHERE id=".$_GET['id'] уязвима и с PDO. Подробнее здесь — PDO, форма и БД.
Вопрос. PHP "устарел" — имеет ли смысл учить его в 2025 году?
Ответ. PHP по-прежнему держит огромную долю CMS и хостингов; Laravel/Symfony активно развиваются. Для чистого фронта без сервера PHP не нужен; для backend-сайтов и WordPress — да. Подробнее здесь — оглавление, история.
Вопрос. Как установить PHP на Windows?
Ответ. Проще всего — Open Server, XAMPP или Laragon: PHP + Apache/Nginx + MySQL одним пакетом. Отдельно — скачать PHP zip с php.net и прописать в PATH. Подробнее здесь — локальная среда, первая программа.
Вопрос. PHP для начинающих с нуля — пошаговый план.
Ответ. Первая программа → синтаксис и типы → формы и $_POST → сессии → PDO → Composer → Laravel. Траектория в intro раздела. Подробнее здесь — первая программа, чек-лист.
Вопрос. Чем PHP отличается от JavaScript?
Ответ. PHP выполняется на сервере и отдаёт HTML; JavaScript — в браузере (и на Node.js для backend). Для сайта обычно нужны оба. Подробнее здесь — что такое PHP, JavaScript — о разделе.
Вопрос. PHP или Python для веб-разработки?
Ответ. PHP исторически силён в shared-хостинге и CMS (WordPress); Python — в Django/FastAPI и data-heavy backend. Оба годятся для API; выбор по вакансиям и стеку команды. Подробнее здесь — оглавление PHP, Python.
Вопрос. Как подключить MySQL к PHP (PDO)?
Ответ. Расширение PDO, DSN mysql:host=...;dbname=..., new PDO(...), запросы через prepare + execute с плейсхолдерами. Подробнее здесь — PDO, форма и запись в БД.
Вопрос. Laravel — что это и зачем учить?
Ответ. Laravel — PHP-фреймворк для веб-приложений: маршруты, ORM Eloquent, миграции, Blade, очереди. Ускоряет backend после базового PHP. Подробнее здесь — Laravel, Livewire.
Вопрос. Как сделать сайт на PHP своими руками?
Ответ. Локальный сервер → файлы .php в htdocs → HTML-шаблон + PHP для данных из БД → формы и сессии. Для продакшена — хостинг с PHP 8.1+. Подробнее здесь — первая программа, данные со страницы.
Вопрос. PHP 8 — что нового по сравнению с PHP 7?
Ответ. JIT, атрибуты, union types, match, named arguments, nullsafe ?->, enum и readonly (8.1+). Новые проекты — минимум PHP 8.1. Подробнее здесь — enum, readonly, атрибуты, история.
Вопрос. Composer PHP — как установить и пользоваться?
Ответ. Скачайте установщик с getcomposer.org, в проекте composer init / composer require vendor/package, autoload PSR-4 в vendor/. Подробнее здесь — Composer.
Вопрос. WordPress и PHP — нужно ли учить язык?
Ответ. Для тем и плагинов — базовый PHP обязателен (хуки, шаблоны, $wpdb). Только админка без кода — язык не нужен. Подробнее здесь — WordPress, ООП в PHP.
Вопрос. Symfony или Laravel — что выбрать?
Ответ. Laravel быстрее старт и больше туториалов; Symfony — гибкая модульная архитектура для крупных enterprise-проектов. Оба на PHP 8+. Подробнее здесь — Laravel, Symfony.
Вопрос. Зарплата PHP разработчика в России — от чего зависит?
Ответ. Уровень (junior/middle), фреймворк (Laravel), город, удалёнка и домен (финтех vs студия). Цифры быстро устаревают — смотрите свежие обзоры и вакансии. Подробнее здесь — карьера в IT, маршрут PHP.
Вопрос. Ошибка 500 Internal Server Error на PHP сайте — что проверить?
Ответ. Лог веб-сервера и error_log PHP, синтаксис (php -l), права на файлы, версия PHP на хостинге, .htaccess. На локалке включите display_errors. Подробнее здесь — исключения, локальная среда.
Вопрос. PDO PHP пример подключения к базе данных.
Ответ. Создайте PDO с DSN и логином, включите режим исключений, используйте только prepared statements для пользовательского ввода. Подробнее здесь — PDO, MySQL в энциклопедии.
Вопрос. PHP сессии и авторизация — как сделать вход на сайт?
Ответ. session_start(), сохранить id пользователя в $_SESSION после проверки пароля (password_verify), на каждой странице проверять сессию. Подробнее здесь — сессии, форма и БД.
Вопрос. Open Server PHP — как запустить первый скрипт?
Ответ. Запустите Open Server, положите .php в доменную папку, откройте http://имя-домена/script.php. Версию PHP меняют в настройках модуля. Подробнее здесь — локальная среда, первая программа.
Вопрос. PHPUnit — как писать тесты на PHP?
Ответ. composer require --dev phpunit/phpunit, классы *Test с методами test*, запуск ./vendor/bin/phpunit. В Laravel — php artisan test. Подробнее здесь — Composer, исключения.
Вопрос. Можно ли выучить PHP за месяц?
Ответ. За месяц реалистично освоить синтаксис, формы, PDO и простой CRUD; фреймворк и Laravel — ещё 1–2 месяца практики. Без ежедневного кода срок растёт. Подробнее здесь — траектория в intro, чек-лист.
Вопрос. PHP backend — что это значит?
Ответ. Серверная логика: приём HTTP, работа с БД, сессии, API JSON — код на PHP, невидимый пользователю в браузере. Подробнее здесь — что такое PHP, frontend и backend.
Вопрос. Защита от SQL-инъекции и XSS в PHP.
Ответ. SQL — prepared statements; XSS — htmlspecialchars при выводе в HTML, Content-Security-Policy; пароли — password_hash. Подробнее здесь — PDO, основы ИБ.
Вопрос. REST API на PHP — как сделать?
Ответ. Вручную — маршрутизация по URI + JSON json_encode; проще — Laravel/Symfony с ресурсными контроллерами и Sanctum для токенов. Подробнее здесь — API + Sanctum, HTTP основа.
Вопрос. Миграция с PHP 7 на PHP 8 — на что обратить внимание?
Ответ. Удалены устаревшие функции, ужесточены типы, предупреждения стали ошибками. Прогоните код на 8.x локально, обновите Composer-зависимости. Подробнее здесь — современный PHP, история.
Вопрос. Массивы в PHP — как создать и перебрать?
Ответ. [] или array(), доступ $a[0], цикл foreach ($a as $key => $value), функции array_map, count. Подробнее здесь — массивы, синтаксис.
Вопрос. Хостинг для PHP сайта — что выбрать новичку?
Ответ. Любой с поддержкой PHP 8.1+, MySQL/MariaDB, SSH по желанию; для Laravel — Composer и нужные extensions. Shared-хостинг подходит для WordPress и учебных проектов. Подробнее здесь — локальная среда, как работают сайты.
Вопрос. phpMyAdmin — как зайти и создать базу?
Ответ. Обычно http://localhost/phpmyadmin на Open Server/XAMPP, логин root (пароль по документации стека). Вкладка "Базы данных" → создать → импорт SQL. Подробнее здесь — phpMyAdmin — о разделе.
Что запомнить
PHP — это серверный, интерпретируемый язык программирования общего назначения, изначально созданный для веб-разработки. Он выполняется на стороне сервера и генерирует HTML, который отправляется клиенту. Благодаря простоте освоения, глубокой интеграции с веб-серверами и широкой поддержкой хостингов, PHP стал одним из самых распространённых языков для создания динамических сайтов и веб-приложений.
Основные области применения PHP:
- Веб-сайты и CMS — WordPress, Drupal, Joomla;
- API и микросервисы — через фреймворки Laravel, Symfony, Slim;
- Командные скрипты: CLI-приложения для автоматизации задач;
- Системы электронной коммерции — Magento, Shopware, WooCommerce;
- Корпоративные приложения — внутренние порталы, CRM, ERP.
Отдельный разбор WordPress смотрите в справочнике — WordPress.
Ключевые особенности языка:
- Слабая и динамическая типизация — переменные не требуют объявления типа, преобразования происходят автоматически;
- Широкая поддержка веб-стандартов — работа с HTTP, cookies, сессиями, загрузкой файлов "из коробки";
- Мощная стандартная библиотека — функции для работы с текстом, массивами, датами, файлами, сетью, базами данных;
- Поддержка объектно-ориентированного программирования — начиная с PHP 5, значительно улучшена в PHP 7 и 8;
- Современные возможности — начиная с PHP 7.4 — типизация (скалярные типы, возвращаемые типы), анонимные классы, стрелочные функции, атрибуты (в PHP 8.0);
- Экосистема через Composer — менеджер зависимостей и автозагрузки, обеспечивающий модульность и повторное использование кода.
Современный PHP (8.0–8.3) предлагает:
- JIT-компиляцию — повышение производительности для CPU-интенсивных задач;
- Атрибуты — нативная поддержка аннотаций вместо docblock-парсинга;
- Union types, nullsafe operator, match expression, named arguments — улучшения читаемости и надёжности;
- Строгий режим типов — возможность включить строгую проверку типов на уровне файла.
Три основных правила эффективной работы с PHP:
- Использовать современную версию языка (PHP 8.1 или выше) и включать строгую типизацию;
- Следовать стандартам кодирования (PSR-12) и использовать Composer для управления зависимостями;
- Писать тестируемый, слабосвязанный код с применением внедрения зависимостей и паттернов проектирования.
Три фундаментальных момента:
- PHP — это зрелая платформа с активной разработкой и промышленным применением;
- Его сила — в экосистеме, сообществе и готовых решениях (фреймворки, пакеты, инструменты);
- Безопасность и производительность достигаются не самим языком, а грамотной архитектурой и практиками разработки.
Проверьте себя: Чек-лист самопроверки — Laravel, Livewire, Filament.
Куда идти дальше
| Тема | Раздел |
|---|---|
| "CSS — о разделе" | "CSS — о разделе" |
| "ASP.NET - веб-платформа Microsoft" | "ASP.NET - веб-платформа Microsoft" |
| "JavaScript — о разделе" | "JavaScript — о разделе" |
| "C# — о разделе" | "C# — о разделе" |
Проверьте себя: Чек-лист самопроверки.
Базовый разбор HTTP и HTTPS находится в отдельной статье — HTTP как основа веб-интеграций.