proc_open PDF Печать E-mail

(только PHP 4 CVS)

proc_open - выполняет команду и открывает файловый указатель для ввода/вывода.

Описание

resource proc_open (string cmd, array descriptorspec, array pipes)

proc_open() похожа на popen(), но предоставляет больший контроль над выполнением программы. cmd это команда, выполняемая оболочкой. descriptorspec это индексированный массив, в котором ключи представляют номера дескрипторов, а значения представляют то, как PHP передаёт эти дескрипторы в дочерний процесс. pipes будет установлен в индексированный массив файловых указателей, соответствующий концу любых созданных каналов. return-значение является ресурсом представляющим процесс; вы должны освободить его с помощью proc_close() по окончании работы с ним.

$descriptorspec = array(   
0 => array("pipe", "r"),// stdin это канал, из которого потомок будет читать   
1 => array("pipe", "w"),// stdout это канал, в который потомок будет записывать   
2 => array("file", "/tmp/error-output.txt", "a"), // stderr это файл для записи  
);  
$process = proc_open("php", $descriptorspec, $pipes);  
if (is_resource($process)) {  
// $pipes выглядит теперь примерно так:  
// 0 => записываемый дескриптор, соединённый с дочерним stdin  
// 1 => читаемый дескриптор, соединённый с дочерним stdout  
// Любой вывод ошибки будет присоединён к /tmp/error-output.txt    
fwrite($pipes[0], "<?php echo \"Hello World!\"; ?>");  
fclose($pipes[0]);    
while(!feof($pipes[1])) {  
echo fgets($pipes[1], 1024);  }  
fclose($pipes[1]);  
// Важно, чтобы вы закрыли любые каналы до вызова  
// proc_close, чтобы исключить тупиковую блокировку  
$return_value = proc_close($process);    
echo "command returned $return_value\n";  
}

Номера дескрипторов файлов в descriptorspec не ограничены 0, 1 и 2 - вы можете специфицировать любой правильный номер дескриптора файла, и он будет передан в дочерний процесс. Это даст возможность вашему скрипту взаимодействовать с другими скриптами, запущенными как "со-процессы". Это особенно пригодится для передачи pass-фраз программам вроде PGP, GPG и openssl более безопасным/секретным способом.Это используется также для чтения информации статуса, предоставляемой этими программами во вспомогательных дескрипторах файлов.

Примечание: Windows-совместимость: дескрипторы вне 2 (stderr) становятся доступными дочернему процессу как наследуемые дескрипторы, но, поскольку архитектура Windows не ассоциирует номер дескриптора файла с низкоуровневым дескриптором, дочерний процесс (пока ещё) не имеет средств доступа к этому дескриптору.Stdin, stdout и stderr work работают так, как ожидается.

Примечание: эта функция была введена в PHP 4.3.0.

Примечание: если вам нужен только однонаправленный канал процесса, используйте popen() вместо данной функции, так как она проще в использовании.

По материалам сайта: http://www.php.su/