Я видел много сообщений о cron и ZF, но большинство решений оставляют работу для запуска доступной для общественности.
Что если вы хотите настроить действие, которое может выполняться ТОЛЬКО cron? Не каким-то анонимным пользователем и не кем-то, кто должен войти?
Решение, которое я использую, заключалось в том, чтобы поместить файл за пределы моего веб-корня, чтобы он загружал достаточно ZF, чтобы использовать то, что мне нужно (например, мне не нужно представление), а затем ударил его из cron. Мои вопросы: это лучший способ сделать это? Что делать, если вам нужно сделать код доступным через Интернет, но при этом необходимо, чтобы случайные пользователи не могли его найти и запустить?
Для иллюстрации, вот что я делаю (это работает) для задания cron, запускаемого из командной строки php, и на том же сервере, что-то вроде этого:
* 10 * * * php /Apps/ZF/cronjobs/crontest.php
Webroot - это: /Apps/ZF/someproject/
crontest.php:
<?php
ini_set('include_path', ini_get('include_path') . ':/Apps/ZF/someproject/library');
define('APPLICATION_PATH','/Apps/ZF/someproject/application');
define('APPLICATION_ENVIRONMENT','test');
//Include the loader (for loading ZF resources)
require_once 'Zend/Loader.php';
//Include the model (to access the Sites model in this case)
require_once(APPLICATION_PATH . '/models/Planets.php');
Zend_Loader::registerAutoload();
$configuration = new Zend_Config_Ini(
APPLICATION_PATH . '/config/config.ini',
APPLICATION_ENVIRONMENT
);
// DB adapter
$dbAdapter = Zend_Db::factory($configuration->database);
// DB table setup
Zend_Db_Table_Abstract::setDefaultAdapter($dbAdapter);
// Whatever code we want to run...
$test = new Model_Planets();
$test->fetchEntries();
Zend_Debug::dump($test);
?>
Так что, как я уже сказал, это работает, поэтому я не ищу кого-то, кто напишет мне решение ... просто любопытно сделать это "лучше". Кроме того, что, если мне нужно, чтобы это было доступно через Интернет, но я все еще хотел, чтобы он работал только через cron? Как насчет того, чтобы сделать его более гибким (потому что здесь я жестко кодирую несколько путей, которые, как я подозреваю, можно сделать более динамичными)?
Я предполагаю, что мог бы составить список разрешенных серверов, а затем проверить это с помощью $_SERVER['REMOTE_ADDR']
?
Что вы все думаете? Предложения? Я работаю один, поэтому у меня нет коллег, чтобы попросить о помощи по этому вопросу ... ТАК мой коллега, в некотором смысле.