2017-09-29 1 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); 



?> 

나는 또한 내가 이미 "0"으로 내 서버의 "max_execution_time이라는"기능을 구성하고 설정하는 것이 분명. 당신이 나를 도울 수 있다면 감사하겠습니다. 스크립트에서 해보고 싶습니다. 원격 서버에서 오류가 발생하면 스크립트에서 잠을 자도록하십시오(). 나는 모든면에서 시험을 보았고 그것이 나를 위해 일하지 않는다.

감사합니다.

+0

'$ line = fgets ($ file);'반복 할 때마다이 var가 덮어 쓰여지고 마지막 줄만 효과적으로 포함됩니까? 그렇지 않으면 클라이언트 관점에서 타임 아웃 오류로 이어질 스크립트가있는 일반적인 것을 보지 못했습니다. 게시하는 서버를 제어하고 있습니까? – Scuzzy

+0

어떻게 이것을 덮어 쓰지 않게 할 수 있습니까? 그래서 나는 여기에 다시 와서 ... 그리고, 나는 원격 서버를 제어 할 수 없다. – Zenabria

+0

@Scuzzy 그리고 너를 위해서 고맙다 .. – Zenabria

답변

0

여기에 1 : $ran = explode("\n", file_get_contents('nombres.txt')); 리눅스 스타일의 개행 \ n을 구분 기호로 사용합니다. 단, if ($file = fopen("correos.txt", "r")) {은 OS 기본 텍스트 모드로 열면 줄 바꿈을 읽을 수 있습니다. \ r \ n 일부 OS (예 : Windows), 일부 (Linux) 및 일부 OS (예 : 이전 Mac)와 같은 경우이 라인은 일부 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를 얻는 대신 쿠키 ID를 하드 코딩 하시겠습니까? 그 쿠키 아이디는 오래 전에 만료되었을 것입니다. 다음 : Content-Type: application/x-www-form-urlencoded; charset=UTF-8이 헤더는 유효하지 않습니다. x-www-urlencoded는 UTF8을 지원하지 않습니다. 항상 아스키 문자가 아닌 ASCII 인코딩을 사용하고 있지만이 헤더를 추가하지 마십시오. 모두, libcurl은 그것을 대신해서 추가 할 것이고, libcurl은 그렇게 할 때 오타를 만들지 않을 것이다. 이 문제는 스크린 샷의 오류 메시지를 설명하지 못합니다. HTTP 서버에로드 밸런싱 구성표가있는 것처럼 보입니다.이 구성표는 웹 서버 구성 문제가 아닌 PHP 문제입니다. 오류는 Apache 또는 Nginx 또는 IIS 또는 php 앞에있는 모든 것으로 생성됩니다.