П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое








Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 4446 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 7024 раз(а).

Учебник HTML.
Просмотров 3925 раз(а).

Руководство по PHP5.
Просмотров 313 раз(а).

Хостинг через призму DNS.
Просмотров 5165 раз(а).

Подборка текстов стандартных документов.
Просмотров 56492 раз(а).

Учебник PHP - Самоучитель
Просмотров 3973 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 9284 раз(а).

Внешние атаки...
Просмотров 4929 раз(а).

Учебник PHP.
Просмотров 3346 раз(а).

SSI в примерах.
Просмотров 346 раз(а).



 
 
| Добавить в избранное | Сделать стартовой | Помощь





Учебник РНР
НазадВперёд

proc_open

(только 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() вместо данной функции, так как она проще в использовании.

См. также exec(), system(), passthru(), popen(), escapeshellcmd() и операцию backtick.


Назад Оглавление Вперёд
proc_close Вверхshell_exec


Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту: