April 4th, 2008 zetxxx
Мдам, имаше и такъв момент, след около 2 часа търсене попаднах на един блог чиито притежател ми изясни някои основни неща включително и че за начинанието за което си мислех че ми трябват нишки мога да мина и без тях. Оказа се че библиотеката която одговрая за стриимовете върши чудесна работа шот имало асинхронна връзка, да ама що толкова малко се пише за тея неща… защото нещата при стриимовете се оказаха малко заплетени, но уви трябваше да се разплетат по един или по друг начин, класа които слагам по долу работи по следния начин ( а и е предназначен главно и само за хттп рикуести ).. сетваме домаин:ппорт( 1 or multiply ) отваряме коннекция -> правиме я асинхронна -> преминаваме от блокинг мод към нонблокинг ( което води до неизчакване ако не се лъжа ) -> stream_select магическата функция, тази фукнция връща резултат в една от опциите които и пассваме по референции, благодарение на тази функция знаем в кои стриим се е случило нещо и благодарение на нея ако трябва да прочетем 2 уеб страници няма да има нужда да чакаме да се изчете едната и селд това другата, така спестяваме времето което е нужно на сървъра да обработи рекуест-а … надявам се съм бил полезен на някои, бв този класс има дребни екстри за поправка, трябваше да сложа услееп някаде за да падне процесорното време но това след уикенд-а, пък и които е заинтересуван винаги ше му бутна рамо
-
ini_set( 'max_execution_time', 300 );
-
-
include 'html.parser.php';
-
-
class threadetSocketCall
-
{
-
var $namespace = array();
-
var $config = array();
-
-
function threadetSocketCall()
-
{
-
$this->config['ctime'] = 30;
-
}
-
-
function mHostAdd( $host_port, $get )
-
{
-
$this->namespace['domain:port'][] = array();
-
$this->namespace['domain:port'][count( $this->namespace['domain:port'] )-1] = $host_port;
-
$this->namespace['get'][count( $this->namespace['domain:port'] )-1] = $get;
-
}
-
-
function mHostAddConnect( $host_port = 'www.belogradchik.biz:80', $get = '' )
-
{
-
$this->mHostAdd( $host_port, $get );
-
$cc = count( $this->namespace['domain:port'] )-1;
-
$this->namespace['conn'][$cc] = stream_socket_client( $this->namespace['domain:port'][$cc], $errno, $errstr, $this->config['ctime'], STREAM_CLIENT_ASYNC_CONNECT|STREAM_CLIENT_CONNECT );
-
stream_set_blocking( $this->namespace['conn'][$cc], 0 );
-
$this->namespace['allready.writed'][$cc] = false;
-
if( !is_resource( $this->namespace['conn'][$cc] ) )
-
{
-
$this->namespace['stat'][$cc]['error_text'] = 'error';
-
$this->namespace['stat'][$cc]['err']['no'] = $errno;
-
$this->namespace['stat'][$cc]['err']['str'] = $errstr;
-
}
-
else
-
$this->namespace['stat'][$cc]['control_text'] = 'in progress >> ';
-
}
-
-
function getResults()
-
{
-
$iter = 0;
-
while( count( $this->namespace['conn'] ) )
-
{
-
++$iter;
-
$r_ = $w_ = array();
-
$r_ = $w_ = $this->namespace['conn'];
-
$n_ = stream_select( $r_, $w_, $e = null, NULL );
-
if( $n_ > 0 )
-
{
-
if( isset( $w_[0] ) )
-
{
-
$w_id = NULL;
-
foreach( $w_ as $id )
-
{
-
$w_id = array_search( $id, $this->namespace['conn'], true );
-
if( $this->namespace['allready.writed'][$w_id] === false )
-
{
-
$this->namespace['stat'][$w_id]['control_text'] .= 'in writeing #'.$w_id.'|'.$iter.'#';
-
fwrite( $this->namespace['conn'][$w_id], $this->namespace['get'][$w_id] );
-
$this->namespace['allready.writed'][$w_id] = true;
-
$this->namespace['output'][$w_id] = '';
-
}
-
}
-
}
-
if( isset( $r_[0] ) )
-
{
-
$r_id = NULL;
-
foreach( $r_ as $id )
-
{
-
$this->namespace['stat'][$id]['control_text'] = 'in reading #'.$iter;
-
$r_id = array_search( $id, $this->namespace['conn'] );
-
$stream_info = stream_get_meta_data( $this->namespace['conn'][$r_id] );
-
$r_data = fread( $this->namespace['conn'][$r_id], 8192 );
-
if( strlen( $r_data ) > 0 ){ $this->namespace['output'][$r_id] .= $r_data; }
-
$r_data = NULL;
-
unset( $r_data );
-
if( $stream_info['eof'] === true )
-
{
-
fclose( $this->namespace['conn'][$r_id] );
-
unset( $this->namespace['conn'][$r_id] );
-
$this->namespace['conn'][$r_id] = NULL;
-
unset( $this->namespace['conn'][$r_id] );
-
}
-
}
-
}
-
}
-
else
-
{
-
break;
-
}
-
}
-
}
-
-
function __destructor()
-
{
-
unset( $this );
-
}
-
}
-
-
$new = new threadetSocketCall();
-
$header = "GET __get__ HTTP/1.1\n".
-
"Host: __host__\n".
-
"User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13\n".
-
"Accept-Language: en-us,en;q=0.5\n".
-
"Connection: close\n\n";
-
-
$host = 'localhost';
-
$new->mHostAddConnect( $host.':80', preg_replace( array( '/__host__/i', '/__get__/i' ), array( $host, '/' ), $header ) );
-
$new->getResults();
-
print_r( $new->namespace['output'][0] );
-
# html file to parse
-
$parser = new htmlTagParser();
-
$parser->mSetContent( $new->namespace['output'][0] );
-
$parser->mParseTags( array( 'a', 'title' ) );
-
$aTags = $parser->mGetTags();
-
print_r( $aTags );
-
die();
Posted in PHP | No Comments »
April 2nd, 2008 zetxxx
Или как гоогле да ни обходи по добре, информацията която съм дал като линкове
е напълно достатъчна.
Препоръки от гоогъл
sitemaps.org
Плюс
вече саита си има и флагчета надявам се потребителите и Г да го оценят
Posted in www.belogradchik.biz | No Comments »
April 1st, 2008 zetxxx
Всеки един да гласува за Белоградчишки скали като едно от седемте чудеса на света .
Съвсем случайно попаднах на една статия в блог докато разглеждах блог резултатите в Г
Posted in www.belogradchik.biz | No Comments »