За последние 24 часа нас посетили 23256 программистов и 1661 робот. Сейчас ищут 894 программиста ...

Оооочень длинный цикл

Тема в разделе "Прочие вопросы по PHP", создана пользователем Freakmeister, 20 фев 2015.

  1. Freakmeister

    Freakmeister Активный пользователь

    С нами с:
    20 дек 2009
    Сообщения:
    888
    Симпатии:
    5
    Обратились ко мне с просьбой пересоздать тумбы для фоток. Этих фоток 6к+. Скачать я их не могу почему-то, хостинг отдает не все. Перенарезать их все за раз тоже не могу - хостинг вешается. Доступа к php.ini нет. В такой ситуации мне пришлось разбить свой запрос на страницы и резать фотки в 50 профилях за раз. Я просто сидел как индус, запускал скрипт, менял номер в функции, опять запускал - и так 131 раз.
    http://joxi.ru/MAjebMYhoD512e

    Вопрос - как это можно было зациклить автоматом? Для выкачивания БД я использую тулзу - MySQLDumper, так вот она работает по-моему именно так, разбивает запрос на куски, и в итоге там где phpMyAdmin фейлится, упираясь в настройки php.ini, MySQLDumper всегда справляется. Я также хочу.((
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    можно писать номер в бд, лочить строчку на чтение, забирать номер и соотв. файл по номеру, плюсовать единичку, разлочивать на чтение.

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

    Но на самом деле я бы сделал может даже через файлик, без залочки, просто с запасом по времени раз в пять минут кидать запрос хоть тем же аяксом.
     
  3. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    я бы сделал через вебморду с meta refresh или header refresh. надо только вычислять последний сделаный номер и обарбатывать N следующих файлов.
     
  4. Freakmeister

    Freakmeister Активный пользователь

    С нами с:
    20 дек 2009
    Сообщения:
    888
    Симпатии:
    5
    Погуглил - звучит просто, но будет ли работать на деле? При условии что один цикл у меня выполняется секунд 20. Я вообще собирался через AJAX зацикливать скрипт, но буду пробовать так:
    Код (PHP):
    1. if ($_GET['page'] == 132) {
    2.     die;
    3. }
    4. $this->recreate_thumbs('photo', 'thumb', $_GET['page'] );
    5. header('Location: '.$this->root.'thumbs.php?page='.($_GET['page']++));
     
  5. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    не сомневайся - оно работает. плюс в простоте и в том, новый запрос возникнет только после того, как отработает предыдущий.
    ajax чтобы добавить ненужной сложности? )))

    в твоем примере номер страницы остается тот же, что был. это странно. зачем он тогда вообще нужен?

    на самом деле я за то, чтобы обойтись без параметров. скрипт должен сам вычислять следующий id или что там еще. тогда при нештатном перезапуске не будет проблем с URL.
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Если это впс то лучше просто из консольки пережать.

    И вообще валить оттуда надо раз не скачиваются файлы.
     
  7. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Хороший совет я уже дал, сейчас дам очень хороший ))) Не надо вообще "пакетно" генерить превьюшки. Надо настроить генератор на создание по первому требованию.

    Если URL правильный, но превьюшки нет, реврайт должен обратиться к генератору конкретной картинки. Так постепенно всё нужное само появится, без шоковых нагрузок.
     
  8. Freakmeister

    Freakmeister Активный пользователь

    С нами с:
    20 дек 2009
    Сообщения:
    888
    Симпатии:
    5
    Есть там всё, последняя строчка редиректит на $_GET['page']++
    Тут проблема другая - превьюшки есть, они создавались при загрузке фоток, но они все кривые. Предыдущий кодер сделал "уменьшатор", который кукожил превьюшки. Я это дело исправил, и нужно было перенарезать все превьюшки.
     
  9. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Что-то вы перемудрили коллеги...
    max_execution_time работает в .htaccess
    Если не помогает, то set_time_limit(ini_get('max_execution_time')) перед каждой итерацией (или где нужно) и будет Вам счастье.
     
  10. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    ага, попробуй ;)

    Добавлено спустя 1 минуту 56 секунд:
    это что-то меняет? совет остается в силе.