(PHP 4, PHP 5)
popen — Открывает файловый указатель процесса
$command
, string $mode
)Открывает поток к процессу, выполняемую при помощи форка команды, заданной в параметре command.
command
Команда
mode
Режим
Возвращает файловый указатель, идентичный возвращаемому функцией fopen(), за исключением того, что он односторонний (может быть использован только для чтения или записи) и должен быть закрыт при помощи pclose(). Этот указатель может быть использован с fgets(), fgetss() и fwrite(). Если в качестве режима указано 'r', файловый указатель аналогичен потоку вывода (STDOUT) команды, если же указано 'w', то файловый указатель аналогичен потоку ввода (STDIN) команды.
В случае возникновения ошибки возвращает FALSE
.
Пример #1 Пример использования функции popen()
<?php
$handle = popen("/bin/ls", "r");
?>
Если команда для выполнения не может быть найдена, будет возвращён корректный ресурс. Это может выглядить странно, но имеет смысл; это даёт вам возможность получить доступ к любому сообщению об ошибке, которое вернёт оболочка:
Пример #2 popen() example
<?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().
Замечание: В случае работы в безопасном режиме, вы можете запускать что-либо только в пределах safe_mode_exec_dir. В настоящее время по практическим причинам запрещено использование .. в качестве компонента пути к исполняемому файлу.
В случае работы в безопасном режиме, строка с командой экранируется с помощью escapeshellcmd(). Таким образом echo y | echo x становится echo y \| echo x.