2017-09-29 15 views
0

何が起こるかは、私がウェブサイトに多くのリクエストを行い、スクリプトが自分のサーバー上にあるPHPのスクリプトを持っていることです。ただし、次のような問題がある:リクエストは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); 



?> 

また、私はすでに私のサーバー上で「max_execution_timeは」機能を設定し、「0」に設定することを明らかにしました。あなたが私を手伝ってくれれば幸いです。私はスクリプトがそれをやりたいのですが、リモートサーバがそのエラーを出したら、私のスクリプトはsleep()をやります。私はあらゆる方法で試しましたが、それは私のためには機能しません。

ありがとうございました!

+0

'$ line = fgets($ file);'この繰り返しは、最後の行だけを有効に上書きします。さもなければ私はあなたのクライアントの観点からタイムアウトエラーにつながるあなたのスクリプトで何か普通のものを見ていない、あなたが投稿するサーバーを制御していますか? – Scuzzy

+0

これをどのように上書きしないように修正できますか?だから私はここに戻ってきます...そして、私はリモートサーバのコントロールを持っていません – Zenabria

+0

@Scuzzyそしてあなたに感謝.. – Zenabria

答えて

0

1:$ran = explode("\n", file_get_contents('nombres.txt'));ここでは、Linuxスタイルの改行\ nを区切り文字として使用します。これは、if ($file = fopen("correos.txt", "r")) {を除いてOKです。改行は、OSネイティブテキストモードで開きます。いくつかのOS(Windowsのようなもの)、いくつかのもの(Linuxのようなもの)、そしていくつかのOS(古いMacのようなもの)では\ r \ nこの行はいくつかのOSでしか動作しません。プラットフォームに依存しないようにするには、バイナリモードで "rb"を開きます。次は$var_post_data = 'site_id=1&email='.$line.'&name='.$randomElement.'id=39494393';ここ$ lineと$ randomElementはURLコード化されていないので、&または=またはÆØÅまたはそれ以外の文字がたくさんあると、エンコーディングが不正になり、サーバが400 Bad Requestで応答したり、破損したデータを読み込んだりする可能性があります。それを適切にurlencodeするためにurlencode()を使用してください。次は:このコードは疑わしいと思われます:Cookie: ws_visit_id=2_170927230320231_5878、あなたは確かに新鮮なものを取得するのではなく、クッキーIDをハードコードしたいですか?このヘッダは無効です。x-www-urlencodedはUTF8をサポートしていません。常にASCIIエンコーディングで、アスキー文字以外の特殊なエンコーディングを使用していますが、このヘッダを追加しないでください。すべて、libcurlはあなたのためにそれを追加しますが、あなたとは違って、libcurlはそうするときに何のタイプミスもしません。 これらの問題のいずれも、スクリーンショットのエラーメッセージについては説明していません。何らかの理由で起動するHTTPサーバーに負荷分散スキームがあるように見えます。これはWebサーバーの設定上の問題で、PHPの問題ではありません。エラーはおそらくApacheやNginxやIISやPHPの前にあるものによって生成されます。

関連する問題