За последние 24 часа нас посетили 59715 программистов и 1852 робота. Сейчас ищут 1168 программистов ...

Как из php-скрипта по очереди запустить несколько других?

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

  1. lucky89

    lucky89 Новичок

    С нами с:
    19 авг 2014
    Сообщения:
    32
    Симпатии:
    0
    Здравствуйте! Задача такая: надо каждый час запускать на сервере php-скрипты (они чистят за пользователями мусор, правят БД, пишут логи и тп). Делал я это через Cron задачи, но на моем тарифе hostinger разрешает только 2 задачи, мне нужно больше. Как это сделать? Мне кажется, что нужно создать еще один php-файл, который будет запускать каждый скрипт по очереди, ждать пока он отработает, запускать следующий и тд. Но не получается. Я пока обернул каждый скрипт в функцию, чтобы ограничить область видимости переменных, но остаются строки от которых не избавиться и они вызывают конфликты.
    Главный файл из которого я хочу запустить все остальное выглядит просто списком:
    Код (Text):
    1. //require_once(dirname(__FILE__) . '/unlocking/unlocking.php');
    2. //require_once(dirname(__FILE__) . '/smsChecker/smsChecker.php');
    Но вот беда, например в unlocking.php есть строки
    Код (Text):
    1. require_once(dirname(__FILE__) . '/../../no_public/dbConnect.php');
    2. $dbOrder = $mysqli->query('SELECT isbn, updateTime FROM orders WHERE locking=1');
    В нем она проходит без ошибок и скрипт отрабатывает. И во втором есть почти такие же
    Код (Text):
    1. require_once(dirname(__FILE__) . '/../../no_public/dbConnect.php');
    2. $dbOrder = $mysqli->query('SELECT isbn, smsId FROM sms WHERE smsState=0 OR smsState=2');
    так там уже не получается работать с объектом БД, получаю ошибку:
    Код (Text):
    1. Fatal error: Call to a member function query() on a non-object in /home/u961672068/public_html/daemons/smsChecker/smsChecker.php
    Это типа получается нельзя 2 раза использовать require_once даже если все это дело обернуто в разных функциях?
    Мне вообще кажется, что я в принципе не правильно пытаюсь заставить выполняться скрипты. В общем цель такова: создать один php-файл, который будет по очереди запускать сколь угодно других php-скриптов. Сам этот файл запихну в Cron задачу и все перечисленное в нем как бы тоже превратится в Cron/
    Помогите, чем сможете!)
     
  2. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Re: Как из php-скрипта по очереди запустить несколько других

    про require_once ты неправильный вывод сделал ))) надо выяснить чему равен $mysqli и где он портится. может у тебя в первом файле закрытие соединения есть? как можно догадаться, второй раз соединение не устанавливается, т.к. require_once.

    отлаживай, короче: phpfaq.ru/debug
     
  3. lucky89

    lucky89 Новичок

    С нами с:
    19 авг 2014
    Сообщения:
    32
    Симпатии:
    0
    Re: Как из php-скрипта по очереди запустить несколько других

    Да, соединения закрываются. Но я не могу это изменить. Эти скрипты иногда надо выполнять кучей, а иногда по отдельности. По отдельности все работают и после выполнения чистят за собой.
    Неужели нет способа через php как бы сказать серверу: "ты мне сейчас запусти unlocking.php, подожди пока он отработает, потом запусти smsChecker.php как новый процесс, чтобы с предыдущим вообще не пересекался"?
     
  4. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Re: Как из php-скрипта по очереди запустить несколько других

    ну через cron/curl разными способами можно сдлеать
     
  5. lucky89

    lucky89 Новичок

    С нами с:
    19 авг 2014
    Сообщения:
    32
    Симпатии:
    0
    Re: Как из php-скрипта по очереди запустить несколько других

    Ну про Cron я писал об ограничении хостинга, пока у меня было 2 скрипта кроном и пользовался.
    А про Curl я что-то не подумал, должно получиться, попробую, спасибо.
    Если еще варианты появятся - пишите.
    Я еще сейчас дочитался, что как-то можно из php-файла управлять консолью сервера, а от туда уже можно горы свернуть. Но нормальных статей на русском не нашел...
     
  6. lucky89

    lucky89 Новичок

    С нами с:
    19 авг 2014
    Сообщения:
    32
    Симпатии:
    0
    Re: Как из php-скрипта по очереди запустить несколько других

    С Курлом получилось!
    Остался маленький вопрос, ему обязательно в url передавать полный путь с http, с доменом... У меня же все файлы рядом лежат, а ни относительные пути, ни абсолютные не работают, только полный.
    Вот так работает:
    Код (Text):
    1. http://*********.com/daemons/unlocking/unlocking.php
    А вот так нет:
    Код (Text):
    1. dirname(__FILE__) . '/unlocking/unlocking.php'
    Меня и так устраивает, просто инересно, зачем обращаться к своему файлу, как к чужому. Проще никак?
     
  7. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Re: Как из php-скрипта по очереди запустить несколько других

    ну в cron можно загнать так: php /home/www/daemons/unlocking/unlocking.php
    то есть как бы из консоли запускает
     
  8. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Re: Как из php-скрипта по очереди запустить несколько других

    проще разобраться с соединениями БД. может быть достаточно require_once(dbConnect) заменить на require(dbConnect)…
    или добавить куда-нибудь проверку на факт, что файл не самостоятельно подключен, а через require — в таком случае соединение не закрывать.