exec

(PHP 4, PHP 5, PHP 7, PHP 8)

execВыполняет внешнюю программу

Описание

exec(string $command, array &$output = null, int &$result_code = null): string|false

Функция exec() выполняет команду command.

Список параметров

command

Команда, которую выполнит функция.

output

Функция заполнит массив строками вывода команды, если в списке аргументов передали переменную для параметра output. Функция не включит в массив пробельные символы наподобие \n, которые завершают строки. Обратите внимание: функция exec() добавит новые элементы в конец массива, если массив уже содержит элементы. Перед передачей элементов в функцию exec() на массиве вызывают языковую конструкцию unset(), если добавлять новые элементы в конец массива не требуется.

result_code

Функция запишет в эту переменную статус возврата команды, которую выполнила система, если аргументы передали и в параметр result_code, и в параметр output.

Возвращаемые значения

Функция возвращает последнюю строку из результата команды. Функция passthru() помогает, когда требуется выполнить команду и вернуть сырые данные из команды без посредников.

Функция возвращает false, если возникла ошибка.

Функция вернёт данные вывода команды, которая выполнилась, только если установили параметр output.

Ошибки

Выдаётся ошибка уровня E_WARNING, если функция exec() не выполнила команду command.

Функция выбрасывает исключение ValueError, если параметр command не указали или параметр содержит нулевые байты.

Список изменений

Версия Описание
8.0.0 Теперь функция exec() выбрасывает исключение ValueError, если параметр command не указали или параметр содержит нулевые байты; раньше функция выдавала ошибку уровня E_WARNING и возвращала false.

Примеры

Пример #1 Пример выполнения внешней программы функцией exec()

<?php

// Выводит имя пользователя, от имени которого запустили процесс php/httpd
// (применимо к системам с командой whoami в системном пути)
$output = null;
$retval = null;
exec('whoami', $output, $retval);
echo
"Команда вернёт статус $retval и значение:\n";
print_r($output);

?>

Вывод приведённого примера будет похож на:

Команда вернёт статус 0 и значение:
Array
(
    [0] => cmb
)

Примечания

Внимание

Команду экранируют функцией escapeshellcmd(), а отдельные аргументы команды функцией escapeshellarg(), когда разрешают передавать в функцию пользовательские данные, чтобы пользователи обманом не заставили систему выполнить произвольные команды.

Замечание:

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

Замечание:

В Windows функция exec() запускает командную оболочку cmd.exe, чтобы запустить команду. Внешнюю программу без запуска командной оболочки cmd.exe запускают вызовом функцию proc_open() с опцией bypass_shell.

Смотрите также

  • system() - Выполняет внешнюю программу и отображает вывод
  • passthru() - Выполняет внешнюю программу и отображает необработанный вывод
  • escapeshellcmd() - Экранирует метасимволы командной строки
  • pcntl_exec() - Выполняет указанную программу в пространстве текущего процесса
  • Оператор исполнения