warobushek
Новичок
Здравствуйте.
PHP 5.2.12
На основе статьи http://www.ibm.com/developerworks/ru/library/os-php-multitask/index.html написал следующий код. Он не работает.
fwrite в строке
возвращает 0 - т.е. не удается записать ни одного байта в открытый поток.
Почему?... не понятно.
Помогите пожалуйста, найти ответ на этот вопрос.
PHP 5.2.12
На основе статьи http://www.ibm.com/developerworks/ru/library/os-php-multitask/index.html написал следующий код. Он не работает.
fwrite в строке
PHP:
$r = fwrite($s, $http_message);
Почему?... не понятно.
Помогите пожалуйста, найти ответ на этот вопрос.
PHP:
echo "Program starts at ". date('h:i:s') . ".\n";
$srv_host = 'xmltv.s-tv.ru';
$timeout=3;
$result=array();
$sockets=array();
$convenient_read_block=8192;
$images_all = array('897' => '/loadimage.php?program_hash=119421',
'98'=>'/loadimage.php?program_hash=119422',
'1034'=>'/loadimage.php?program_hash=119423',);
/* Выполнить одновременно все запросы; ничего не блокируется. */
foreach ($images_all as $program_hash => $im_url) {
$s=stream_socket_client("$srv_host:80", $errno,
$errstr, $timeout,
STREAM_CLIENT_ASYNC_CONNECT|STREAM_CLIENT_CONNECT);
if ($s) {
$sockets[$program_hash++]=$s;
$http_message="GET $im_url HTTP/1.0\r\nHost: $srv_host\r\n\r\n";
$r = fwrite($s, $http_message);
echo false===$r? 'false' : '<br>'.$r.' '.$http_message.' '.print_r($sockets, 1).' '.'<br>';
} else {
echo "Stream " . $program_hash . " failed to open correctly.";
}
}
print_r($sockets);
while (count($sockets)) {
$read=$sockets;
$r = stream_select($read, $w=null, $e=null, $timeout);
if (count($read)) {
/* stream_select обычно перемешивает $read, поэтому мы должны вычислить,
из какого сокета выполняется чтение. */
foreach ($read as $r) {
$program_hash=array_search($r, $sockets);
$data=fread($r, $convenient_read_block);
/* Сокет можно прочитать либо потому что он
имеет данные для чтения, ЛИБО потому что он в состоянии EOF. */
if (strlen($data) == 0) {
echo "Stream " . $program_hash . " closes at " . date('h:i:s') . ".\n";
fclose($r);
unset($sockets[$program_hash]);
} else {
$result[$program_hash] .= $data;
}
}
} else {
/* Таймаут означает, что *все* потоки не
дождались получения ответа. */
echo "Time-out!\n";
break;
}
}