array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'ru', ), 'this' => array ( 0 => 'function.popen.php', 1 => 'popen', ), 'up' => array ( 0 => 'ref.filesystem.php', 1 => 'Функции файловой системы', ), 'prev' => array ( 0 => 'function.pclose.php', 1 => 'pclose', ), 'next' => array ( 0 => 'function.readfile.php', 1 => 'readfile', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'ru', 'path' => 'reference/filesystem/functions/popen.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
(PHP 4, PHP 5, PHP 7, PHP 8)
popen — Открывает файловый указатель процесса
Открывает поток к процессу, выполняемый при помощи форка
команды, заданной в параметре command
.
command
Команда
mode
Режим. Либо 'r'
для чтения, либо 'w'
для записи.
В Windows для popen() по умолчанию используется текстовый режим, т.е. любые символы \n
,
записанные в канал или прочитанные из него, будут преобразованы в \r\n
.
Если это нежелательно, можно принудительно использовать двоичный режим, установив для mode
значение 'rb'
и 'wb'
соответственно.
Возвращает файловый указатель, идентичный возвращаемому функцией fopen(), за исключением того, что он односторонний (может быть использован только для чтения или записи) и должен быть закрыт при помощи pclose(). Этот указатель может быть использован с fgets(), fgetss() и fwrite(). Если в качестве режима указано 'r', файловый указатель аналогичен потоку вывода (STDOUT) команды, если же указано 'w', то файловый указатель аналогичен потоку ввода (STDIN) команды.
В случае возникновения ошибки возвращает false
.
Пример #1 Пример использования функции popen()
<?php
$handle = popen("/bin/ls", "r");
?>
Если команда для выполнения не может быть найдена, будет возвращён корректный ресурс. Это может выглядеть странно, но имеет смысл; это даёт вам возможность получить доступ к любому сообщению об ошибке, которое вернёт оболочка:
Пример #2 Пример использования функции popen()
<?php
error_reporting(E_ALL);
/* Добавляем перенаправление, чтобы прочитать stderr. */
$handle = popen('/path/to/executable 2>&1', 'r');
echo "'$handle'; " . gettype($handle) . "\n";
$read = fread($handle, 2096);
echo $read;
pclose($handle);
?>
Замечание:
Если вам нужна двухсторонняя передача (в обе стороны одновременно), используйте proc_open().