Скрипт PHP в основном используется для разработки веб-приложений, но его можно использовать и для других целей. PHP имеет несколько встроенных функций для выполнения системных команд. exec() – один из них. Он используется для выполнения команд оболочки или любой программы из сценария PHP. В этом руководстве показано, как эту функцию можно использовать в PHP.
Синтаксис:
string exec ( string $command [, array &$output [, int &$return_var ]] )
Эта функция может принимать три аргумента. Первый аргумент является обязательным, который примет системную команду. Два других аргумента необязательны. Второй аргумент используется для хранения вывода команды в массиве. Третий аргумент этой функции используется для хранения статуса возврата выполненной команды. Эта функция возвращает последнюю строку из вывода выполненной команды.
Пример-1: Использование функции exec () без дополнительных аргументов
Основное использование функции exec() показано в этом руководстве. Создайте файл PHP со следующим сценарием, чтобы знать, как функция exec() возвращает выходные данные команды. Команда ‘ pwd ‘ использовалась в первой команде exec() скрипта, которая возвращает одну строку вывода. Команда ‘ ls -la ‘ использовалась во второй команде exec(), которая может возвращать несколько строк вывода. Если какая-либо команда возвращает несколько строк, тогда в качестве вывода будет отображаться последняя строка.
<? php // Сохраняем вывод выполненной команды $output1 = exec('pwd'); // Распечатать возвращаемое значение echo $output1; echo "<br/>"; // Сохраняем последнюю строку выполненной команды $output2 = exec('ls -la'); // Распечатать возвращаемое значение echo $ output2; ?>
Вывод :
Следующий вывод появится после запуска вышеуказанного скрипта с сервера. Команда ‘ pwd ‘ возвращает текущий рабочий каталог в виде вывода, который показан в первом выводе. Команда ‘ ls -la ‘ возвращает подробную информацию о списке каталогов, а второй вывод показывает последнюю строку из вывода команды.
Пример-2: Распечатать все значения выполненной команды
В предыдущем примере в функции exec() не использовался необязательный аргумент. В следующем примере показано использование необязательных аргументов функции exec(). Создайте файл PHP со следующим скриптом. В этом скрипте используются два необязательных аргумента exec(). Команда ‘ ls -l ‘ используется в первом аргументе, который возвращает список каталогов. Переменная $ output используется здесь для хранения вывода команды в массиве. Переменная $status используется для хранения возвращаемого значения статуса выполненной команды. Выходные данные команды будут напечатаны как массив, и каждое значение выходного массива будет напечатано с использованием цикла for.
<? php // Сохраняем вывод выполненной команды в массиве exec ( 'ls -l' , $ output , $ status ) ; // Вывести все возвращаемые значения выполненной команды в виде массива print_r ( $ output ) ; echo "<br/>" ; // Распечатать вывод выполненной команды в каждой строке foreach ( $ output as $ value ) { echo $ value . «<br />» ; } // Распечатываем статус возврата выполненной команды echo $ status ; ?>
Вывод :
Следующий вывод появится после запуска вышеуказанного скрипта с сервера. Вывод показывает массив, содержащий вывод команды, ls -l и каждое значение массива в каждой строке.
Пример-3: Распечатать все файлы PHP в текущем каталоге
В следующем примере показан список всех файлов PHP в текущем каталоге с помощью функции exec(). Здесь команда ‘ ls -l * .php ‘ используется здесь, чтобы узнать список всех файлов PHP в текущем каталоге. Тег <pre> используется в скрипте для печати содержимого массива в структурированном формате.
<? php // Сохраняем вывод выполненной команды в массиве exec ( 'ls -l * .php' , $ output ) ; // Распечатать вывод выполненной команды echo "<pre>" ; print_r ( $ output ) ; echo "</pre>" ; ?>
Пример-4: Запуск сценария bash
Как любой сценарий bash может быть выполнен с помощью функции exec (), показано в этом примере. Создайте файл bash с именем loop.sh со следующим скриптом, который будет печатать все четные числа от 1 до 20.
loop.sh
#! / bin / bash # Инициализировать счетчик counter=1 # Повторять цикл до тех пор, пока значение $ counter не станет меньше или равно 20, while [ $counter -le 20 ] do # Распечатать четные числа if [[ $counter%2 -eq 0 ]] then # Печатать $counter без перевода строки echo "$counter" fi # Увеличить $counter на 1 ((counter++)) done
Создайте файл PHP со следующим сценарием для запуска сценария bash. ‘bash loop.sh’ используется в качестве первого аргумента функции exec(), которая будет выполнять файл сценария loop.sh. Цикл ‘foreach‘ используются для печати каждого значения $output с пространством.
<? php // Запускаем скрипт bash exec('bash loop.sh', $output); echo "Все четные числа от 1 до 20: <br />" ; // Выводим наш вывод с помощью цикла foreach($output as $value) { echo $value." "; } ?>
Вывод :
Следующий вывод появится после запуска вышеуказанного скрипта с сервера. Вывод показывает все четные числа от 1 до 20.
Пример 5: Запуск команды `dir` с помощью функции exec()
Команда dir работает так же, как и команда ls. В следующем примере показано, как можно выполнить команду dir с помощью сценария PHP. Создайте файл PHP с помощью следующего сценария, который сохраняет вывод команды ‘dir’ в массиве с именем $output и значение состояния в переменной с именем $return. Здесь функция var_dump() используется для печати структуры массива $ output с информацией о типе данных.
<? php // Запускаем команду `dir` exec("dir", $output, $return); // Распечатать возвращаемое значение статуса echo "Возвращаемое значение команды` dir` - $ return \ n "; echo "<pre>"; // Распечатать команду output var_dump ( $ output ) ; echo "</pre>"; ?>
Заключение:
В этой статье были объяснены различные варианты использования функции exec(), чтобы помочь кодировщикам PHP узнать способ выполнения команды оболочки с помощью сценария PHP. Некоторые другие функции также существуют в PHP для выполнения задач того же типа.