9.6. Командные оболочки
В этом разделе описываются функции, каким-либо образом взаимодействующие с командной оболочкой. Большинство из них запускает выполнение других программ, а две из них предназначены для считывания или записи значений переменных среды.
string exec(string command, array output, integer return)
Функция exec (листинг 9.94) выполняет команду, указанную в аргументе command, как если бы она была задана непосредственно в командной оболочке. Функция exec ничего не отсылает в браузер, но возвращает последнюю строку вывода, сопровождающего выполнение команды. При указании необязательного аргумента output PHP добавляет выводимые строки в аргумент output. При указании необязательного аргумента return PHP заносит в него значение, возвращаемое командой. В аргументе command крайне опасно помещать пользовательскую информацию. Пользователи могут передавать значения в виде полей, позволяющих им выполнять свои собственные команды, пользуясь вашим Web-сервером. Если необходимо выполнить команду, введенную пользователем, полученную информацию необходимо передавать через функцию escapeshellcmd. Сравните эту функцию с функциями passthru, shell_exec и system. 

j Листинг 9.94. Функция exec_
<?php
// Получить содержимое корневого каталога устройства C $lastLine = exec("ls -l /", $allOutput, $returnValue); print(" Последняя строка: $lastLine<br>n"); print("Вeсь вывод:<br>n"); foreach($allOutput as $line)
{
print("$line<br>n");
}
print("<br>n");
print(" Возвращаемое значение: $returnValue<br>n");

string getenv(string variable)
Функция getenv (листинг 9.95) возвращает значение заданной переменной среды или FALSE в случае ошибки. PHP размещает все переменные среды в массиве _ENV, поэтому эта функция полезна только в тех редких случаях, когда переменные среды изменяют свои значения во время выполнения сценария. Если необходимо изменить значения переменной среды, используется функция putenv.

j Листинг 9.95. Функция getenv
<?php
print(getenv("PATH"));
?>

string passthru(string command, integer return)
Функция passthru аналогична функциям exec и system. Функция passthru выполняет команду, указанную в аргументе command, как если бы она была задана непосредственно в командной оболочке. При указании необязательного аргумента return PHP заносит в него возвращаемое командой значение. Функция passthru возвращает весь вывод, который отправляется в браузер. Вывод отправляется в виде двоичных данных. Это очень удобно, если необходимо запустить команды оболочки, создающий двоичный файл (например, изображение).
В аргументе command крайне опасно помещать пользовательскую информацию. Пользователи могут передавать значения в виде полей, позволяющих им выполнять свои собственные команды с помощью вашего Web-сервера. Если необходимо выполнить команду, введенную пользователем, полученную информацию необходимо передавать через функцию escapeshellcmd. Сравните эту функцию с функциями exec, shell_exec и system.
integer proc_close(resource process)
Функция proc_close используется для закрытия процесса, открытого функцией proc_open. Она возвращает значение, возвращенное функцией закрытия файла низкого уровня, которое обычно равно 0, если закрытие прошло успешно, и 1, если возникла ошибка.

array proc_get_status(resource process)
Функция proc_get_status возвращает информацию о состоянии открытого процесса в виде массива. Элементы этого массива приведены в табл. 9.26.
Операционная система
boolean proc_nice(integer level)
Функция proc_nice задает приоритет текущего процесса. Если сценарий PHP выполняется под управлением суперпользователя, эта функция может только уменьшать приоритет.