【问题标题】:MediaWiki setOption() on own PHP pageMediaWiki setOption() 在自己的 PHP 页面上
【发布时间】:2014-03-07 20:42:48
【问题描述】:

我有一个问题 :) 我想在我的服务器上使用自己的 PHP 文件,它能够更改在同一服务器上的 MediaWiki 安装中注册的用户的选项。为此,我已经加载了 webstart 和 autoload 包括。现在,我可以毫无问题地读取此时登录用户的设置。但是,如果我想保存已编辑的设置(使用 setOption()),则会出现以下通知:

注意:未提交的数据库写入(来自 DatabaseBase::query (LCStoreDB::get) 的事务)。在 /var/www/wiki/includes/db/Database.php 的第 4065 行 注意:数据库事务回调仍在等待中(来自 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();
}

?>

【问题讨论】:

  • 可能与this known bug有关?
  • 谢谢你,也许这是同一个错误,我已经在那里发布并会在修复错误后进行测试,谢谢 :)

标签: php mysql mediawiki


【解决方案1】:

您需要在使用自动事务时正确关闭数据库连接(这是 $wgCommandLineMode 为 true 时的默认设置)。在文件末尾添加类似这样的内容:

$lb = wfGetLBFactory();
$lb->shutdown();

您可能还想捕获任何可能引发的异常并对所有打开的数据库连接进行回滚。至于MediaWiki bug 56269,这不是你的问题(尽管缺乏对所有打开的数据库连接进行回滚的能力可能是导致该错误的原因)。

【讨论】:

  • 谢谢,就是这样 :) 在我的代码中,我有一个 try catch 构造,因此,如果发生任何错误,脚本会回滚更改:) 非常感谢您的帮助!
【解决方案2】:

尝试在 include/Maintenance.php 中子类化维护类,并使用所需的代码实现抽象执行功能。我遇到了与未提交事务相同的警告/没有保存。按照 createAndPromote.php 中的示例,提交数据库事务。

【讨论】:

  • 试过了,但同样的错误:/我也试过这个forge.typo3.org/issues/54257,但也不起作用。我想,我会等到 Patrick Q 喜欢的 bug 修复后,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-09
  • 2016-11-24
  • 2011-04-12
  • 2012-11-11
  • 1970-01-01
  • 2012-01-09
  • 2011-12-17
相关资源
最近更新 更多