Перейти к основному содержимому

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-кода виден текст &lt;?php echo ... ?&gt;.

Ответ. Файл открыт не через веб-сервер (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:

  1. Использовать современную версию языка (PHP 8.1 или выше) и включать строгую типизацию;
  2. Следовать стандартам кодирования (PSR-12) и использовать Composer для управления зависимостями;
  3. Писать тестируемый, слабосвязанный код с применением внедрения зависимостей и паттернов проектирования.

Три фундаментальных момента:

  • PHP — это зрелая платформа с активной разработкой и промышленным применением;
  • Его сила — в экосистеме, сообществе и готовых решениях (фреймворки, пакеты, инструменты);
  • Безопасность и производительность достигаются не самим языком, а грамотной архитектурой и практиками разработки.

Проверьте себя: Чек-лист самопроверки — Laravel, Livewire, Filament.


Куда идти дальше

ТемаРаздел
"CSS — о разделе""CSS — о разделе"
"ASP.NET - веб-платформа Microsoft""ASP.NET - веб-платформа Microsoft"
"JavaScript — о разделе""JavaScript — о разделе"
"C# — о разделе""C# — о разделе"

Проверьте себя: Чек-лист самопроверки.


Основа по протоколу

Базовый разбор HTTP и HTTPS находится в отдельной статье — HTTP как основа веб-интеграций.