ТОП-10 популярных



Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...

НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...

БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...

Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...

Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...

Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...

ПОД ЛИТЕРОЙ «N»
Aтаку LCD-мониторов не остановить, а масштабы этого наступления даже немного пугают. Судите сами — многие пользователи только начинают приглядываться к новому для...


Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...

Размер объему не помеха.
С тех пор как компания Fujitsu отказалась от производства жестких дисков для настольных компьютеров, многие пользователи начали забывать о том,...


Какую только информацию мы не помещаем на компакт-диски: резервные копии важных данных, музыку, фильмы... Многие полагают, что главное - «купить...

PHP. Операционная система. Часть Двадцать Восьмая.


28-12-2009

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.

Понравился материал? Поделитесь с друзьями!



<< Предыдущая статьяСледующая статья >>
PHP. Операционная система. Часть Двадцать Седьмая. PHP. Операционная система. Часть Двадцать Девятая.