我有一个问题:)我想在我的服务器上使用自己的PHP文件,该文件能够更改在同一服务器上的MediaWiki安装中注册的用户选项。为此我已加载webstart和自动加载包括。现在,我可以毫无问题地阅读此时登录用户的设置。但是,如果我想保存已编辑的设置(使用setOption()),则会出现以下注意事项:
注意:未提交的数据库写入(来自DatabaseBase :: query(LCStoreDB :: get)的事务)。在/var/www/wiki/includes/db/Database.php第4065行注意:DB事务回调仍然未决(来自Title :: invalidateCache)。在/var/www/wiki/includes/db/Database.php第4073行
并且选项没有保存到数据库中:(有人知道,如何完成我的任务,或者我如何解决我的问题?
谢谢!
以下是代码:
<?php
$IP = strval( getenv( 'MW_INSTALL_PATH' ) ) !== ''
? getenv( 'MW_INSTALL_PATH' )
: realpath( __DIR__ . '/' );
require_once "$IP/includes/AutoLoader.php";
require_once( "$IP/includes/WebStart.php" );
$t = new User();
$user = $t->newFromSession();
if(!isset($wgCommandLineMode) && !isset($_COOKIE[session_name()])) {
wfSetupSession();
}
if ($user->isLoggedIn()) {
$user->setOption( 'skinname', 'vector' );
$user->setCookies();
$user->saveSettings();
}
&GT;
答案 0 :(得分:2)
使用自动事务时,您需要正确关闭数据库连接(这是$ wgCommandLineMode为true时的默认值)。在文件的末尾添加类似的内容:
$lb = wfGetLBFactory();
$lb->shutdown();
您也可能希望捕获可能引发的任何异常并对所有打开的数据库连接执行回滚。至于MediaWiki bug 56269,这不是你的问题(虽然缺乏对所有开放数据库连接进行回滚的能力可能导致该错误)。
答案 1 :(得分:0)
尝试在includes / Maintenance.php中继承维护类,并使用所需的代码实现抽象执行功能。我遇到了与未提交的事务相同的警告/没有保存。按照createAndPromote.php中的示例,提交了数据库事务。