【问题标题】:Mediawiki complaining about open_basedir restriction. How do I solve it?Mediawiki 抱怨 open_basedir 限制。我该如何解决?
【发布时间】:2014-01-21 05:01:09
【问题描述】:

在最近一次更新(系统和媒体维基)之后,我的媒体维基基本上是完全空白的。数据库和一切似乎都完好无损。启用 php 调试输出后,我收到以下消息

警告:is_executable():open_basedir 限制生效。文件(/usr/bin/php)不在允许的路径中:(/srv/http/:/home/:/tmp/:/usr/share/pear/:/usr/share/webapps/: /var/lib/mediawiki/) 在 /usr/share/webapps/mediawiki/includes/Wiki.php 第 655 行

我的问题是如何着手解决这个问题?简单地将 /usr/bin/php 添加到我的 open_basedir() 限制似乎非常不安全。

【问题讨论】:

  • PHP 试图访问 PHP 可执行文件似乎非常愚蠢。我会检查你的服务器和 Wiki 文件中的一些错误配置,从 Wiki.php 的第 655 行开始,看看它到底想在那里做什么以及为什么。
  • 嗯,升级后你是否从 cli 运行了php maintenance/update.php
  • 运行php maintenance/runJobs.php 以清空作业队列,php maintenance/update.php 遵循您的建议并没有为我解决问题。
  • Stack Overflow 是一个编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参阅帮助中心的What topics can I ask about here。也许Super UserWebmaster Stack Exchange 会是一个更好的提问地方。另见Where do I post questions about Dev Ops?

标签: php mediawiki


【解决方案1】:

似乎错误发生在MediaWiki::doJobs(),它试图在后台启动一个单独的PHP进程来异步处理job queue。要修复它,您可以:

  • 编辑您的 php.ini 以将 /usr/bin/php 添加到允许的路径中,

  • 在 LocalSettings.php 中设置 $wgJobRunRate = 0 以完全禁用自动作业处理,并改为通过 cron 运行 maintenance/runJobs.php,或者

  • 设置 $wgPhpCli 指向一些在 use_basedir 下允许但不是可执行程序的文件,这会导致 is_executable() 检查静默失败并迫使 MediaWiki 崩溃返回同步作业处理。

请注意,最后一个选项虽然最简单,但可能存在性能问题,因为这意味着 MediaWiki 需要在正常 Web 请求处理结束时运行后台作业,这可能会增加页面加载时间。

也就是说,如果您不想使用第一个选项,则将后两者结合起来可能是最安全和最有效的:通过 cron 运行后台作业会将它们从正常的请求处理路径中移除,同时将 $wgPhpCli 设置为一个虚拟值确保 MediaWiki 也不会出于任何其他目的尝试启动后台 PHP 进程。

【讨论】:

    猜你喜欢
    • 2021-01-16
    • 2017-08-19
    • 2022-06-13
    • 2023-03-31
    • 2015-01-14
    • 2014-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多