我正在尝试编写一个Joomla CLI脚本,自动将站点升级到当前版本.在Joomla中,这似乎是通过*com_joomlaupdate*完成的.我们的想法是能够从管理员前端升级服务器上的任何Joomla站点.
我编写了以下内容进行测试,尝试通过直接访问其模型中的方法来模拟com_joomlaupdate中的控制器.我不熟悉joomla框架所以我可能在这里做一些愚蠢的事情.
<?php
const _JEXEC = 1;
error_reporting(E_ALL | E_NOTICE);
ini_set('display_errors', 1);
define('JPATH_BASE', dirname(__DIR__));
require_once JPATH_BASE . '/includes/defines.php';
require_once JPATH_BASE . '/includes/framework.php';
require_once JPATH_LIBRARIES . '/import.legacy.php';
require_once JPATH_LIBRARIES . '/cms.php';
// Load the configuration
require_once JPATH_CONFIGURATION . '/configuration.php';
define('JPATH_COMPONENT_ADMINISTRATOR', JPATH_ADMINISTRATOR . '/components/com_joomlaupdate');
require_once JPATH_COMPONENT_ADMINISTRATOR . '/models/default.php';
class Upgradejoomla extends JApplicationCli
{
public function doExecute()
{
$app = JFactory::getApplication('administrator');
$app->initialise();
$app->input->set('method', 'direct');
$this->out('Fetching updates...');
$updater = JModelLegacy::getInstance('JoomlaupdateModelDefault');
$updater->refreshUpdates();
$updater->applyUpdateSite();
$basename = $updater->download();
$app->setUserState('com_joomlaupdate.file', $basename);
$updater->createRestorationFile($basename);
echo ($updater->finaliseUpgrade());
$updater->cleanUp();
}
} …Run Code Online (Sandbox Code Playgroud) joomla command-line-interface joomla-extensions joomla2.5 joomla3.0