質問: joomla 3.5以降を手動で最新バージョンに更新する joomlaのインストール、バージョン3.5以降がありますが、何を試しても更新できません。 joomla updateコンポーネントを使用しようとしました。パッケージをアップロードしようとしましたが、機能しません。次に、ルートディレクトリでパッケージを抽出しようとしたところ、サイトが壊れました。手動で更新するにはどうすればよいですか?
回答: michael babkerが、手動による更新後のスクリプトを https://gist.github.com/mbabker/d7bfb4e1e2fbc6b7815a733607f89281 で提供しています。これにより、ファイルシステムの更新後に通常実行される手順が実行されます。このスクリプトは、更新パッケージをサイトから手動で抽出した後に実行されるように設計されています。いつものように、このようなメジャーアップデートを試みる前に、webサイトのバックアップを実行する必要があります。以下は現在のコードのコピーですが、リンクされたページは将来更新される可能性があるため、必ず最新バージョンを使用していることを確認してください。postupdate.phpファイル(2019年9月15日現在):<?php /** * @package joomla.administrator * * @copyright copyright (c) 2016 open source matters, inc. all rights reserved. * @license gnu general public license version 2 or later; see license.txt */ /** * define the application's minimum supported php version as a constant so it can be referenced within the application. */ define('joomla_minimum_php', '5.3.10'); if (version_compare(php_version, joomla_minimum_php, '<')) { die('your host needs to use php ' . joomla_minimum_php . ' or higher to run this version of joomla!'); } /** * constant that is checked in included files to prevent direct access. * define() is used in the installation folder rather than "const" to not error for php 5.2 and lower */ define('_jexec', 1); // load the administrator application's path constants if (file_exists(__dir__ . '/defines.php')) { include_once __dir__ . '/defines.php'; } if (!defined('_jdefines')) { define('jpath_base', __dir__); require_once jpath_base . '/includes/defines.php'; } require_once jpath_base . '/includes/framework.php'; require_once jpath_base . '/includes/helper.php'; // account for moved jtoolbarhelper class in 3.9 if (file_exists(jpath_base . '/includes/toolbar.php')) { require_once jpath_base . '/includes/toolbar.php'; } else { require_once jpath_base . '/includes/subtoolbar.php'; } // boot japplicationadministrator so the application references in the factory resolve correctly. jfactory::getapplication('administrator'); // set the component path (un)constants define('jpath_component', jpath_administrator . '/components/com_joomlaupdate'); define('jpath_component_administrator', jpath_administrator . '/components/com_joomlaupdate'); define('jpath_component_site', jpath_site . '/components/com_joomlaupdate'); // load the update component's model to run the cleanup methods jmodellegacy::addincludepath(jpath_component_administrator . '/models', 'joomlaupdatemodel'); /** @var joomlaupdatemodeldefault $model */ $model = jmodellegacy::getinstance('default', 'joomlaupdatemodel'); // make sure we got the model if (!($model instanceof joomlaupdatemodeldefault)) { echo 'could not load update component model, please check the logs for additional details.' . php_eol; exit(1); } // load up the logger jlog::addlogger( array( 'format' => '{date}\t{time}\t{level}\t{code}\t{message}', 'text_file' => 'joomla_update.php', ), jlog::info, array('update', 'databasequery', 'jerror') ); jlog::add('starting manual update using postupdate', jlog::info, 'update'); // load the joomla library and update component language files jfactory::getlanguage()->load('lib_joomla'); jfactory::getlanguage()->load('com_joomlaupdate'); jlog::add(jtext::_('com_joomlaupdate_update_log_finalise'), jlog::info, 'update'); // finalize the update if ($model->finaliseupgrade() === false) { echo 'failed to finalize the upgrade, please check the logs for additional details.' . php_eol; exit(1); } jlog::add(jtext::_('com_joomlaupdate_update_log_cleanup'), jlog::info, 'update'); // cleanup after the update $model->cleanup(); jlog::add(jtext::sprintf('com_joomlaupdate_update_log_complete', jversion), jlog::info, 'update'); jlog::add('finished manual update using postupdate', jlog::info, 'update'); echo 'update to ' . jversion . ' completed successfully.' . php_eol;