Inviseble_Demon
Мой дом здесь!
- Регистрация
- 11 Дек 2008
- Сообщения
- 478
- Реакции
- 377
- Автор темы
- #1
Итак дела с многопоточностью у меня не очень - подумал может есть люди готовые за это взяться....!?
Что нужно?
Нужен скрипт разработанный на основе имеющегося скрипта для многопоточного распознания капчей через известного сервиса Для просмотра ссылки Войдиили Зарегистрируйся
Сама функция должна работать так:
На входе масив с относительным адресом капчи на выходе в тойже последовательности распознаный код.
Исходный код
Что нужно?
Нужен скрипт разработанный на основе имеющегося скрипта для многопоточного распознания капчей через известного сервиса Для просмотра ссылки Войди
Сама функция должна работать так:
На входе масив с относительным адресом капчи на выходе в тойже последовательности распознаный код.
Исходный код
PHP:
<?php
/*
$filename - полный путь к файлу
$apikey - ключ для работы
$rtimeout - задержка между опросами статуса капчи
$mtimeout - время ожидания ввода капчи
включить/выключить verbose mode (комментирование происходящего):
$is_verbose - false(выключить), true(включить)
дополнительно (дефолтные параметры править не нужно без необходимости):
$is_phrase - 0 либо 1 - флаг "в капче 2 и более слов"
$is_regsense - 0 либо 1 - флаг "регистр букв в капче имеет значение"
$is_numeric - 0 либо 1 - флаг "капча состоит только из цифр"
$min_len - 0 (без ограничений), любая другая цифра указывает минимальную длину текста капчи
$max_len - 0 (без ограничений), любая другая цифра указывает максимальную длину текста капчи
пример:
$text=recognize("/path/to/file/captcha.jpg","ваш_ключ_из_админки",true);
$text=recognize("/path/to/file/captcha.jpg","ваш_ключ_из_админки",false); //отключено комментирование
$text=recognize("/path/to/file/captcha.jpg","ваш_ключ_из_админки",false,1,0,0,5); //отключено комментирование, капча состоит из двух слов, общая минимальная длина равна 5 символам
*/
function recognize($filename, $apikey, $is_verbose = true, $rtimeout = 5, $mtimeout = 120, $is_phrase = 0, $is_regsense = 0, $is_numeric = 0, $min_len = 0, $max_len = 0)
{
if (!file_exists($filename))
{
if ($is_verbose) echo "file $filename not found\n";
return false;
}
$postdata = array(
'method' => 'post',
'key' => $apikey,
'file' => '@'.$filename, //полный путь к файлу
'phrase' => $is_phrase,
'regsense' => $is_regsense,
'numeric' => $is_numeric,
'min_len' => $min_len,
'max_len' => $max_len,
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.anti-captcha.com/in.php');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
$result = curl_exec($ch);
if (curl_errno($ch))
{
if ($is_verbose) echo "CURL returned error: ".curl_error($ch)."\n";
return false;
}
curl_close($ch);
if (strpos($result, "ERROR")!==false)
{
if ($is_verbose) echo "server returned error: $result\n";
return false;
}
else
{
$ex = explode("|", $result);
$captcha_id = $ex[1];
if ($is_verbose) echo "captcha sent, got captcha ID $captcha_id\n";
$waittime = 0;
if ($is_verbose) echo "waiting for $rtimeout seconds\n";
sleep($rtimeout);
while(true)
{
$result = file_get_contents('http://anti-captcha.com/res.php?key='.$apikey.'&action=get&id='.$captcha_id);
if (strpos($result, 'ERROR')!==false)
{
if ($is_verbose) echo "server returned error: $result\n";
return false;
}
if ($result=="CAPCHA_NOT_READY")
{
if ($is_verbose) echo "captcha is not ready yet\n";
$waittime += $rtimeout;
if ($waittime>$mtimeout)
{
if ($is_verbose) echo "timelimit ($mtimeout) hit\n";
break;
}
if ($is_verbose) echo "waiting for $rtimeout seconds\n";
sleep($rtimeout);
}
else
{
$ex = explode('|', $result);
if (trim($ex[0])=='OK') return trim($ex[1]);
}
}
return false;
}
}
?>