Полоса загрузки

DowJones

Писатель
Регистрация
11 Апр 2012
Сообщения
1
Реакции
0
Есть скрипт, выполняющий 9*499 однотипных операций
Выполняется долго. И хотелось бы что бы он выводил по ходу программы, что уже выполненно. От сюда вопрос: возможно ли реализовать, вывод на экран, по ходу выполнения программы?
сам скрипт:

PHP:
<?php
set_time_limit(10*60); //время на выполнение цикла
error_reporting(0);
ob_start();
//Получаем свежее печенье (cookie)
$login = 'dowjones';
$pass = 'ne_skagu';
$url = 'http://сайт.домен/login.php';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'username=$login&password=$pass&submit=%C2%EE%E9%F2%E8');
curl_setopt($ch, CURLOPT_COOKIEJAR, 'Z:\home\test1.ru\www\cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'Z:\home\test1.ru\www\cookie.txt');
//Куки получили, теперь можно перейти к поиску
for($i=1;$i<=9;$i++)
{
  for($j=1;$j<=499;$j++)
  {
        $url="http://сайт.домен/страница.php?параметр1=2&параметр2=$i&параметр3=$j"; //матрица из страниц 9х499
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL,$url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_COOKIEJAR, 'Z:\home\test1.ru\www\cookie.txt');
        curl_setopt($ch, CURLOPT_COOKIEFILE, 'Z:\home\test1.ru\www\cookie.txt');
        $text = curl_exec($ch);
        curl_close($ch);
        if (preg_match("/ТО_ЧТО_ИЩЕМ/i", "$text")) {
            echo "Вхождение найдено. =>  <a target=\"_blank\" href=\"$url\">Смотреть</a><br>";
        }
    }
}
?>
 
:D Долго не думали появился вопрос с продолжением скрипта и гоу на форум....
Ну вы народ и чудите...

Даю вектор. Крутотяшный и ненужный вам в данный момент ибо могк взорвете.
1) Ajax (делаем прогрес бар и обновляем его из файла а вот сам % уже переписывает скрипт с цыклами) - ну как то так. Это грубое описание.

Теперь то что вам проще будит.
1) Создаем функцию.
PHP:
// Функция не оптимизирована но вам оно пока и не критично.
function _echo($txt)
{
    $date=date('d.m.Y_H');
echo $txt . "<br>\n";
 
$file=fopen('./logs/'.$date.'_.html', 'a+');
fwrite ($file, date('h:i:s').' '.$txt."<br>\n");
fclose ($file);
 
    @ob_flush();
    @flush();
}

Далее в коде в нужном месте делаем логирование. К примеру:

PHP:
............
        curl_setopt($ch, CURLOPT_COOKIEFILE, 'Z:\home\test1.ru\www\cookie.txt');
        $text = curl_exec($ch);
        curl_close($ch);
     
        _echo ('Получены данные с <a href="'.$url.'" target=_blank>'.substr($url, 0, 50).'</a> ('.($i*$j).' / '.(9*499).')');
     
        if (preg_match("/ТО_ЧТО_ИЩЕМ/i", "$text")) {
...............

Реализация не ахти но суть ясна.

......
Сижу думаю... Вам даже с этим рано работать... Если писать ф лог файл то нужно и кнопку стапорения делать и ignore_user_abort(1); потому как расчет на то что страница будит закрыта после запуска.

Кароче это опять вам просто для убивания всего порядка в голове так что забываем все что я писал ранее! Потом обратитесь к этому тексту через пару месяцов...

Делаете в нужном месте простой

echo 'Итерация #'.($i*$j).'<br>';
flush();

Все. После запуска увидите результат. Как только исполнение дойдет до flush(); сервер выплюнит буфер. Так что текст выведется сразу.
 
Да и по поводу прошлой темы.
Вы плохо читаете мануалы :(
То что вы хотели изначально нужно было через CURLOPT_COOKIE а сам крекер получается ключ=значение&ключ=значение.
Так что плохо, плохо.
 
То что вы хотели изначально нужно было через CURLOPT_COOKIE а сам крекер получается ключ=значение&ключ=значение.
Видел этот способ, но к сожалению, подробных мануалов не так много.
от сюда и непонятки, что есть ключ и что есть значение.
В итоге нашел один подробный мануал, для чайников.
Там предложен именно тот способ который у меня реализован

И должен признать, с задачей он справляется даже лучше, чем я хотел.
Ибо когда cookie устаревает, скрипт продолжает работать, так как он получает куку при авторизации.
что по сути делает программу универсальной.

Через ajax оно наверное и лучше будет, но багаж знаний не позволяет.
видел мануалы, ничего не понятно =(
 
Ибо когда cookie устаревает, скрипт продолжает работать, так как он получает куку при авторизации.
Вы читаете между строк!
Для просмотра ссылки Войди или Зарегистрируйся Функцию примерную я давал уже... поищите в этой ветке... Вроди про юкоз что то было. Там к стати и авторизация идет вам как пример.

Для просмотра ссылки Войди или Зарегистрируйся

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

PHP:
set_time_limit(10*60); //время на выполнение цикла
error_reporting(0);
ob_start();
 
$login = 'dowjones';
$pass = 'ne_skagu';
$url = 'http://сайт.домен/login.php';
 
// Авторизация.
$page=GO($url, array(
'username'    => $login,
'password'    => $pass,
'submit'    => '%C2%EE%E9%F2%E8'
));
 
// Парсер
for($i=1;$i<=9;$i++)
{
for($j=1;$j<=499;$j++)
{
$text = GO("http://сайт.домен/страница.php?параметр1=2&параметр2=$i&параметр3=$j");
if (preg_match("/ТО_ЧТО_ИЩЕМ/i", "$text"))
{
echo "Вхождение найдено. =>  <a target=\"_blank\" href=\"$url\">Смотреть</a><br>";
}
}
}

Разве это не кашерно !?
А все что нужно было это покопаться на форуме и найти пример и переписать его под себя - там все понятно. Если непонятно перечитывайте пока не поймете. Иначе вы в итоге так и будите по всем вопросам сливаться на форумы ((
А когда встанит действительно задача вам уже не будут так помогать ибо это уже пахнет деньгой ))
 
Да-да, я читал про авторизацию на юкозе.
Этот топик я нашел по поисковой фразе "curl"
Кошерно-то, оно может и кошерно.
Но тогда я первый раз в глаза curl увидел.
Нет я про него что-то слышал, но не более.
Плюс мне функция показалась нагроможденной, в ней много лишнего, для меня.
А перед тем как на форум слиться) я читал мануалы)) много))
Но там все написано так что это как-то сложно применить к частному случаю.
Не все там подробно разобрано.
 
Как только исполнение дойдет до flush(); сервер выплюнит буфер. Так что текст выведется сразу.
Если фронтендом стоит Nginx - он будет ждать закрытия соединения с apache и/или будет gzip-ить контент...
Это тоже стоит учитывать...
 
Назад
Сверху