Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Скрипты для командной строки

PHP работает не только на сайте. Скрипт можно запустить из терминала: импортировать файл, разослать письма, очистить старые данные, пересчитать статистику. Такие скрипты не зависят от браузера и могут работать сколько угодно долго.

Примеры предназначены для терминала и здесь не запускаются — выполните их у себя.

Запуск

<?php
// hello.php
 
echo "Привет из терминала!\n";
php hello.php

Тега <html> и заголовков здесь нет: вывод попадает прямо в терминал. Перенос строки ставят сами — символом \n или константой PHP_EOL.

Аргументы

Всё, что написано после имени файла, попадает в массив $argv. Нулевой элемент — имя скрипта, $argc — число элементов:

<?php
// greet.php
 
if ($argc < 2) {
    echo "Использование: php greet.php имя\n";
    exit(1);
}
 
echo "Привет, {$argv[1]}!\n";
php greet.php Анна

Чтение ввода

Скрипт может задать вопрос и дождаться ответа. Ввод читают из потока STDIN:

<?php
// ask.php
 
echo 'Как вас зовут? ';
$name = trim(fgets(STDIN));
 
echo "Здравствуйте, $name!\n";

fgets() возвращает строку вместе с переносом, поэтому её обрезают функцией trim().

Ошибки и код завершения

Сообщения об ошибках пишут в отдельный поток STDERR, а скрипт завершают кодом: 0 — успех, любое другое число — сбой:

<?php
// import.php
 
$file = $argv[1] ?? '';
 
if (!is_file($file)) {
    fwrite(STDERR, "Файл не найден: $file\n");
    exit(1);
}
 
echo 'Строк: ', count(file($file)), "\n";
exit(0);

По коду завершения другие программы — планировщик, система размещения — понимают, удалась ли операция.

Именованные параметры

Функция getopt() разбирает параметры вида --limit=10:

<?php
// export.php
 
$options = getopt('', ['limit:', 'format::', 'verbose']);
 
$limit = (int) ($options['limit'] ?? 100);
$format = $options['format'] ?? 'csv';
$verbose = isset($options['verbose']);
 
echo "Формат: $format, записей: $limit\n";
php export.php --limit=10 --format=json --verbose

Одно двоеточие после имени — значение обязательно, два — необязательно, без двоеточий — параметр-флаг.

Полезные ключи PHP

КомандаЧто делает
php -vПоказывает версию
php -l file.phpПроверяет синтаксис, не запуская
php -r 'echo 2 + 2;'Выполняет код из строки
php -aИнтерактивный режим
php -S localhost:8000Запускает сервер для разработки
php -mПоказывает подключённые расширения

Запуск по расписанию

На сервере скрипты запускает планировщик cron. Строка в его таблице задаёт время и команду:

0 3 * * * php /var/www/shop/cleanup.php

Этот скрипт выполняется каждый день в 3:00.

Частая ошибка

Относительные пути в скрипте отсчитываются не от файла, а от папки, из которой его запустили. file('data.csv') найдёт файл при запуске из папки проекта и не найдёт из cron. Стройте пути от константы __DIR__ — папки, где лежит сам скрипт:

<?php
// report.php
 
$rows = file(__DIR__ . '/data.csv');

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.