PHP proc_open на окнах - PullRequest
       8

PHP proc_open на окнах

15 голосов
/ 28 марта 2012

Я создал процесс, используя proc-open, но в Windows stream-select не работает. То, чего я пытаюсь добиться, - это прочитать из stdout и stderr , в то же время записав в stdin и убедиться, что выходные данные можно сопоставить входы. Есть ли обходной путь для окон, чтобы преодолеть этот недостаток?

Ответы [ 2 ]

3 голосов
/ 05 апреля 2012

Вы не очень подробно знаете, что у вас не работает с stream-select в Windows. Тем не менее, это рабочий пример того, как использовать stream-select. Я только что успешно запустил это с PHP 5.4 на Windows XP.

Редактировать: Ухммм ... Похоже, что он все-таки не работал ... Извините, тестирую еще кое-что здесь ..:)

Изменить еще раз:

Итак, я еще немного поэкспериментировал с этим, но безуспешно.

Может быть, вам следует просто позволить процессам передавать друг другу TCP / UDP / IP?

Другим способом продвижения вперед (если вы все еще хотите использовать stdout / stdin / stderr в своем процессе) может быть использование proc_open с обработчиками файлов, поэтому ваш процесс записывает в файлы, а затем использует нечто похожее на unix 'inotify, загружая это с классом PHP DOTNET: Есть ли что-то вроде inotify в Windows? , чтобы обнаружить изменения в файлах ...? Просто идея ...

Или, возможно, сменить на unix-подобную ОС? ;) Ладно, это для меня сегодня вечером. Спокойной ночи

0 голосов
/ 13 декабря 2018

добавление bypass_shell сработало для меня

$proc=proc_open($cmd,
        array(
            0=>array('pipe', 'r'), //stdin
            1=>array('pipe', 'w'), //stdout
            2=>array('pipe', 'w')  //stderr
            ),
        $pipes,
        $dir,
        null,
        array('bypass_shell'=>true)
    );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...