выполнить повторный запуск скрипта при неправильно введенной

вопросы и ответы по использованию PHP
Ответить
ПХПнуп
Сообщения: 15
Зарегистрирован: 04 ноя 2010, 17:52

выполнить повторный запуск скрипта при неправильно введенной

Сообщение ПХПнуп » 07 фев 2011, 23:19

Привет!
У меня есть скрипты регистраций и я хочу прикрутить к ним условие: "Если на страничке есть фраза "капча введена неверно", то запустить скрипт заново, а если фраза "капча неверна" отсутствует, то ничего не делать.
Нашел что при делах как-то функция stristr, но хотелось бы получить блок кода для Хэмулятора с условиями.
Заранее спасибо.

satih
Сообщения: 270
Зарегистрирован: 31 мар 2010, 23:44

Re: выполнить повторный запуск скрипта при неправильно введе

Сообщение satih » 08 фев 2011, 12:29

Код: Выделить всё

if (strpos($webpage->get_body(),'капча введена неверно')) $app->restart(__FILE__);
$webpage->get_body() - парсит сурс страницы
strpos() - проверяет если в тексте есть фраза
$app->restart() - перезапускает
__FILE__ - макрос пхп, превращается в полный путь включая имя файла (который вызвал этот макрос)

ilekor
Сообщения: 54
Зарегистрирован: 07 ноя 2010, 20:12

Re: выполнить повторный запуск скрипта при неправильно введе

Сообщение ilekor » 08 фев 2011, 14:47

ПХПнуп писал(а):Привет!
У меня есть скрипты регистраций и я хочу прикрутить к ним условие: "Если на страничке есть фраза "капча введена неверно", то запустить скрипт заново, а если фраза "капча неверна" отсутствует, то ничего не делать.
Нашел что при делах как-то функция stristr, но хотелось бы получить блок кода для Хэмулятора с условиями.
Заранее спасибо.
воспользуйтесь функцией while например

Код: Выделить всё

while(eregi("(капча введена неверно)", $webpage->get_body(), $result)){
повторить регистрацию
}

satih
Сообщения: 270
Зарегистрирован: 31 мар 2010, 23:44

Re: выполнить повторный запуск скрипта при неправильно введе

Сообщение satih » 08 фев 2011, 17:27

сработает, но eregi пользовать без регулярок.. зачем? strpos и сделана чтоб искать заранее известную фразу. eregi мало того что deprecated (забыл как оно на русском :) ), так еще и работает через регекспы

ПХПнуп
Сообщения: 15
Зарегистрирован: 04 ноя 2010, 17:52

Re: выполнить повторный запуск скрипта при неправильно введе

Сообщение ПХПнуп » 08 фев 2011, 22:46

Добавил строку if (strpos($webpage->get_body(),'капча введена неверно')) $app->restart(__FILE__);
получилось порнографически-перезапуск эмулятора!
Уточню наверное, в чем нужна помощь на примере использования:
У меня есть 100500 скриптов, которые я запускаю постредством запускатора:
<?php

$xhe_host ="127.0.0.1:7012";

// The following code is required to properly run XWeb Human Emulator
require("../Templates/xweb_human_emulator.php");

require("../My Scripts/aqualogo.ru.php");
require("../My Scripts/a-realtour.ru.php");

$app->quit();
?>

И что мне надо, так это дописать в скрипт aqualogo.ru.php указание пройтись по скрипту заново, в случае если "капча введена неверно" и когда я все-таки введу капчу перейти к выполнению скрипта a-realtor.php
возможно такое? если есть варианты по тому как реализовать поочередный запуск множества скриптов не через запускатор, то тоже выслушаю:)

satih
Сообщения: 270
Зарегистрирован: 31 мар 2010, 23:44

Re: выполнить повторный запуск скрипта при неправильно введе

Сообщение satih » 09 фев 2011, 04:32

к сожалению в scheduler хумана нельзя поставить задание "по окончанию скрипта #1 запусти скрипт #2". как вариант по окончанию первого скрипта запуск второго через restart. можно сделать также и через require, хотя это серьезно будет порнография.
идея такая: главный скрипт будет что-то вроде планировщика, который будет запускать тот или иной require. require в свою очередь будет возвращать ответ через глобальные переменные. имхо, порно, но что-то в такой поздний час сложно представить как сделать иначе без нормального знания пхп.

и так главный скрипт, "планировщик":

Код: Выделить всё

<?php

$xhe_host ="127.0.0.1:7012";

// The following code is required to properly run XWeb Human Emulator
require("../Templates/xweb_human_emulator.php");

// с какого скрипта начинаем
global $g_script_num = 1;


while (true) {
	switch ($g_script_num) {
		case 1:
			require("../My Scripts/site1.php");
			break;
		case 2:
			require("../My Scripts/site2.php");
			break;
		case 3:
			require("../My Scripts/site3.php");
			break;
		default:
			$app->exitapp();
	}
}


$app->quit();
?>
скрипт #1:

Код: Выделить всё

<?php
do {
/*
тут код самого скрипта, заполнение полей, сабмит и т.п.
проверка на то разгадана каптча или нет в while (в конце)
если будет сообщение 'каптча не разгадана', цикл повторится
если не будет сообщения 'каптча не разгадана', выход из цикла do while
*/
} while (strpos($webpage->get_body(), 'каптча не разгадана'));

// увеличиваем глобальную переменную для запуска следущего скрипта
$g_script_num++;
?>
в резульате получится что топ скрипт, "планировщик", смотрит по переменной $g_script_num какой require запускать, а запущеный require в свою очередь когда закончил работать и убедился что нет сообщения о неразгаданой каптче, поднимает переменную $g_script_num на 1 и возвращается, тем самым планировщик запускает следующий require. так проходим по всем require, пока $g_script_num не становится слишком высоким (в этом примере 4), тогда срабатывает default и хуман выходит ($app->exitapp() )

оффтоп: на самом деле действовать только на основание того что нет ответа о плохом решение каптчи не айс. в коде нужно/желательно пройти все возможные варианты, т.е. искать текст что каптча решена -> успех, каптча не решена -> повторить действие, еще какой-то вариант -> такое-то действие.. по настоящему хороший скрипт который может работать сутками без присмотра, это тот который учел все возможные варианты. потому что может сайт дал сообщение что неподошел логин, уже занят (при регистрацие), или неподгрузилась форма, или еще любая из тысячи возможных ошибок. скрипт не будет угадывать что делать, а тупо застрянет. поэтому в идеале нужно перечислить все возможные варианты, и дать 1 дефолт - т.е. что делать если не сбылось ниодно из перечисленых условий

ilekor
Сообщения: 54
Зарегистрирован: 07 ноя 2010, 20:12

Re: выполнить повторный запуск скрипта при неправильно введе

Сообщение ilekor » 09 фев 2011, 13:02

satih писал(а):сработает, но eregi пользовать без регулярок.. зачем? strpos и сделана чтоб искать заранее известную фразу. eregi мало того что deprecated (забыл как оно на русском :) ), так еще и работает через регекспы
Я для примера просто дал ))), что вот мол надо вайл использовать, а так я использую strpos, ранее я уже выкладывал способ поиска фраз.

ПХПнуп
Сообщения: 15
Зарегистрирован: 04 ноя 2010, 17:52

Re: выполнить повторный запуск скрипта при неправильно введе

Сообщение ПХПнуп » 09 фев 2011, 14:25

при запуске вышеуказанного запускатора :

<?php

$xhe_host ="127.0.0.1:7012";

// The following code is required to properly run XWeb Human Emulator
require("../Templates/xweb_human_emulator.php");

// с какого скрипта начинаем
global $g_script_num = 1; <<<< ----ошибка ссылается сюда.


while (true) {
switch ($g_script_num) {
case 1:
require("../My Scripts/site1.php");
break;
case 2:
require("../My Scripts/site2.php");
break;
case 3:
require("../My Scripts/site3.php");
break;
default:
$app->exitapp();
}
}


$app->quit();
?>

Parse error: parse error, expecting `','' or `';'' in C:\Program Files (x86)\XWeb\Human Emulator\My Scripts\MyScript.php on line 9

П,С, я как раз и работал через require(мне так показали и я повторяю :) так что это для меня нормально.
очевидно что указанная схема вполне мне бы подошла, но первый ерор и я снова на форум :)

satih
Сообщения: 270
Зарегистрирован: 31 мар 2010, 23:44

Re: выполнить повторный запуск скрипта при неправильно введе

Сообщение satih » 09 фев 2011, 14:59

сори, мой фак, не проверил..

Код: Выделить всё

<?php
 
$xhe_host ="127.0.0.1:7012";
 
// The following code is required to properly run XWeb Human Emulator
require("../Templates/xweb_human_emulator.php");
 
// с какого скрипта начинаем
global $g_script_num;
$g_script_num = 1;

 
while (true) {
	switch ($g_script_num) {
		case 1:
			require("../My Scripts/site1.php");
			break;
		case 2:
			require("../My Scripts/site2.php");
			break;
		case 3:
			require("../My Scripts/site3.php");
			break;
		default:
			$app->exitapp();
	}
}
 
 
$app->quit();
?>
хотя строку global $g_script_num; можно вообще стереть, это и так скрипт который будет стоять выше остальных, переменная автоматом будет глобальной.

ПХПнуп
Сообщения: 15
Зарегистрирован: 04 ноя 2010, 17:52

Re: выполнить повторный запуск скрипта при неправильно введе

Сообщение ПХПнуп » 09 фев 2011, 18:53

Вот! Заработало! Не сдобровать теперь мульйону сайтов :Р
Большое спасибо, прямо как подарок к новому году!)))

sas
Сообщения: 75
Зарегистрирован: 24 апр 2011, 18:46

Re: выполнить повторный запуск скрипта при неправильно введе

Сообщение sas » 09 май 2011, 00:38

про strpos() учтите что она может вернуть 0 позицию если текст с начала строки
чтобы это обойти либо добавляйте пробел слепливанием срок к переменной в которой ищите " ".$body
либо я пользую if (substr_count() > 0)
и то и другое очевидно выполняется дольше чистого strpos()

satih
Сообщения: 270
Зарегистрирован: 31 мар 2010, 23:44

Re: выполнить повторный запуск скрипта при неправильно введе

Сообщение satih » 09 май 2011, 03:21

100% кошерное применение strpos достигается не прибавлением символов/функций, а проверкой

if (strpos() === false)

в мане пхп жырным краным цветом выделен warning :) т.е. strpos вернет либо позицию найденого символа (которое может быть и ноль), либо false если ничего не найдено.

sas
Сообщения: 75
Зарегистрирован: 24 апр 2011, 18:46

Re: выполнить повторный запуск скрипта при неправильно введе

Сообщение sas » 10 май 2011, 00:17

да, но в моем случае, когда я писал скрипт, нужно было выполнить код если есть наличие т.е. тогда надо писать

if (strpos()===false){}else
{
...код...
}

некрасиво выглядит на мой вкус.
ведь нет же оператора !=== ? или я что то пропустил?
и (!(strpos()===false)) как то тоже сложно читается, хотя.. может и сойдет, зато нет потерь на обработке слепливания строк

satih
Сообщения: 270
Зарегистрирован: 31 мар 2010, 23:44

Re: выполнить повторный запуск скрипта при неправильно введе

Сообщение satih » 10 май 2011, 11:15

есть оператор !==
http://www.php.net/manual/en/language.o ... arison.php

т.е. условие 'если найден текст' будет выглядеть:
if (strpos() !== false) {}

Ответить