За последние 24 часа нас посетили 63119 программистов и 1737 роботов. Сейчас ищут 896 программистов ...

Пошаговое выполнение скрипта

Тема в разделе "Прочие вопросы по PHP", создана пользователем RAD-lance, 2 дек 2012.

  1. RAD-lance

    RAD-lance Активный пользователь

    С нами с:
    2 дек 2012
    Сообщения:
    4
    Симпатии:
    0
    Здравствуйте.

    Проблема в следующем. Пишу модуль импорта под друпал из xml большого размера, порядка 5000 записей. Функция импорта будет запускаться по крону, раз в сутки. Возможность запуска импорта должна быть организована и по нажатию кнопки в админке.

    Вопрос в том как реализовать функцию непосредственного импорта материалов. Сейчас все упирается в максимальное время выполнения функции. Хотелось бы чтобы функция, выполнялась максимально возможное время, потом записывала в БД позицию где остановилась. И тут же запускалась снова эта функция, но уже с новой позиции. Когда весь файл прочитан, то в бд меняется статус задачи на "complete" и функция прекращает свое выполнение.
     
  2. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    сформулируйте вопрос. в чем собственно остновная проблема?
    в времени исполнения скрипта?
    поставьте max_execution_time в ноль. и скрипт будет выполняться столько сколько вам нужно.
     
  3. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Тут всё похоже на постраничную навигацию, разве нет? Допустим решаем, что за раз надо обрабатывать 100 строк. Пусть GET-параметр "p" это номер страницы.

    В случае открытия через браузер надо рефрешить через meta refresh или javascript на следующую страницу, если данные ещё не закончились.
    В случае крона надо скрипт-обертку с циклом и контролем возвращаемого кода чтобы обнаружить конец.
     
  4. RAD-lance

    RAD-lance Активный пользователь

    С нами с:
    2 дек 2012
    Сообщения:
    4
    Симпатии:
    0
    Сейчас скрипт так и работает. Установлен set_time_limit(0). Но хотелось бы решение сделать универсальным что ли, в случае если на хостинге будет запрет на max_execution_time то скрипт, работать не будет.

    Можно поподробней что за скрипт-обертка?
     
  5. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    По крону вы же не браузер будете стартовать с нужной страницей ))) Допустим по cron будет выполняться скрипт с вызовом wget.
    wget может возвращать ненулевой exit-code если сервер вернул ошибку.
    Т.е. вызываем wget в цикле, постоянно увеличивая номер страницы.
    Нормально wget завершается с кодом 0. Как только номер страницы превысит реальную величину — в PHP вернём 404 статус. При этом wget завершится с кодом 8, согласно его документации. Это можно использовать чтобы остановить цикл в крон-скрипте. Так понятнее?
     
  6. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Пытался на форумах подставить несуществующий p=999, так все движки как сговорились возвращают статус 200, а не 404 )))
    Пример сумел придумать на базе Вики: существовало только 3 лунохода.

    mytask.sh
    Код (Text):
    1.  
    2. #!/bin/bash
    3. for i in {1..99}
    4. do
    5.     echo "Lunokhod_$i:"
    6.     wget http://en.wikipedia.org/wiki/Lunokhod_$i -O /dev/null -o /dev/null
    7.     EXITCODE=$?
    8.     if [ $EXITCODE -ne 0 ]
    9.     then
    10.         echo "Exit code was $EXITCODE"
    11.         break
    12.     else
    13.         echo "ok"
    14.     fi
    15. done
    скриншот блин
    Код (Text):
    1.  
    2. $ bash mytask.sh
    3.  
    4. Lunokhod_1:
    5. ok
    6. Lunokhod_2:
    7. ok
    8. Lunokhod_3:
    9. ok
    10. Lunokhod_4:
    11. Exit code was 8
     
  7. max-mkp

    max-mkp Новичок

    С нами с:
    26 янв 2016
    Сообщения:
    1
    Симпатии:
    0
    А как php-скриптом вернуть null wget, если кол-во страниц динамическое?
    Т.е. по факту-то страница существует и будет ли ответ от php с этой страницы со статусом 404 достаточным?
     
  8. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    max-mkp попробуй 404