Я создал процесс, используя proc-open
, но под окнами stream-select не работает. То, что я пытаюсь достичь, - это читать как из stdout, так и из stderr, в то же время записывая stdin и гарантируя, что выход можно сопоставить с входами. Есть ли обходной путь для окон, чтобы преодолеть этот недостаток?
PHP proc_open на окнах
Ответ 1
Вы не очень подробно рассказали о том, что не работает для вас при выборе потока в Windows. Однако это рабочий пример того, как использовать выбор потока. Я просто успешно справился с PHP 5.4 в Windows XP.
Изменить: Uhhmmm.. Похоже, что это было неработоспособным в конце концов... Sry, тестирование еще немного здесь..:)
Изменить еще раз:
Итак, я сделал еще несколько экспериментов по этому поводу, но безуспешно.
Может быть, вы должны просто позволить процессам говорить TCP/UDP/IP друг с другом?
Другой путь вперед (если вы все еще хотите использовать stdout/stdin/stderr в своем процессе), возможно, должен использовать proc_open с обработчиками файлов, поэтому ваш процесс записывается в файлы, а затем используйте что-то похожее на unix 'inotify, загрузку этот материал с классом PHP DOTNET: Есть ли что-то вроде inotify в Windows?, чтобы обнаружить изменения в файлах...? Просто идея...
Или, может быть, измените на unix-like os?;) Хорошо, это для меня сегодня. Спокойной ночи
Ответ 2
добавление 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)
);