Прокачайте свои PHP-скрипты: запускайте команды Drush как босс!

Вы устали вручную выполнять повторяющиеся задачи в своем проекте Drupal? Хотели бы вы, чтобы существовал способ автоматизировать эти задачи и сэкономить драгоценное время и силы? Что ж, пристегнитесь, потому что я собираюсь показать вам, как запускать команды Drush из PHP как настоящий босс!

Drush — мощный инструмент командной строки для управления проектами Drupal. Он позволяет выполнять широкий спектр операций, таких как очистка кэша, обновление модулей, запуск обновлений баз данных и многое другое. Хотя Drush обычно используется из командной строки, существует несколько способов включить его в ваши PHP-скрипты.

Метод 1: использование Shell_exec

Один простой способ запуска команд Drush из PHP — использование функции shell_exec. Эта функция позволяет выполнять команды оболочки и получать их выходные данные. Вот пример:

$command = 'drush cache:clear';
$output = shell_exec($command);
echo $output;

В этом примере мы выполняем команду drush cache:clearи записываем выходные данные. Переменная $outputбудет содержать выходные данные команды, которые мы затем сможем обработать или отобразить по мере необходимости.

Метод 2: использование exec

Другой вариант — использовать функцию exec, которая похожа на shell_exec, но возвращает только последнюю строку вывода команды. Вот пример:

$command = 'drush pm:enable module_name';
$output = exec($command);
echo $output;

В данном случае мы включаем модуль Drupal с помощью команды drush pm:enable. Последняя строка вывода команды будет сохранена в переменной $outputи отображена.

Метод 3. Использование сквозного подключения

Если вы хотите напрямую отображать вывод команды Drush, не записывая его в переменную, вы можете использовать функцию passthru. Эта функция отправляет вывод команды непосредственно в браузер. Вот пример:

$command = 'drush status';
passthru($command);

В этом примере мы запускаем команду drush status, которая отображает информацию об установке Drupal. Результат будет напрямую распечатан в браузере.

Метод 4: использование proc_open

Для более сложных сценариев вы можете использовать функцию proc_openдля запуска команд Drush. Эта функция обеспечивает больший контроль над выполнением команд и позволяет взаимодействовать с процессом. Вот упрощенный пример:

$descriptors = [
    0 => ['pipe', 'r'], // Input pipe
    1 => ['pipe', 'w'], // Output pipe
    2 => ['pipe', 'w'], // Error pipe
];
$process = proc_open('drush cache:rebuild', $descriptors, $pipes);
// Read output and error streams
$output = stream_get_contents($pipes[1]);
$error = stream_get_contents($pipes[2]);
// Close the pipes and the process
fclose($pipes[0]);
fclose($pipes[1]);
fclose($pipes[2]);
proc_close($process);
echo $output;

В этом примере мы используем proc_openдля запуска команды drush cache:rebuild. Мы определяем три канала для потоков ввода, вывода и ошибок. После выполнения команды мы читаем потоки вывода и ошибок, а затем закрываем каналы и процесс.

Метод 5. Использование Drush API

Если вы предпочитаете более структурированный подход, вы можете использовать Drush API непосредственно в своих PHP-скриптах. Drush API предоставляет набор функций, которые позволяют программно выполнять различные операции, связанные с Drupal. Вот пример:

require_once '/path/to/drush/includes/bootstrap.inc';
drush_bootstrap(DRUSH_BOOTSTRAP_DRUPAL_FULL);
// Run a Drush command programmatically
$result = drush_invoke_process('@site', 'cache-clear', array('all'));

В этом примере мы включаем загрузочный файл Drush и загружаем Drupal с помощью функции drush_bootstrap. Затем мы можем использовать функцию drush_invoke_processдля программного запуска команды Drush. Результат команды будет сохранен в переменной $resultдля дальнейшей обработки.

И вот оно! Теперь у вас есть несколько способов запуска команд Drush из PHP и автоматизации ваших сценариев. Независимо от того, предпочитаете ли вы использовать shell_exec, exec, passthru, proc_openили Drush API, эти методы помогут вам сэкономьте время и силы на управлении проектами Drupal.

Не забывайте использовать эти методы с осторожностью, поскольку выполнение команд оболочки из PHP может представлять угрозу безопасности, если не пройти должную очистку и проверку. Всегда проверяйте, что вы используете проверенные команды, и очищайте любой пользовательский ввод, чтобы предотвратить атаки путем внедрения команд.

Теперь автоматизируйте эти утомительные задачи с помощью Drush и PHP! Ваши проекты Drupal будут вам благодарны.