Ankündigung

Einklappen
Keine Ankündigung bisher.

Thread Support in PHP

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • omex
    hat ein Thema erstellt Thread Support in PHP.

    Thread Support in PHP

    Hallo,

    gibt es eine Möglichkeit in PHP Threads zu nutzen? Möchte gerne ein Objekt mit Methoden parallel laufen lassen, weiß aber nicht ob das überhaupt geht.

    Jemand einen Rat? Danke für die hilfe

  • Flor1an
    antwortet
    Dafür ist PHP auch nicht wirklich geeignet. Wenn du Zeitaufwendige Anwendungen schreiben willst solltest du lieber auf eine andere Sprache ausweichen die das gut erledigen kann. PHP ist da nicht geeignet. Ich würd jetzt auf Java setzen, aber das bleibt dir überlegen.

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Und nu?

    Einen Kommentar schreiben:


  • omex
    antwortet
    PHP-Code:
        public function getContent($url$parsedSite='') {
            
    $this->exception=FALSE;
            
    $this->fehlerStatus=FALSE;    
            try{

                
    $client = new Zend_Http_Client($url$this->config);
                        
    $client->setConfig(array(
                      
    'useragent' => $this->userAgent,
                    
    'keepalive'      => TRUE    
                
    ));
         
    $client->setHeaders('Accept-Language''de-DE,de;q=0.8,de-de;q=0.6,en-us;q=0.4,en;q=0.2');            
                

                
    //Request wird abgesetzt.
                
    $client->request();

                
    //Zend Response Objekt wird initialisiert
                
    $this->responde Zend_Http_Response::fromString($client->getLastResponse());

                
    //Wenn Responde fehlerhaft.
                

                
    if ($this->responde->isError() || $this->responde->getStatus() == 999) {


                    
    //Wenn Fehlercode 503 und Proxy nicht aktiv ist.
                    
                
    if(($this->responde->isError() || $this->responde->getStatus() == 503 || $this->responde->getStatus() == 999) && ($parsedSite=='Yahoo'||$parsedSite=='Google')){

                
    $this->fehlerStatus=TRUE;


            if((
    $this->googleIndex== -|| $this->yahooIndex== -1) && $this->proxyAktiv==FALSE) {            
                        
    $dbObjekt = new db();
                        
                        
    $select = ("SELECT IP,Port    
                        FROM proxys
                        WHERE ID BETWEEN 
    $dbObjekt->startID AND $dbObjekt->EndID"
                           
    );
                           
                                                  
                        
    $this->ips $dbObjekt->dbSelect($select);
                        
    $this->proxyAktiv=TRUE;

                        
    $proxyCheck = new proxy();
                        
                        foreach(
    $this->ips as $i => $ips) {
                            
                        
                            
    $test $proxyCheck->testeProxy($ips['IP'],$ips['Port']);
                            if(
    $test == TRUE){
                            
    $funzt[] = $ips;
                            }
                    
                            if(
    $test == FALSE){
                            
    $funztNet[] = $ips;
                            }

                        
                        }
                        
                        
    $dbObjekt->dbDel($funztNet);
                        
                        echo 
    "Es sind nun ".count($funzt)." IPs im Array";                        
                        
    $this->ipAnzahl count($funzt) ;
                                        
                        
    $this->googleIps $funzt;
                        
    $this->yahooIps $funzt;    
                        
                        
    $this->ips null;
                        unset(
    $this->ips);
                        
                        }

            
            if(
    $this->proxyAktiv==TRUE) {
                
        
                if (
    $parsedSite=='Google') {
                    
                    
    $this->googleIndex $this->googleIndex  1;  
                    
                        if(
    $this->yahooIndex == $this->ipAnzahl) {
                        
                    echo 
    "<h2>KEINE PROXYS MEHR IM ARRAY</h2>";
                    exit;
                    }                
                    
                }elseif(
    $parsedSite=='Yahoo'){
                    
    $this->yahooIndex $this->yahooIndex  1;  

                if(
    $this->yahooIndex == $this->ipAnzahl) {
                        
                    echo 
    "<h2>KEINE PROXYS MEHR IM ARRAY</h2>";
                    exit;
                    }        
                
                }
                
                if (
    $parsedSite=='Google') {
                    
                            
    $this->config = array(
                            
    'adapter'    => 'Zend_Http_Client_Adapter_Proxy',
                            
    'proxy_host' => $this->googleIps[$this->googleIndex][IP],
                            
    'proxy_port' =>$this->googleIps[$this->googleIndex][Port],
                            
    'timeout' => '10',
                            
    'proxyBeNam' => '',
                            
    'proxyPw' => ''
                            
                        
    );
                        
                        
                        
                        
    //echo 'Nutze nun IP Nummer: '.$this->googleIps[$this->googleIndex][IP].":".$this->googleIps[$this->googleIndex][Port];                
                        
                
    }elseif($parsedSite=='Yahoo'){
                    
                            
    $this->config = array(
                            
    'adapter'    => 'Zend_Http_Client_Adapter_Proxy',
                            
    'proxy_host' => $this->yahooIps[$this->yahooIndex][IP],
                            
    'proxy_port' =>$this->yahooIps[$this->yahooIndex][Port],
                            
    'timeout' => '10',
                            
    'proxyBeNam' => '',
                            
    'proxyPw' => ''
                            
                        
    );
                }
                
                
                    };

                }
                }
            if(!(
    $this->responde->isError()) && !($this->responde->getStatus() == 999)) {
                
    $this->fehlerStatus=FALSE;
                    
    $content $client->getLastResponse()->getBody();
                    return 
    $content;
                }
                
            
            }catch(
    Exception $e){
                
    $this->fehlerStatus=TRUE;
                
                
    $this->exception=TRUE;

            
    //Wenn Google Sorry Seite anzeigt wird ein einzeiliges Cookie gesetzt und ist deshalb ein String.
            //Es muss also überprüft werden, ob getHeader kein Array ist.
        

            
    if(($this->googleIndex== -|| $this->yahooIndex== -1) && $this->proxyAktiv==FALSE && ($parsedSite=='Yahoo'||$parsedSite=='Google') && $this->exception==TRUE) {            
                        
    $dbObjekt = new db();
                        
                        
    $select = ("SELECT IP,Port    
                        FROM proxys
                        WHERE ID BETWEEN 
    $dbObjekt->startID AND $dbObjekt->EndID"
                           
    );
                           
                                                  
                        
    $this->ips $dbObjekt->dbSelect($select);
                        
    $this->proxyAktiv=TRUE;

                        
    $proxyCheck = new proxy();
                        
                        foreach(
    $this->ips as $i => $ips) {
                            
                        
                            
    $test $proxyCheck->testeProxy($ips['IP'],$ips['Port']);
                            if(
    $test == TRUE){
                            
    $funzt[] = $ips;
                            }
                    
                            if(
    $test == FALSE){
                            
    $funztNet[] = $ips;
                            }

                        
                        }
                        
                        
    $dbObjekt->dbDel($funztNet);
                        
                        
                echo 
    "Es sind nun ".count($funzt)." IPs im Array";                        
                        
    $this->ipAnzahl count($funzt) ;
                
                        
    $this->googleIps $funzt;
                        
    $this->yahooIps $funzt;    
                        
                        
    $this->ips null;
                        unset(
    $this->ips);
            

                        }

            
            if(
    $this->proxyAktiv==TRUE && ($parsedSite=='Yahoo'||$parsedSite=='Google') && $this->exception==TRUE) {
                if (
    $parsedSite=='Google') {
                    
                    
    $this->googleIndex $this->googleIndex  1;  
                    
                    if(
    $this->googleIndex == $this->ipAnzahl) {
                        
                    echo 
    "<h2>KEINE PROXYS MEHR IM ARRAY</h2>";
                    exit;        
                    }        
                    
                    
                }elseif(
    $parsedSite=='Yahoo'){
                    
    $this->yahooIndex $this->yahooIndex  1;  
                    
                    if(
    $this->yahooIndex == $this->ipAnzahl) {
                        
                    echo 
    "<h2>KEINE PROXYS MEHR IM ARRAY</h2>";
                    exit;
                    }    
                }
                
                if (
    $parsedSite=='Google') {
                    
                            
    $this->config = array(
                            
    'adapter'    => 'Zend_Http_Client_Adapter_Proxy',
                            
    'proxy_host' => $this->googleIps[$this->googleIndex][IP],
                            
    'proxy_port' =>$this->googleIps[$this->googleIndex][Port],
                            
    'timeout' => '10',
                            
    'proxyBeNam' => '',
                            
    'proxyPw' => ''
                            
                        
    );
                        
                        
                        
    //echo 'Nutze nun IP Nummer: '.$this->googleIps[$this->googleIndex][IP].":".$this->googleIps[$this->googleIndex][Port];                
                        
                        
                    
                
    }elseif($parsedSite=='Yahoo'){
                    
                            
    $this->config = array(
                            
    'adapter'    => 'Zend_Http_Client_Adapter_Proxy',
                            
    'proxy_host' => $this->yahooIps[$this->yahooIndex][IP],
                            
    'proxy_port' =>$this->yahooIps[$this->yahooIndex][Port],
                            
    'timeout' => '10',
                            
    'proxyBeNam' => '',
                            
    'proxyPw' => ''
                            
                        
    );
                }
                
                    };

                
    //print 'In Klasse '.$e->getFile().' in Zeile '.$e->getLine().' '.$e->getMessage();
            
    }
        } 

    Einen Kommentar schreiben:


  • omex
    antwortet
    Ich möchte gerne mittels Zend Framework unterstützung Ips auf Funktionalität prüfen.
    Zurzeit stehen die Ips in einem Array, werden dann mittels ForEach durchlaufen.
    Möchte gerne mehrere Ips "gleichzeitig" testen, um die Wartezeit herunter zu schrauben.
    Zwar könnte ich 2tes Zend http objekt anlegen, wäre aber sehr performance intensiv.

    PHP-Code:
    foreach($proxys[0] as $test => $ip)
    {
        
    if(!empty(
    $ip)) {
        
    $ipexplode(":",$ip);



    $fehler $this->testeProxy($ip[0],$ip[1]);
        
    }    


    public function 
    testeProxy($ip,$port) {
        
    $this->config = array(
        
    'adapter'    => 'Zend_Http_Client_Adapter_Proxy',
        
    'proxy_host' => $ip,
        
    'proxy_port' => $port,
        
    'timeout' => '10',
        );    
        

    /**
     * Es wird geprüft, ob Google aufgerufen werden kann. 
     */    
        
    $url ='http://www.google.de/search?hl=de&q=allintitle:seo';    

    try {

    $this->getContent($url);
    if(
    $this->fehlerStatus==TRUE)
    {

        
    $this->config=NULL;
        unset(
    $this->config);
        return 
    FALSE;
    }

    $test $this->getDom($url,null,'p#resultStats b[3]','innerText');

    //Hier werden Umleitungen von Proxys abgefangen.
    //Es wird ein Code 400 zurück geliefert, welcher kein Fehler ist.
    if($test==null) {
    $this->config=NULL;
    unset(
    $this->config);
    return 
    FALSE;
        
    }
    $this->config=NULL;
    unset(
    $this->config);
    return 
    TRUE;

    }catch(
    Exception $e){
        
    $this->config=NULL;
        unset(
    $this->config);
        return 
    FALSE;
    }
    }

    Einen Kommentar schreiben:


  • Flor1an
    antwortet
    Wofür brauchst du das? Was möchtest du machen? Vlt. gibt es einen anderen Weg.

    Einen Kommentar schreiben:


  • Tiberius
    antwortet
    Das gibt es noch nicht, derzeit gibt es nur die Prozessnebenläufigkeit. Das Thema ist allerdings sehr komplex da die Kommunikation zwischen den Prozessen selbst aufgebaut und gehandhabt werden muss

    Einen Kommentar schreiben:


  • lstegelitz
    antwortet
    Nein

    Einen Kommentar schreiben:

Lädt...
X