PHP stream_set_timeout и popen не работают вместе?

#php #stream #popen

#php #поток #popen

Вопрос:

Я использую popen, чтобы открыть поток для 2 других php-скриптов:

 $proc[0] = popen("/usr/srv/php /my/folder/myscript.php 0 amp;", "r"); 
$proc[1] = popen("/usr/srv/php /my/folder/myscript.php 1 amp;", "r");
if (!stream_set_timeout($proc[0], 1, 0)) print "stream_set_timeout failed on stream 1"; 
if (!stream_set_timeout($proc[1], 1, 0)) print "stream_set_timeout failed on stream 2";
  

Что происходит, так это сбой stream_set_timeout в обоих потоках (возвращает false, протестировано на Linux- и Windows-машинах с php 5.3.). Использование fread в обоих потоках работает нормально, но я хочу читать из обоих потоков «одновременно», а fread продолжает блокировать чтение из другого потока (кстати, stream_set_blocking возвращает тоже сбой, возвращая false).

Есть идеи, почему это не работает?

Комментарии:

1. Ожидаемый сбой в Windows, потому что PHP не использует перекрывающийся ввод-вывод в Windows, но странно, что он не работает в Linux. Я предлагаю вам отправить отчет об ошибке.

2. Спасибо за ваш ответ. Может кто-нибудь, пожалуйста, подтвердить, что это не работает в Linux, прежде чем я отправлю отчет об ошибке?

3. Вы пробовали удалять символ амперсанда из конца строки popen? popen("/usr/srv/php /my/folder/myscript.php 0", "r")

4. Да, это одно и то же, независимо от того, с амперсандом или без него.

5. proc_open() вместо popen() может быть?