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
Ankündigung
Einklappen
Keine Ankündigung bisher.
Thread Support in PHP
Einklappen
Neue Werbung 2019
Einklappen
X
-
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.
-
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== -1 || $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== -1 || $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:
-
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)) {
$ip= explode(":",$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:
-
Wofür brauchst du das? Was möchtest du machen? Vlt. gibt es einen anderen Weg.
Einen Kommentar schreiben:
-
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:
Einen Kommentar schreiben: