PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
jaxmackey
Отправлено: 18 Ноября, 2014 - 09:13:06
Post Id



Новичок


Покинул форум
Сообщений всего: 38
Дата рег-ции: Май 2014  


Помог: 0 раз(а)




Не понял Проблема в том что по какой то причини сервис антигейта постоянно выдает ошибку ERROR_ZERO_CAPTCHA_FILESIZE. капча лежит в папке скрипта весит в среднем 2-3 кб. обычное изображение капчи. путь в скрипте указан верно до капчи. все передаться. нормально. но ошибка все равно имеется. Пробывал как и jpg, png так и закодированную капчу отправлять.

часть кода где капча сохраняется вот

PHP:
скопировать код в буфер обмена
  1. if(substr_count($captch[0], 'captcha.php'))
  2. {
  3. echo 'CH';
  4. preg_match( '/captcha.php\?sid=(.*)&s=1/', $chek , $img );
  5. $ch = curl_init();
  6. curl_setopt($ch, CURLOPT_URL, 'm.vseti.by/captcha.php?sid='.$img[1].'&s=1');
  7. curl_setopt($ch, CURLOPT_HEADER, 0);
  8. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  9. curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
  10. curl_setopt($ch, CURLOPT_HTTPHEADER,$headers);
  11. curl_setopt($ch, CURLOPT_COOKIEFILE, "my_cookies.txt");
  12. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  13. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
  14. curl_setopt($ch, CURLOPT_VERBOSE, $m);
  15.  
  16. $res=curl_exec($ch);
  17.  
  18. file_put_contents("captcha.jpg", $res);
  19.  
  20. recognize();


А вот сам функция который отправляет капчу на антигейт. отправляю закодированную капчу Огорчение

PHP:
скопировать код в буфер обмена
  1. function recognize(
  2. $filename = './captcha.jpg',
  3. $apikey = 'мой ключ',
  4. $is_verbose = true,
  5. $domain="antigate.com/in.php",
  6. $rtimeout = 5,
  7. $mtimeout = 120,
  8. $is_phrase = 0,
  9. $is_regsense = 0,
  10. $is_numeric = 0,
  11. $calc = 0,
  12. $min_len = 0,
  13. $max_len = 0,
  14. $is_russian = 0
  15. )
  16. {
  17. if (!file_exists($filename))
  18. {
  19. if ($is_verbose) echo "file $filename not found\n";
  20. return false;
  21. }
  22. $postdata = array(
  23. 'method' => 'base64',
  24. 'key' => $apikey,
  25. 'body' => $captcha, //капча в base64
  26. 'phrase' => $is_phrase,
  27. 'regsense' => $is_regsense,
  28. 'numeric' => $is_numeric,
  29. 'calc' => $calc,
  30. 'min_len' => $min_len,
  31. 'max_len' => $max_len,
  32. 'is_russian'=> $is_russian
  33.  
  34. );
  35.  
  36. $ch = curl_init();
  37. curl_setopt($ch, CURLOPT_URL, "http://$domain/in.php");
  38. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  39. curl_setopt($ch, CURLOPT_TIMEOUT, 60);
  40. curl_setopt($ch, CURLOPT_POST, 1);
  41. curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
  42. curl_setopt($ch, CURLOPT_VERBOSE, TRUE);
  43.  
  44. $result = curl_exec($ch);
  45. if (curl_errno($ch))
  46. {
  47. if ($is_verbose) echo "CURL returned error: ".curl_error($ch)."\n";
  48. return false;
  49. }
  50. if (strpos($result, "ERROR")!==false)
  51. {
  52. if ($is_verbose) echo "server returned error: $result\n";
  53. return false;
  54. } else {
  55. $ex = explode("|", $result);
  56. $captcha_id = $ex[1];
  57. if ($is_verbose) echo "captcha sent, got captcha ID $captcha_id\n";
  58. $waittime = 0;
  59. if ($is_verbose) echo "waiting for $rtimeout seconds\n";
  60. sleep($rtimeout);
  61. while(true)
  62. {
  63. $result = file_get_contents("http://$domain/res.php?key=".$apikey.'&action=get&id='.$captcha_id);
  64. die(var_dump($result ));
  65. if (strpos($result, 'ERROR')!==false)
  66. {
  67. if ($is_verbose) echo "server returned error: $result\n";
  68. return false;
  69. }
  70. if ($result=="CAPCHA_NOT_READY")
  71. {
  72. if ($is_verbose) echo "captcha is not ready yet\n";
  73. $waittime += $rtimeout;
  74. if ($waittime>$mtimeout)
  75. {
  76. if ($is_verbose) echo "timelimit ($mtimeout) hit\n";
  77. break;
  78. }
  79. if ($is_verbose) echo "waiting for $rtimeout seconds\n";
  80. sleep($rtimeout);
  81. } else {
  82. $ex = explode('|', $result);
  83. if (trim($ex[0])=='OK') return trim($ex[1]);
  84. }
  85. }
  86. return false;
  87. }
  88. }
  89. ?>


Вот что в консоле при отправке капчи.
[url]pixs.ru/showimage/antipng_7438657_14772460.png [/url]

Вот сохраненная капча.
[url]pixs.ru/showimage/captchajpg_3926832_14772481.jpg[/url]

(Отредактировано автором: 18 Ноября, 2014 - 14:29:01)

 
 Top
Round
Отправлено: 11 Октября, 2017 - 07:32:43
Post Id



Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Авг. 2012  


Помог: 0 раз(а)




Сорри, апну старую темку.

Решение заключается в добавлении curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false); при загрузке каптчи, если у вас версия php новее чем 5.6.20
 
 Top
Мелкий Супермодератор
Отправлено: 11 Октября, 2017 - 09:47:21
Post Id



Активный участник


Покинул форум
Сообщений всего: 11577
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 564 раз(а)




Round пишет:
если у вас версия php новее чем 5.6.20

Во-первых, новее чем 5.6.0 и во-вторых одновременно меньше чем 7.0.0, где эта переходная опция была удалена.
Решение же в загрузке файлов заключается в использовании CURLFile.
А у автора темы - во включении error_reporting и исправлении всех undefined variables, особенно $captcha, заявленной в комментариях как тело изображения в base64.


-----
PostgreSQL DBA
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB