Остановить скрипт для ввода капчи, затем - продолжить...

Тема в разделе "PHP", создана пользователем bugargen, 25 дек 2010.

Модераторы: latteo
  1. bugargen

    bugargen

    Регистр.:
    24 апр 2008
    Сообщения:
    232
    Симпатии:
    19
    Скрипт PHP парсит какую-то инфу и, в итоге, нарывается на капчу, после ввода которой скрипт должен продолжить парсить ещё неспарсенное.

    Как этот ввод капчи лучше организовать?

    ЗЫ: Интересует не получение капчи, а сама схема ввода инфы с капчи и последующего продолжения работы скрипта.
     
  2. Alternator

    Alternator

    Регистр.:
    23 мар 2009
    Сообщения:
    295
    Симпатии:
    145
    Пускай он поместит в какое-то общее хранилище капчу, и будет опрашивать это хранилище на предмет значения капчи, в цикле с задержкой.

    В это время другой скрипт в браузере оператора, упскай опрашивает хранилище на предмет капчи, и показывает оператору.
    после того как оператор введет капчу, пускай остылает данные в общее хранилище.


    Обще хранилище может быть базой, или файлами
     
  3. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    Капча как правило завязана с сессией, и если помещать капчу в хранилище, а потом другим скриптом опрашивать, актуальность ее теряется. Тут необходимо делать все в одном скрипте. Лично я бы еще набросал простенький html-интерфейс и ajax-запросы на парсинг и получения капчи для ввода.
     
  4. bugargen

    bugargen

    Регистр.:
    24 апр 2008
    Сообщения:
    232
    Симпатии:
    19
    Лично я пока пришёл к выводу, что проще всего будет выводить капчу и форму для её ввода яваскриптом window.open в новой вкладке из текущего PHP-скрипта. Этот PHP-скрипт будет ждать, пока в определённом файле не появятся данные. Эти данные будут записаны в файл путём ввода в форму из той самой новой вкладки.

    ЗЫ: Лучше конечно не в новой вкладке это сделать, а в диалоговом всплывающем (или как его там) окне, но я не знаю как сиё осуществить, не нашёл, только текст нашёл как там вывести (через prompt(text)).
     
  5. demko

    demko Постоялец

    Регистр.:
    22 мар 2009
    Сообщения:
    72
    Симпатии:
    5
    Логически: сохраняем в переменную последние пару строк спарсенного, после ввода капчи ищем "переменную" на странице.
     
  6. alseman

    alseman

    Регистр.:
    21 май 2008
    Сообщения:
    190
    Симпатии:
    25
    1. В начале каждого цикла парсинга проверям флаг
    2. Если все ок, то парсим дальше
    3. Если неок, то выводим любым способом формочку, куда надо вбить капчу
    4. Возвращаемся к пункту 1
    Дергаешь курлом, парсишь регуляркой. Только не забудь подхватывать сессию.
    Надеюсь алгоритм понятен
     
  7. tiger.seo

    tiger.seo Писатель

    Регистр.:
    16 дек 2010
    Сообщения:
    3
    Симпатии:
    0
    Сохраняю данные формы в сессию, каптчу кладу в темп под именем captcha.gif, и выдаю в браузер каптчу и форму с вводом кода (скрипт естесна полностью останавливается), затем получив из браузера каптчу в скрипте из сессии вытягиваю данные для формы, добавляю каптчу и постю. Это однопоточная авторегистрация с ручным вводом каптчи.

    Еще вариант использовать антикаптчу (там есть примеры на PHP:( когда нужно ввести каптчу, отправляешь ее на сервер антикаптчи и входишь в while цикл где дергаешь каждые 5 секунд сервер антикаптчи: "ну чо там? разгадал?".
     
  8. alseman

    alseman

    Регистр.:
    21 май 2008
    Сообщения:
    190
    Симпатии:
    25
    Так при многопоточности ничего не меняется. Просто из-за недальновидности разработчиков php приходится юзать костыли вроде этого:
    http://www.rusdoc.ru/articles/pochti_nastojaschaja_mnogopotochnost_sredstvami_php_5/19001/
     
  9. tiger.seo

    tiger.seo Писатель

    Регистр.:
    16 дек 2010
    Сообщения:
    3
    Симпатии:
    0
    Для многопоточности с ручным вводом каптчи думал такую схему:
    - запрос ввода каптчи сохраняется в стек (таблица в БД, или просто файлы в папке)
    - в браузере загружена страничке, где по таймауту аяксом идут обращения к скрипту, который вытягивает из стека все запросы ввода каптчи и отдает их в браузер
    - скрипт себе работает и пополняет стек, потому имеет смысл настраивать скорость, чтобы оператор успевал вводить каптчи, а также возможность приостановить скрипт (пауза) или вовсе остановить
    - в браузере в представлении матрицы появляются запросы ввода каптчи по мере их появления в стеке на сервере и убираются после ввода оператором
    - когда оператор вводит каптчу, то ответ отправляется аяксом на сервер и скрипт на сервере (будет работать паралельно) восстанавливает работу и заканчивает регистрацию

    Посмотрите на jQuery UI Dialog ссылка на их сайт
     
  10. alseman

    alseman

    Регистр.:
    21 май 2008
    Сообщения:
    190
    Симпатии:
    25
    Вцелом разумно если капчи лезут непрерывно. У автора, насколько я понял, после ввода капча пропадает на время, так что можно обойтись меньшими ухищрениями.
    Прошу прощения, линк побился, вот правильный:
    линк
     
    tiger.seo нравится это.