Особенности запуска php-скриптов через Cron
Php-скрипты можно запускать по расписанию через Cron, но способ запуска зависит от некоторых особенностей...
Php-скрипты можно запускать по расписанию через Cron, но способ запуска зависит от некоторых особенностей, с которыми я недавно столкнулся. При запуске скриптов через Cron:
- скрипт запускается от папки запуска крона, поэтому все включения include и require с относительными путями не воспринимаются.
- не видны серверные переменные $_POST, $_GET, $_SERVER и т.д.
Решения этих проблем следующие ….
Скрипт запускается от папки запуска крона, поэтому все включения include и require с относительными путями не воспринимаются.
Решений этой проблемы несколько:
1. Вы можете изменить путь к папке запуска прямо в команде Cron таким образомcd /path/to/your/dir && php your_file.php
2. Вы можете скорректировать пути к вашим включениям таким образомinclude dirname(__FILE__) . '/../../' . 'included_file.php';
3. Вы можете запустить задание через wget таким образом/usr/bin/wget http://www.yoursite.com/your_file.php
Не видны серверные переменные $_POST, $_GET, $_SERVER и т.д.
Решений этой проблемы также несколько:
1. Вы можете запустить задание через wget, как это описано выше.
2. Вы можете использовать свой загрузчик, например,croner.php<br><?php<br>if (isset($argv[1])) {<br>$params = array('http' => array('method' => 'GET', 'content' => null));<br>$ctx = stream_context_create($params);<br>$fp = @fopen($argv[1], 'rb', false, $ctx);<br>if (!$fp) die('Problem with '.$argv[1]);<br>$response = @stream_get_contents($fp);<br>if ($response === false) die('Problem reading data from '.$argv[1]);<br>echo "Response: n".$response;<br>} else {<br>echo "Problem with params: n";<br>print_r($argv);<br>}<br>?>
И затем вызывать требуемые скрипты через него/usr/bin/php /path/to/croner.php "http://www.site.com/file.php"