resource proc_open(string command, array descriptor, array pipe)
Функция proc_open (листинг 9.96) предлагает мощное средство выполнения команд в оболочке и выполнения входящих и исходящих потоков. Функция proc_open выполняет команду, указанную в аргументе command, как если бы она была задана непосредственно в командной оболочке.
Массив descriptor предоставляет PHP информацию о выводе на соответствующее стандартное устройство ввода-вывода. Индексами этого массива являются допустимые номера дескриптора. При этом необходимо иметь в виду, что все процессы Unix стартуют с тремя стандартными дескрипторами файлов: 0 - для stdin, 1 - для stdout и 2 - для sterr. Для обмена данными между процессами можно использовать другие номера дескрипторов файлов.
Значения массива дескриптора должны быть дескриптором файла, созданным функцией fopen, или массивом с описанием нового потока, созданного для вас PHP. Первый элемент этого массива представляет собой строку, описывающую тип, канал или файл. При открытии канала появляется необходимость задавать и второй аргумент для обозначения режима. При открытии файла сначала указывается путь, а затем режим. Режимы аналогичны режимам, используемым функцией fopen, и приведены в табл. 9.4. Следует отметить, что режимы задаются с точки зрения процесса. Поэтому открытие канала в режиме r для процесса будет чтением, что означает, что ваш сценарий будет производить в него запись. Аргумент pipe принимает массив дескрипторов открытого файла. Эти дескрипторы соответствуют дескрипторам, которые можно получить с помощью команды fopen или popen. Завершив процесс, обязательно закройте дескрипторы открытого файла, а затем закройте сам процесс.
Листинг 9.96. Функция proc_open
<?php
$descriptor = array( //ввод процесса (stdin) 0=>array("pipe", "r"), //вывод процесса (stdout) 1=>array("pipe", "w"),
//сообщение об ошибке, отправленное во временный файл (stderr) 2=>array("file", uniqid("/tmp/errors"), "w")
);
//Выполнить CLI PHP
if(!($process = proc_open("php", $descriptor, $pipe))) {
print(" Невозможно запустить процесс!"); exit();
}
// Переслать PHP краткий сценарий $script =
"<?phpn" .
"print('Core PHP<br>');n" . "trigger_error('Проверка stderr');n" . "?>";
fwrite($pipe[0], $script);
// запись в канал завершена, поэтому его нужно закрыть
fclose($pipe[0]);
// прочесть ввод
while(!feof($pipe[1]))
{
//отправить в браузер print(fread($pipe[1], 128));
}
// закрыть канал вывода
fclose($pipe[1]);
//закрыть процесс ($process);
?>
integer proc_terminate(resource process, integer signal)
Функция proc_terminate отсылает сигнал открытому процессу. По умолчанию это сигнал SIGTERM. В ОС Windows эта функция вызывает С-функцию TerminateProcess.
putenv(string variable)
Функция putenv устанавливает значение переменной среды. При этом должен использоваться синтаксис, аналогичный тому, который используется в командной оболочке (листинг 9.97). Для получения значения переменной среды можно использовать функцию getenv или функцию phpinfo для вывода всех переменных среды.
| Листинг 9.97. Функция putenv_
<?php
putenv("PATH=/local/bin;.");
?>
string shell_exec(string command)
Функция shell_exec выполняет команду оболочки и возвращает вывод в виде строки. В аргументе command крайне опасно помещать пользовательскую информацию. Пользователи могут передавать значения в виде полей, позволяющих им выполнять свои собственные команды с помощью вашего Web-сервера. Если необходимо выполнить команду, введенную пользователем, полученную информацию необходимо передавать через функцию escapeshellcmd. Сравните эту функцию с функциями exec, passthru и system.
ТОП-10 популярных
Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...
БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Компьютер для гурманов.«Эксимер ДМ»
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...
В дополнение к календарным типам, предназначенным для хранения даты и времени отдельно, MySQL также поддерживает гибридные типы данных DATETIME и...
Вообще, к изменению настроек сервера прибегают очень редко. В MySQL программа заранее настроена так, чтобы соответствовать самым распространенным и основным...
PHP. Операционная система. Часть Двадцать Восьмая.
28-12-2009
<< Предыдущая статья | Следующая статья >> |
PHP. Операционная система. Часть Двадцать Седьмая. | PHP. Операционная система. Часть Двадцать Девятая. |