Создание собственного скрипта на языке PHP
PHP скрипты являются основой серверной логики веб-сайтов и приложений. Понимание процесса их создания позволяет автоматизировать задачи, обрабатывать данные и взаимодействовать с пользователями. В этой статье рассмотрены несколько подходов: от простого вывода информации до структурированного кода с классами и автозагрузкой.
Основные методы создания PHP скрипта
Базовый веб-скрипт с обработкой GET параметра
Самый распространённый случай – скрипт, который принимает данные от пользователя и возвращает ответ. Ниже приведён полный пример файла greet.php.
<?php
$name = isset($_GET['name']) ? htmlspecialchars($_GET['name']) : 'Гость';
echo "Привет, $name!";
создать скрипт php (создание php скрипта)
Для запуска поместите файл в корень веб-сервера (например, встроенный PHP сервер: php -S localhost:8000) и откройте в браузере http://localhost:8000/greet.php?name=Мир.
Типичные ошибки: пустой ответ – проверьте, что короткие теги не отключены (директива short_open_tag в php.ini); синтаксические ошибки – включите отображение ошибок (error_reporting(E_ALL); ini_set('display_errors', 1);).
Как создать скрипт для командной строки (CLI)?
CLI скрипты удобны для фоновых задач, кранов или пакетной обработки. Добавьте шебанг и используйте $argv.
#!/usr/bin/php
<?php
if ($argc > 1) {
echo "Привет, {$argv[1]}!\n";
} else {
echo "Привет, мир!\n";
}
Сохраните как hello.php, сделайте исполняемым (chmod +x hello.php) и запустите: ./hello.php Вася.
Проблема: если шебанг не работает, выполните php hello.php напрямую. Ошибка «не найдено» – проверьте путь к PHP (which php).
Как подключиться к базе данных MySQL из PHP?
Для работы с БД чаще всего используют PDO (Php Data Objects) – универсальный интерфейс.
<?php
$dsn = 'mysql:host=localhost;dbname=test;charset=utf8';
$user = 'root';
$pass = '';
try {
$pdo = new PDO($dsn, $user, $pass);
$stmt = $pdo->query('SELECT * FROM users');
foreach ($stmt as $row) {
echo $row['name'] . '<br>';
}
} catch (PDOException $e) {
echo 'Ошибка: ' . $e->getMessage();
}
Убедитесь, что расширение php_pdo_mysql включено в php.ini.
Ошибки: “could not find driver” – установите необходимое расширение; “Connection refused” – проверьте хост и порт MySQL.
Как использовать Composer и автозагрузку классов?
Composer позволяет управлять зависимостями и автоматически загружать классы. Создайте composer.json:
{
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
}
Выполните composer dump-autoload. Теперь класс App\User в файле src/User.php будет загружен автоматически:
<?php
require 'vendor/autoload.php';
$user = new App\User();
Проблема: класс не найден – проверьте путь и пространство имён; не забудьте запустить composer install хотя бы один раз.
Как создать endpoint для обработки AJAX запросов?
Современные приложения часто отправляют запросы на сервер асинхронно. Скрипт должен возвращать JSON.
<?php
header('Content-Type: application/json; charset=utf-8');
$data = ['status' => 'ok', 'message' => 'Данные получены'];
echo json_encode($data);
Клиент может обратиться к этому скрипту через fetch или XMLHttpRequest.
Проблема: CORS – если запрос с другого домена, добавьте заголовок header('Access-Control-Allow-Origin: *');.
Как организовать код в классах (ООП)?
Структурирование кода улучшает его читаемость и поддерживаемость. Пример класса Car:
<?php
class Car {
private $model;
public function __construct($model) {
$this->model = $model;
}
public function getModel() {
return $this->model;
}
}
$myCar = new Car('Tesla');
echo $myCar->getModel();
Распространённая ошибка: попытка вызвать нестатический метод статически – используйте new для создания экземпляра.
Расширенные примеры для самостоятельного изучения
Чтение и запись файлов
Работа с файловой системой – частая задача. Пример записи в лог и чтения.
<?php
$file = 'log.txt';
$content = "Дата: " . date('Y-m-d H:i:s') . "\n";
file_put_contents($file, $content, FILE_APPEND);
$read = file_get_contents($file);
echo nl2br($read);
Результат: в файл добавится строка с датой, затем весь содержимое выведется на экран.
Ошибки: отсутствие прав на запись – проверьте права на папку; file_get_contents вернёт false при ошибке.
Использование сессий для хранения данных пользователя
Сессии позволяют сохранять состояние между запросами. Типичное использование – авторизация.
<?php
session_start();
if (!isset($_SESSION['visits'])) {
$_SESSION['visits'] = 0;
}
$_SESSION['visits']++;
echo 'Вы посетили страницу ' . $_SESSION['visits'] . ' раз(а).';
Результат: при каждом обновлении счётчик увеличивается.
Проблема: сессия не сохраняется – проверьте, что session_start() вызывается до любого вывода.
Отправка HTTP запросов через cURL
cURL используется для интеграции с внешними API. Пример получения данных с публичного API.
<?php
$ch = curl_init('https://api.icndb.com/jokes/random');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Ошибка cURL: ' . curl_error($ch);
} else {
$data = json_decode($response, true);
echo 'Шутка: ' . $data['value']['joke'];
}
curl_close($ch);
Результат: выводится случайная шутка.
Ошибки: SSL сертификаты – если возникает проблема с HTTPS, попробуйте добавить curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); (не рекомендуется для продакшена).
Обработка исключений с кастомными классами
Создание собственных исключений улучшает читаемость кода.
<?php
class ValidationException extends Exception {}
try {
$age = -5;
if ($age < 0) {
throw new ValidationException('Возраст не может быть отрицательным');
}
} catch (ValidationException $e) {
echo 'Ошибка валидации: ' . $e->getMessage();
} catch (Exception $e) {
echo 'Общая ошибка: ' . $e->getMessage();
}
Результат: выводится “Ошибка валидации: Возраст не может быть отрицательным”.
Типичная ошибка: забыть указать блок catch – необработанное исключение приведёт к фатальной ошибке.
Простой роутер для обработки URL
Роутер позволяет направлять запросы к разным обработчикам в зависимости от пути.
<?php
$uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
switch ($uri) {
case '/':
echo 'Главная страница';
break;
case '/about':
echo 'О нас';
break;
default:
http_response_code(404);
echo 'Страница не найдена';
}
Результат: при переходе на /about выводится “О нас”.
Проблема: веб-сервер может не направлять все запросы на скрипт – настройте .htaccess или nginx для перенаправления на index.php.