Почему мой скрипт php curl истекает? - PullRequest
0 голосов
/ 29 марта 2011

Ниже приведен код, который принимает URL-адреса и прокси из полей textarea, использует curl для получения исходного кода, берет определенные ссылки со страниц и вставляет их в базу данных.Это работало для одного URL, но не работает после того, как я добавил прокси и два цикла для нескольких URL / прокси.Теперь он просто отключается без сообщения об ошибке и говорит, что не может найти файл.Я получаю прокси от proxy-list.org.Любые указатели будут оценены.

<html>
<body>

<?
$urls=explode("\n", $_POST['url']);
$proxies=explode("\n", $_POST['proxy']);

$allurls=count($urls);
$allproxies=count($proxies);

for ( $counter = 0; $counter <= $allurls; $counter++) {
for ( $count = 0; $count <= $allproxies; $count++) {

 $ch = curl_init();
 curl_setopt($ch, CURLOPT_URL,$urls[$counter]);
 curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 0);
 curl_setopt($ch, CURLOPT_PROXY,$proxies[$count]);
 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 curl_setopt($ch, CURLOPT_CUSTOMREQUEST,'GET');
 curl_setopt ($ch, CURLOPT_HEADER, 1); 
 curl_exec ($ch); 
 $curl_scraped_page=curl_exec($ch); 

//use the new tool box
require "ToolBoxA4.php";

//call the new function parseA1
$arrOut = parseA1 ($curl_scraped_page);

//the output is an array with 3 items:  $arrOut[0] is RHS, $arrOut[1] is TOP, $arrOut[2] is NAT
//to look at the RHS

//$arrLookAt = explode(",", $arrOut[0]);
//print_r ($arrLookAt);
//echo "<br><hr><br>";
//foreach ($arrLookAt as $value){
//       echo $value;
//       echo "<br>";
//}

$FileName = abs(rand(0,1000000000000));
$FileHandle = fopen($FileName, 'w') or die("can't open file");
fwrite($FileHandle, $curl_scraped_page);

//$dom = new DOMDocument();
//@$dom->loadHTML($curl_scraped_page);
//$xpath = new DOMXPath($doc);
//$hrefs = $xpath->query('//a[@href][@id]');

$hostname="****";
$username="****";
$password="****";
$dbname="****";
$usertable="****";

$con=mysql_connect($hostname,$username, $password) or die ("<html><script language='JavaScript'>alert('Unable to connect to database! Please try again later.'),history.go(-1)</script></html>");
mysql_select_db($dbname ,$con);

//function storeLink($url) {
//  $query = "INSERT INTO **** (time, ad1, ad2) VALUES ('$FileName','$url', '$gathered_from')";
//  mysql_query($query) or die('Error, insert query failed');
//}
//for ($i = 0; $i < $hrefs->length; $i++) {
//  $href = $hrefs->item($i);
//  $url = $href->getAttribute('href');
//  storeLink($url);
//
//}

//function storeLink($top, $right) {
//$query = "INSERT INTO happyturtle (time, ad1, ad2) VALUES ('$FileName','$top', '$right')";
//mysql_query($query) or die('Error, insert query failed');

$right = explode(",", $arrOut[0]);
$top = explode(",", $arrOut[1]);

for ( $countforme = 0; $countforme <= 5; $countforme++) {

$topnow=$top[$countforme];

$query = "INSERT INTO **** (time, ad1) VALUES ('$FileName','$topnow')";
mysql_query($query) or die('Error, insert query failed');

}

for ( $countforme = 0; $countforme <= 15; $countforme++) {

$rightnow = $right[$countforme];


$query = "INSERT INTO **** (time, ad1) VALUES ('$FileName','$rightnow')";
mysql_query($query) or die('Error, insert query failed');

}


mysql_close($con);

fclose($FileHandle);

curl_close($ch);

//echo $FileName; 

//echo "<br/>";

}
}

?>

</body>
</html>

1 Ответ

0 голосов
/ 17 апреля 2011

Ваш код будет получать каждый из URL по порядку, поэтому запуск может занять много времени.Одним из возможных решений является использование «multi» интерфейса cURL, который позволяет выполнять несколько запросов одновременно - http://www.php.net/manual/en/function.curl-multi-exec.php

Другой альтернативой может быть увеличение времени ожидания PHP на сервере, который вы используете, если это, по сути, пакетпроцесс.Информация об этом находится по адресу http://php.net/manual/en/function.set-time-limit.php

Одно замечание, которое я хотел бы сделать, заключается в том, что публичные прокси-серверы (например, из proxy-list.org) могут очень медленно отвечать, и поскольку вы запрашиваете из нескольких мест ваш скриптвсегда будет отвечать столько, сколько потребуется самому медленному прокси (что может быть дольше, чем настройка тайм-аута PHP вашего сервера).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...