С нами с 30.10.04
Сообщения: 19
Рейтинг: 3
|
Добавлено: 04/08/06 в 06:50 |
Есть скрипт проверки проксей, но он как то некорректно работает.
Код: |
<?php
class DaemonProxy extends Daemon
{
var $spider = null;
var $sources = array(
array('http://www.proxy4you.com/page(#).html', 1, 5, 1),
array('http://www.publicproxy.com/page(#).html', 1, 5, 1)
);
var $cache_file = "tmp/proxy_alive.txt";
function DaemonProxy()
{
parent::Daemon('daemon_proxy', ROOT_DIR);
}
function do_task()
{
while(true)
{
if (filemtime($this->cache_file) < time() - 60*60*3)
{
$proxyarray1 = array();
$proxyarray2 = file($this->cache_file);
foreach ($this->sources as $key => $row)
{
$contents = $this->getPage($row[0], $row[1], $row[2], $row[3]);
$pattern = '/<td[^>]*>([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})<\/td>\s*<td[^>]*>([0-9]*)<\/td>\s*<td>(anonymous|high anonymity)<\/td>/i';
preg_match_all ($pattern, $contents, $proxyarray1, PREG_SET_ORDER);
foreach ($proxyarray1 as $row)
{
$proxyarray2[] = $row[1].":".$row[2];
}
}
$proxyarray2 = array_unique($proxyarray2);
$this->write_log("vsego naideno ".count($proxyarray2)." neproverennix proxei");
$proxyarray1 = array();
foreach ($proxyarray2 as $proxy)
{
$proxy = trim($proxy);
if ($this->check_proxy($proxy))
{
echo "$proxy - alive<br>";
$proxyarray1[] = $proxy;
$this->check_command();
}
else echo "$proxy - dead<br>";
flush();
}
$this->write_log("za seans naideno ".count($proxyarray1)." zhivih anonimnih proxei");
fwrite(fopen($this->cache_file, 'w'), implode("\n", $proxyarray));
}
else echo "see cache";
$this->mysleep(600);
}
}
function getPage($url, $start=0, $end=0, $step=1)
{
for ($i = $start; $i <= $end; $i += $step)
{
$contents .= file_get_contents(str_replace('(#)', $i, $url));
}
return $contents;
}
function check_proxy($proxy)
{
$real_ip = $_SERVER["SERVER_ADDR"];
$post_url= conf('home_dir')."/post.php";
$spider = new Spider();
$spider->timeout = 5;
$spider->proxy = $proxy;
if ($spider->fetch($post_url, "ip=$real_ip", "POST"))
{
if (stristr($spider->result, "ANONYMOUS"))
{
return true;
}
}
return false;
}
}//class
?>
|
этот скрипт содержит в себе вызов другого скрипта, который определяет анонимная ли прокся, вот этот второй скрипт:
Код: |
<?php
if (isset($_POST["ip"]))
{
$real_ip = $_POST["ip"];
$remote_ip = $_SERVER["REMOTE_ADDR"];
$remote_forward = $_SERVER["HTTP_X_FORWARDED_FOR"];
if($remote_ip == $real_ip or $remote_forward == $real_ip)
{
echo "TRANSPARENT";
}
else
{
echo "ANONYMOUS";
}
}
else
{
echo "DIED";
}
?>
|
Огромная просьба, если видите какой то косяк из за чего это может быть, скажите мне.
|
|
|
|
programmer
С нами с 08.12.02
Сообщения: 7615
Рейтинг: 5760
|
Добавлено: 04/08/06 в 12:04 |
а где класс
оно на класс ругается
|
|
|
|
С нами с 01.10.03
Сообщения: 751
Рейтинг: 318
|
Добавлено: 04/08/06 в 22:35 |
ага
Код: | class DaemonProxy extends Daemon |
класс является расширением класса Daemon (а его то и нету)
|
|
|
|
С нами с 30.10.04
Сообщения: 19
Рейтинг: 3
|
Добавлено: 06/08/06 в 10:32 |
а вот и класс этот:
Код: |
<?php
class Daemon
{
var $name = 'daemon';
var $home = '.';
var $log_file = '';
var $run_file = '';
var $time_start = 0;
var $handle = null;
function Daemon($name='daemon', $home='.')
{
$this->name = $name;
$this->home = $home;
$this->log_file = $home ."/tmp/$name.log";
$this->run_file = $home ."/tmp/$name.run";
set_time_limit(0);
ignore_user_abort(true);
ob_implicit_flush();
}
//zapusk demona
function start()
{
if (!$this->is_running())
{
register_shutdown_function(array(&$this, 'shutdown_function'));
//lo4im file
$this->handle = fopen($this->log_file, "a+");
flock($this->handle, LOCK_EX|LOCK_NB);
$this->write_log('Zapusk Demona');
$this->write_status('running');
$this->do_task();
}
else
{
//logging("Process ".$this->name." uzhe zapus4en");
}
return true;
}
//demon stop
function stop()
{
$this->write_log('Demon Stop');
$this->write_status('stopping');
die();
}
//Restart Demona
function restart()
{
$this->shutdown_function();
}
//Osnovnaia zada4a
function do_task()
{
// override this method
}
//zaver6enie raboti
function finish_task()
{
// override this method
}
function shutdown_function()
{
$this->finish_task();
fclose($this->handle);
$status = $this->read_status();
if ($status == 'running')
{
sleep(3);
logging("Perezagruzka processa ".$this->name);
run_daemon($this->name);
}
}
//demon zapus4en?
function is_running()
{
if (file_exists($this->log_file))
{
$fp = fopen($this->log_file, "r+");
if (!flock($fp, LOCK_EX|LOCK_NB))
{
return true;
}
}
return false;
}
//proverka nali4ia komandi
function check_command()
{
$status = $this->read_status();
switch ($status)
{
case "stop":
$this->write_log('Polu4en signal ostanovki');
$this->stop();
break;
case "restart":
$this->write_log('Polu4en signal restarta');
$this->restart();
break;
case "change":
$this->write_log('Polu4en signal izmenenia nastroek');
$this->restart();
break;
}
echo "don`t kill me<br>";
return true;
}
//4tenie statusa
function read_status()
{
//blokiruem fail i 4itaem
if (file_exists($this->run_file))
{
$f = fopen($this->run_file, "r");
flock($f, 2);
$content = file_get_contents($this->run_file);
fclose($f);
}
return trim($content);
}
//zapis statusa
function write_status($content)
{
//blokiruem fail i pishem
$f = fopen($this->run_file, "w");
flock($f, 2);
fputs($f, $content);
fflush($f);
fclose($f);
}
//zapis loga
function write_log($msg)
{
if (filesize($this->log_file) > 1000000) ftruncate($this->handle, 0);
fwrite($this->handle, "[".date("Y/m/d H:i:s")."] $msg\n");
}
function mysleep($seconds)
{
$i=0;
while ($i < $seconds)
{
sleep(5);
$this->check_command();
$i = $i+5;
}
}
} //class Daemon
?>
|
где то в самой организации чека косячок можт?
|
|
|
|
programmer
С нами с 08.12.02
Сообщения: 7615
Рейтинг: 5760
|
Добавлено: 06/08/06 в 12:47 |
зайди на урлы что в самом верху кода - для чекинга - они умерли имхо
|
|
|
|
С нами с 30.10.04
Сообщения: 19
Рейтинг: 3
|
Добавлено: 06/08/06 в 16:13 |
да нет же, дело не в урлах, если урлы рабочие, то и сбор прокси происходит нормально, вот чекает их непонятно как
|
|
|
|