Аномалия канала PHP proc_open (Win7/Apache2.2)

Следующий код работает при выполнении из командной строки в Windows 7 с запущенным «php test.php» (PHP 5) — вывод просто «test». Но когда php (v5) запускается в любом браузере, работающем на локальном сервере apache (v2.2), он не работает, то есть не выводится (используя как прямое эхо, так и флеш И с использованием методов AJAX). Процесс запущен успешно (подтверждено с помощью proc_get_status) (для меня это означает, что проблемы с разрешениями тоже в порядке). Кажется, что-то с трубами. Любые идеи? Есть ли известная вещь, которую я упускаю?

<?php
$descriptorspec = array(
   0 => array("pipe", "r"), 
   1 => array("pipe", "w")
);
$process = proc_open("java Test", $descriptorspec, $pipes, null, null,array('bypass_shell'=>true));
fclose($pipes[0]);
echo stream_get_contents($pipes[1]);
fclose($pipes[1]);
proc_close($process);
?>

person d'alar'cop    schedule 08.03.2013    source источник


Ответы (1)


Вероятно, ваш сервер Apache работает как «система» как неинтерактивная служба. Многие вещи не будут работать и, вероятно, также каналы для консольных приложений. Кроме того, у вас могут быть проблемы с разрешениями, потому что ваша консоль (где она работает) имеет пользовательские (ваши) разрешения, а порожденная консоль имеет системные разрешения.

Если вам действительно нужны каналы, вы можете попробовать запустить apache от имени пользователя (а не системы) и настроить службу, позволяющую взаимодействие с рабочим столом.

person Ghigo    schedule 08.03.2013
comment
Может быть, так. Я просто повторно реализовал JSP с эквивалентными действиями (на Apache Tomcat). Он достигает первоначальной цели. Спасибо. - person d'alar'cop; 08.03.2013