блогът на belogradchik.biz

Ех спомени… спомени

April 18th, 2008 zetxxx

Спомени от едно отминало детство и не толкова далечно минало :) , Тези филмчета са спеялен поздрав за колегите/прителите/познатите/съмишлениците от/за едно-то време :D .

PHP и Threads

April 4th, 2008 zetxxx

Мдам, имаше и такъв момент, след около 2 часа търсене попаднах на един блог чиито притежател ми изясни някои основни неща включително и че за начинанието за което си мислех че ми трябват нишки мога да мина и без тях. Оказа се че библиотеката която одговрая за стриимовете върши чудесна работа шот имало асинхронна връзка, да ама що толкова малко се пише за тея неща… защото нещата при стриимовете се оказаха малко заплетени, но уви трябваше да се разплетат по един или по друг начин, класа които слагам по долу работи по следния начин ( а и е предназначен главно и само за хттп рикуести ).. сетваме домаин:ппорт( 1 or multiply ) отваряме коннекция -> правиме я асинхронна -> преминаваме от блокинг мод към нонблокинг ( което води до неизчакване ако не се лъжа ) -> stream_select магическата функция, тази фукнция връща резултат в една от опциите които и пассваме по референции, благодарение на тази функция знаем в кои стриим се е случило нещо и благодарение на нея ако трябва да прочетем 2 уеб страници няма да има нужда да чакаме да се изчете едната и селд това другата, така спестяваме времето което е нужно на сървъра да обработи рекуест-а … надявам се съм бил полезен на някои, бв този класс има дребни екстри за поправка, трябваше да сложа услееп някаде за да падне процесорното време но това след уикенд-а, пък и които е заинтересуван винаги ше му бутна рамо :)

  1. ini_set( 'max_execution_time', 300 );
  2.  
  3. include 'html.parser.php';
  4.  
  5. class threadetSocketCall
  6. {
  7.  var $namespace = array();
  8.  var $config = array();
  9.  
  10.  function threadetSocketCall()
  11.  {
  12.   $this->config['ctime'] = 30;
  13.  }
  14.  
  15.  function mHostAdd( $host_port, $get )
  16.  {
  17.   $this->namespace['domain:port'][] = array();
  18.   $this->namespace['domain:port'][count( $this->namespace['domain:port'] )-1] = $host_port;
  19.   $this->namespace['get'][count( $this->namespace['domain:port'] )-1] = $get;
  20.  }
  21.  
  22.  function mHostAddConnect( $host_port = 'www.belogradchik.biz:80', $get = '' )
  23.  {
  24.   $this->mHostAdd( $host_port, $get );
  25.   $cc = count( $this->namespace['domain:port'] )-1;
  26.   $this->namespace['conn'][$cc] = stream_socket_client( $this->namespace['domain:port'][$cc], $errno, $errstr, $this->config['ctime'], STREAM_CLIENT_ASYNC_CONNECT|STREAM_CLIENT_CONNECT );
  27.   stream_set_blocking( $this->namespace['conn'][$cc], 0 );
  28.   $this->namespace['allready.writed'][$cc] = false;
  29.   if( !is_resource( $this->namespace['conn'][$cc] ) )
  30.   {
  31.    $this->namespace['stat'][$cc]['error_text'] = 'error';
  32.    $this->namespace['stat'][$cc]['err']['no'] = $errno;
  33.    $this->namespace['stat'][$cc]['err']['str'] = $errstr;
  34.   }
  35.   else
  36.    $this->namespace['stat'][$cc]['control_text'] = 'in progress >> ';
  37.  }
  38.  
  39.  function getResults()
  40.  {
  41.   $iter = 0;
  42.   while( count( $this->namespace['conn'] ) )
  43.   {
  44.    ++$iter;
  45.    $r_ = $w_ = array();
  46.    $r_ = $w_ = $this->namespace['conn'];
  47.    $n_ = stream_select( $r_, $w_, $e = null, NULL );
  48.    if( $n_ > 0 )
  49.    {
  50.     if( isset( $w_[0] ) )
  51.     {
  52.      $w_id = NULL;
  53.      foreach( $w_ as $id )
  54.      {
  55.       $w_id = array_search( $id, $this->namespace['conn'], true );
  56.       if( $this->namespace['allready.writed'][$w_id] === false )
  57.       {
  58.        $this->namespace['stat'][$w_id]['control_text'] .= 'in writeing #'.$w_id.'|'.$iter.'#';
  59.        fwrite( $this->namespace['conn'][$w_id], $this->namespace['get'][$w_id] );
  60.        $this->namespace['allready.writed'][$w_id] = true;
  61.        $this->namespace['output'][$w_id] = '';
  62.       }
  63.      }
  64.     }
  65.     if( isset( $r_[0] ) )
  66.     {
  67.      $r_id = NULL;
  68.      foreach( $r_ as $id )
  69.      {
  70.       $this->namespace['stat'][$id]['control_text'] = 'in reading #'.$iter;
  71.       $r_id = array_search( $id, $this->namespace['conn'] );
  72.       $stream_info = stream_get_meta_data( $this->namespace['conn'][$r_id] );
  73.       $r_data = fread( $this->namespace['conn'][$r_id], 8192 );
  74.       if( strlen( $r_data ) > 0 ){ $this->namespace['output'][$r_id] .= $r_data; }
  75.       $r_data = NULL;
  76.       unset( $r_data );
  77.       if( $stream_info['eof'] === true )
  78.       {
  79.        fclose( $this->namespace['conn'][$r_id] );
  80.        unset( $this->namespace['conn'][$r_id] );
  81.        $this->namespace['conn'][$r_id] = NULL;
  82.        unset( $this->namespace['conn'][$r_id] );
  83.       }
  84.      }
  85.     }
  86.    }
  87.    else
  88.    {
  89.     break;
  90.    }
  91.   }
  92.  }
  93.  
  94.  function __destructor()
  95.  {
  96.   unset( $this );
  97.  }
  98. }
  99.  
  100.  $new = new threadetSocketCall();
  101.  $header =  "GET __get__ HTTP/1.1\n".
  102.     "Host: __host__\n".
  103.     "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".
  104.     "Accept-Language: en-us,en;q=0.5\n".
  105.     "Connection: close\n\n";
  106.  
  107.  $host = 'localhost';
  108.  $new->mHostAddConnect( $host.':80', preg_replace( array( '/__host__/i', '/__get__/i' ), array( $host, '/' ), $header ) );
  109.  $new->getResults();
  110.  print_r( $new->namespace['output'][0] );
  111.  # html file to parse
  112.  $parser = new htmlTagParser();
  113.  $parser->mSetContent( $new->namespace['output'][0] );
  114.  $parser->mParseTags( array( 'a', 'title' ) );
  115.  $aTags = $parser->mGetTags();
  116.  print_r( $aTags );
  117.  die();

Саитмап, Sitemap

April 2nd, 2008 zetxxx

Или как гоогле да ни обходи по добре, информацията която съм дал като линкове
е напълно достатъчна.
Препоръки от гоогъл
sitemaps.org

Плюс
вече саита си има и флагчета надявам се потребителите и Г да го оценят

Белоградчишки скали

April 1st, 2008 zetxxx

Всеки един да гласува за Белоградчишки скали като едно от седемте чудеса на света .

Съвсем случайно попаднах на една статия в блог докато разглеждах блог резултатите в Г