2012-07-04 2 views
2

Я использую Windows 7 и PHP 5.PHP stream_select не работает

У меня есть проблемы с выполнением процесса по proc_open и проверить тайм-аут. я использовал stream_select проверить тайм-аут с этим кодом:

<?php 
$descriptorspec = array(
0 => array("file", $infile, "r"), // stdin is a pipe that the child will read from 
1 => array("pipe", "w"), // stdout is a pipe that the child will write to 
2 => array("pipe", "w") // stderr is a file to write to 
); 
$prog = @proc_open ($objname.".exe", $descriptorspec, $pipes, "$DOCUMENT_ROOT/judge/temp", null, null); 
if(!is_resource($prog)) ErrorResult("","proc_open err"); 

$streams = array($pipes[1]); 
$start = microtime(true); 
$ret = stream_select($streams, $a = null,$a = null, 1); 
$stop = microtime(true); 
?> 

Это код C++ я, чтобы проверить, что:

#include<windows.h> 

int main(){ 
    Sleep(2000); 
    return 0; 
} 

В этом коде нет вывода на всех, но stream_select Безразлично 't ждать 1 с и вернуть 1.

Как я могу это исправить?

+0

Что означают '$ ret' и' $ streams' после возврата 'stream_select'? Укажите «var_dump». Если '$ ret'> 0, тогда' $ streams' не должно быть пустым. Если '$ streams' не пуст, что вы получаете, когда читаете из потоков, содержащихся в нем? – Leigh

+0

Также вы уверены, что '$ pipes [1]' правильный? Вы указываете только 2 канала, возможно, '$ pipes [0]' - это то, что вам нужно. – Leigh

+0

$ ret == 1 и $ streams не пуст. Я ничего не могу читать. –

ответ

0

Я подозреваю, что ваш C++-исполнитель по какой-то причине не может быть выполнен по-настоящему, но код выхода может быть скрыт от вас cmd.exe.

  • Получить доказательство того, что исполняемый файл C++ фактически запущен вообще. Попытайтесь передать некоторые данные с C++ на PHP уже до вызова stream_select.

  • Получить cmd.exe из пути:

    $ выбирает = массив ('suppress_errors' => ложно, 'bypass_shell' => верно);

    $ prog = proc_open ($ objname. ".exe", $ descriptorspec, $ pipes, "$ DOCUMENT_ROOT/jud/temp", null, null, $ opts);

+0

он все еще не работает. –

+0

@ 박수찬 - Переписан ответ на основе всего, что было исключено. –

+0

Я проверил свою программу и набрал код, но он не работает. –

 Смежные вопросы

  • Нет связанных вопросов^_^