Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
$p = proc_open(
$command,
array(1 => array('pipe', 'w'),
2 => array('pipe', 'w')),
$io
);
/* Read output sent to stdout. */
while (!feof($io[1])) {
$line=fgets($io[1]);
if (function_exists('mb_convert_encoding')) {
/* (hopefully) fixes a strange "htmlspecialchars(): Invalid multibyte sequence in argument" error */
$line = mb_convert_encoding($line, 'UTF-8', 'UTF-8');
}
$_SESSION['output'] .= htmlspecialchars($line, ENT_COMPAT, 'UTF-8');
}
/* Read output sent to stderr. */
while (!feof($io[2])) {
$line=fgets($io[2]);
if (function_exists('mb_convert_encoding')) {
/* (hopefully) fixes a strange "htmlspecialchars(): Invalid multibyte sequence in argument" error */
$line = mb_convert_encoding($line, 'UTF-8', 'UTF-8');
}
$_SESSION['output'] .= htmlspecialchars($line, ENT_COMPAT, 'UTF-8');
}
fclose($io[1]);
fclose($io[2]);
proc_close($p);
cat somefile >/dev/stderr при размере файла somefile больше, скажем, 8 Кб (размер системного буфера I/O), возникнет deadlock и команда никогда не выполнится. Я уж не говорю о том, что человек использует proc_open и вообще игнорирует stdin (нулевой дескриптор). В случае запуска того же vi или любой другой программы, которая что-нибудь выводит пользователю и спрашивает что-нибудь у пользователя, результат выполнения непредсказуем.$ php -r "echo 'Hello World';"Linux, Mac OS X на стороне сервера (на *BSD не проверял, возможно, требуются доработки)
То что expect внешняя утилита я понял. Вы про эту утилиту: www.nist.gov/el/msid/expect.cfm?
Пишем простенький веб-эмулятор терминала на PHP