2017-09-29 10 views
0

Was passiert ist, dass ich ein Skript in PHP habe, wo es viele Anfragen an eine Website macht und mein Skript auf meinem Server ist. Allerdings ist das Problem wie folgt:Anfrage Timeout mit PHP + CURL

ERROR - REQUEST TIMED OUT

<?php 

$ch = curl_init(); 
$contador = 0; 
$ran = explode("\n", file_get_contents('nombres.txt')); 
$randomElement = $ran[array_rand($ran, 1)]; 

if ($file = fopen("correos.txt", "r")) { 
    while(!feof($file)) { 
     $line = fgets($file); 


$var_post_data = 'site_id=1&email='.$line.'&name='.$randomElement.'id=39494393'; 
curl_setopt($ch, CURLOPT_URL,"site"); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS,$var_post_data); //Post Fields 
//curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

$headers = [ 
    'Cookie: ws_visit_id=2_170927230320231_5878; has_track_visit=true; _uetsid=_uet0639d46c', 
    'DNT: 1', 
    'Connection: keep-alive', 
    'Accept: application/json, text/javascript, */*; q=0.01', 
    'Accept-Language: en-US,en;q=0.5', 
    'Cache-Control: no-cache', 
    'Content-Type: application/x-www-form-urlencoded; charset=UTF-8', 
    'Host: site', 
    'Referer: site', 
    'User-Agent: ' . $randomElement, 
    'X-Requested-With: XMLHttpRequest' 
]; 

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
echo curl_errno($ch); 
echo curl_error($ch); 
$server_output = curl_exec ($ch); 

    echo $server_output ; 
    echo $contador; 
    $fp = fopen('data.txt', 'a'); 
    fwrite($fp, $server_output); 
    $stringData = "-------------" . "\n"; 
    fwrite($fp, $stringData); 

    // sleep for 240 sec 
    #sleep(240); // sleep for 240 sec 
    #sleep(240); // sleep for 240 sec 
    #sleep(240); // sleep for 240 sec 
if(curl_errno($ch) == 26) { 
    sleep(30); 
} 
else { 
    echo 'Not errors'; 
    continue; 
} 


    } 
    fclose($file); 
} 
curl_close ($ch); 



?> 

Ich stellte auch klar, dass ich bereits die „max_execution_time“ -Funktion auf meinem Server konfiguriert und setzen Sie ihn auf „0“. Ich würde mich freuen, wenn Sie mir helfen könnten, ich möchte, dass das Skript es tut, und wenn der Remote-Server diesen Fehler gibt, lassen Sie mein Skript einen sleep() ausführen. Ich habe es auf alle Arten versucht und es funktioniert nicht für mich.

Vielen Dank!

+0

'$ line = fgets ($ file);' Bei jeder Iteration wird diese Variable überschrieben und enthält somit nur die letzte Zeile? Sonst sehe ich mit Ihrem Skript nichts Ungewöhnliches, was aus Sicht des Clients zu Zeitüberschreitungsfehlern führen würde. Haben Sie die Kontrolle über den Server, auf den Sie schreiben? – Scuzzy

+0

Wie kann ich das durch Überschreiben beheben? also versuche ich und komm hierher zurück ... Und nicht, ich habe keine Kontrolle über Remote-Server – Zenabria

+0

@Scuzzy Und danke für dich .. – Zenabria

Antwort

0

Sie einige Probleme haben, 1: $ran = explode("\n", file_get_contents('nombres.txt')); hier verwenden Sie den Linux-Stil Newline \ n als Trennzeichen, die außer in Ordnung sein würde, if ($file = fopen("correos.txt", "r")) { hier öffnen Sie es in OS-native Textmodus newlines Bedeutung wird mit lesen \ r \ n auf einigen Betriebssystemen (wie Windows), \ n auf einigen (wie Linux) und auf einigen Betriebssystemen (wie älteren Macs), daher funktioniert diese Zeile nur auf einigen Betriebssystemen. Um es plattformunabhängig zu machen, öffne es im Binärmodus "rb". Als nächstes: $var_post_data = 'site_id=1&email='.$line.'&name='.$randomElement.'id=39494393'; hier $ line und $ randomElement ist nicht urlencoded, also, wenn sie & oder = oder ÆØÅ oder viele andere Zeichen enthalten, wird die Codierung fehlerhaft sein, und der Server wird wahrscheinlich mit 400 Bad Request reagieren oder anderweitig beschädigte Daten lesen. Verwenden Sie urlencode(), um es richtig zu codieren. weiter: Dieser Code sieht verdächtig aus: Cookie: ws_visit_id=2_170927230320231_5878, willst du die Cookie-ID wirklich fest codieren, anstatt nur eine neue zu bekommen? diese cookie id ist wahrscheinlich längst abgelaufen .. weiter: Content-Type: application/x-www-form-urlencoded; charset=UTF-8 diese header ist ungültig, x-www-urlencoded unterstützt UTF8 nicht, es ist immer in ASCII-encoding, mit spezieller encodierung für nicht-ASCII-zeichen, aber füge diesen header nicht bei all, libcurl wird es für Sie hinzufügen, und anders als Sie wird libcurl dabei keine Tippfehler machen. aber keines dieser Probleme erklärt Ihre Fehlermeldung im Screenshot. Es sieht so aus, als gäbe es ein Load-Balancing-Schema in Ihrem http-Server, das aus irgendeinem Grund einsetzt, es ist ein Web-Server-Konfigurationsproblem, kein PHP-Problem. Der Fehler wird wahrscheinlich von Apache oder Nginx oder IIS oder was immer vor PHP ist generiert.