Здравствуйте! Задача такая: надо каждый час запускать на сервере php-скрипты (они чистят за пользователями мусор, правят БД, пишут логи и тп). Делал я это через Cron задачи, но на моем тарифе hostinger разрешает только 2 задачи, мне нужно больше. Как это сделать? Мне кажется, что нужно создать еще один php-файл, который будет запускать каждый скрипт по очереди, ждать пока он отработает, запускать следующий и тд. Но не получается. Я пока обернул каждый скрипт в функцию, чтобы ограничить область видимости переменных, но остаются строки от которых не избавиться и они вызывают конфликты. Главный файл из которого я хочу запустить все остальное выглядит просто списком: Код (Text): //require_once(dirname(__FILE__) . '/unlocking/unlocking.php'); //require_once(dirname(__FILE__) . '/smsChecker/smsChecker.php'); Но вот беда, например в unlocking.php есть строки Код (Text): require_once(dirname(__FILE__) . '/../../no_public/dbConnect.php'); $dbOrder = $mysqli->query('SELECT isbn, updateTime FROM orders WHERE locking=1'); В нем она проходит без ошибок и скрипт отрабатывает. И во втором есть почти такие же Код (Text): require_once(dirname(__FILE__) . '/../../no_public/dbConnect.php'); $dbOrder = $mysqli->query('SELECT isbn, smsId FROM sms WHERE smsState=0 OR smsState=2'); так там уже не получается работать с объектом БД, получаю ошибку: Код (Text): 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/ Помогите, чем сможете!)
Re: Как из php-скрипта по очереди запустить несколько других про require_once ты неправильный вывод сделал ))) надо выяснить чему равен $mysqli и где он портится. может у тебя в первом файле закрытие соединения есть? как можно догадаться, второй раз соединение не устанавливается, т.к. require_once. отлаживай, короче: phpfaq.ru/debug
Re: Как из php-скрипта по очереди запустить несколько других Да, соединения закрываются. Но я не могу это изменить. Эти скрипты иногда надо выполнять кучей, а иногда по отдельности. По отдельности все работают и после выполнения чистят за собой. Неужели нет способа через php как бы сказать серверу: "ты мне сейчас запусти unlocking.php, подожди пока он отработает, потом запусти smsChecker.php как новый процесс, чтобы с предыдущим вообще не пересекался"?
Re: Как из php-скрипта по очереди запустить несколько других ну через cron/curl разными способами можно сдлеать
Re: Как из php-скрипта по очереди запустить несколько других Ну про Cron я писал об ограничении хостинга, пока у меня было 2 скрипта кроном и пользовался. А про Curl я что-то не подумал, должно получиться, попробую, спасибо. Если еще варианты появятся - пишите. Я еще сейчас дочитался, что как-то можно из php-файла управлять консолью сервера, а от туда уже можно горы свернуть. Но нормальных статей на русском не нашел...
Re: Как из php-скрипта по очереди запустить несколько других С Курлом получилось! Остался маленький вопрос, ему обязательно в url передавать полный путь с http, с доменом... У меня же все файлы рядом лежат, а ни относительные пути, ни абсолютные не работают, только полный. Вот так работает: Код (Text): http://*********.com/daemons/unlocking/unlocking.php А вот так нет: Код (Text): dirname(__FILE__) . '/unlocking/unlocking.php' Меня и так устраивает, просто инересно, зачем обращаться к своему файлу, как к чужому. Проще никак?
Re: Как из php-скрипта по очереди запустить несколько других ну в cron можно загнать так: php /home/www/daemons/unlocking/unlocking.php то есть как бы из консоли запускает
Re: Как из php-скрипта по очереди запустить несколько других проще разобраться с соединениями БД. может быть достаточно require_once(dbConnect) заменить на require(dbConnect)… или добавить куда-нибудь проверку на факт, что файл не самостоятельно подключен, а через require — в таком случае соединение не закрывать.