Циклы в скриптах XHE
Итак, у вас есть простой скрипт, который вы хотели бы запускать в цикле.
Первый способ зациклить ваш XHE скрипт это воспользоваться расписанием скриптов.
В программе есть настройки, которые позволяют запускать скрипт раз в минуту, раз в 5 минут и т.д. Это пожалуй самый простой способ, но у этого способа
есть существенные минусы - например если нужно читать из файла какие-либо данные, то придётся хранить индекс прочитаной строки, где то в отдельном файле
и потом подставлять его в скрипт. Согласитесь это не очень удобно.
Вместо этого можно организовать цикл основанный на чтении данных из файла. Предположем у нас есть некий файл с проксями "proxy.txt", из которого нам
нужно взять прокси подставить его в скрипт и перейти на какой то сайт. При этом, как только мы подставим все прокси из файла скрипт должен остановиться.
Для этого первым делом мы получим прокси из файла в массив следующим кодом
$proxies= file("proxy.txt");
. Теперь когда у нас все прокси полученны в массив
делаем цикл for на основе этого массива следующим кодом
for($i=0;$i<count($proxies);$i++)
- где
count($proxies)
- это количество элементов в массиве. В результате у нас получается следующий код скрипте:
<?php
// получить прокси из файла в массив
$proxies= file("proxy.txt");
// цикл пройтись по всем прокси в массиве
for($i=0;$i<count($proxies);$i++)
{
// получить прокси из массива
$proxy = $proxies[$i];
// задать прокси браузеру
$browser->enable_proxy("all connections",$proxy);
// перейти на сайт проверки ip
$browser->navigate('2ip.ru');
$browser->wait_for(60,0);
// идём куда то дальше и что то делаем ещё ...
}
?>
Если нужно что бы цикл выполнил действия заданое количество раз, напиример 10, то тогда код в скрипте будет выглядить следующим образом:
<?php
// выполнить цикл 10 раз
for($i=0;$i<10;$i++)
{
// перейти на сайт google.com
$browser->navigate('google.com');
$browser->wait_for(60,0);
// идём куда то дальше и что то делаем ещё ...
}
?>
Ещё один способ организовать цикл в скрипте это использовать while. Например нам нужно подобрать логин на сайт,
который ещё не занят. При этом когда в поле логина вводим значение на странице регистрации появляется текст "is already taken".
Для начала после заполнения поля логина сделаем проверку есть ли этот текст на странице следующим кодом
$ind = strpos($webpage->get_body(),"is already taken");
- где strpos это функция получения индекса заданого текста в строке, если строки нет то возвращает false; $webpage->get_body() - функция получения body текущей страницы в браузере;.
Теперь мы организовываем цикл на основе этого индекса следующим кодом
while($ind!==false)
- то есть
выполнять действие до тех пор пока индеск равен false. В итоге имеем следующий код в скрипте:
<?php
// перед этим переходим на страницу регистрации и заполняем поле login
// проверим не появился ли текст сигнализирующий о том что логин уже занят
$ind = strpos($webpage->get_body(),"is already taken");
// делаем цикл - если не нашли нужный текст повторяем операцию заново
while($ind!==false)
{
// тут задаём новое значение в поле логина
// проверяем опять не появился ли текст после ввода нового логина в поле
$ind = strpos($webpage->get_body(),"is already taken");
}
?>
С помощью for и while можно создавать бесконечные циклы -
while(true) или for ($i = 1;;$i++)
. В скрипте это будет выглядеть так:
<?php
// делаем бесконечный цикл while
while(true)
{
// что то делаем...
// условие для выхода из бесконечного цикла
if(какое то условие)
break;
}
// бесконечный цикл for
for ($i = 1;;$i++)
{
// что то делаем....
// условие для выхода из бесконечного цикла
if(какое то условие)
break;
}
?>
Оператор break служит для выхода из цикла.
Более подробно про циклы в php можно найти тут www.phpfaq.ru/php5.ru/study/chapter3.html#loop