“FAQ:MediaWiki”的版本间差异

来自Wikioe
跳到导航 跳到搜索
第5行: 第5行:


== '''open_basedir''' 问题 ==
== '''open_basedir''' 问题 ==
  错误信息:<span style="color: red; font-size: 100%">'''Warning: is_executable(): open_basedir restriction in effect.''' File(/bin/bash) is not within the allowed path(s): (/www/wwwroot/wiki.eijux.com/:/tmp/) in /www/wwwroot/wiki.eijux.com/includes/shell/Command.php on line 311</span>
  <span style="color: red; font-size: 110%">'''Warning: is_executable(): open_basedir restriction in effect.''' File(/bin/bash) is not within the allowed path(s): (/www/wwwroot/wiki.eijux.com/:/tmp/) in /www/wwwroot/wiki.eijux.com/includes/shell/Command.php on line 311</span>
    [[File:MediaWiki:open_basedir问题.png|800px]]
 


<blockquote>
<blockquote>
第17行: 第20行:
</blockquote>
</blockquote>


'''解决方式:'''
# 关闭“防止跨站攻击”,在<span style="color: blue">宝塔面板</span>中:网站 -> 站点设置 -> 网站目录:取消“防止跨站攻击(open_basedir)”。如下图:
#:
# 配置“open_basedir”,
* '''错误:''' '''<code></code>'''。<br/>
分析:出现此类问题一般为 open_basedir 的问题,即访问的文件不在'''<code>open_basedir</code>'''的限定目录里面'''(<code>open_basedir</code>的作用是将php所能打开的文件限制在指定的目录或文件,)'''。
* '''处理:'''


=== <s>修改php配置</s> ===
'''解决方案:'''
<div style="background-color:#D3D3D3;">
# <span style="color: blue">'''关闭“防止跨站攻击”'''</span>
<s>
## 通过“<span style="color: green">'''宝塔面板'''</span>”关闭:网站 -> 站点设置 -> 网站目录:取消“防止跨站攻击(open_basedir)”。如下图:
查阅PHP配置文件'''<code>php.ini</code>'''搜索'''<code>open_basedir</code>''',添加配置如下:
##: [[File:宝塔面板:防止跨站攻击(open_basedir).png|600px]]
<pre style="background-color:#D3D3D3;">
## 通过“<span style="color: green">'''配置文件'''</span>”关闭:注销如下语句即禁用。
; open_basedir, if set, limits all file operations to the defined directory
##: <syntaxhighlight lang="PHP" line highlight="4">
; and below.  This directive makes most sense if used in a per-directory
...
; or per-virtualhost web server configuration file.
; Note: disables the realpath cache
; http://php.net/open-basedir
; open_basedir =
open_basedir = /www/wwwroot/wiki.eijux.com/:/tmp/
</pre>
</s>
</div>
结果还是搞不定!<br/>


=== BTPanel防跨站攻击 ===
上网搜索一番才发现,'''BTPanel中站点设置的“网站目录”中有“防跨站攻击(open_basedir)”的选项,取消勾选之后,重启PHP''',就不再有这错误了。<br/>
(该选项的配置文件为:“'''/www/server/panel/vhost/openlitespeed/detail/wiki.eijux.com.conf'''”),取消勾选即注释了代码:
<pre>
phpIniOverride  {
phpIniOverride  {
#php_admin_value open_basedir "/tmp/:/www/wwwroot/wiki.eijux.com/"  
#php_admin_value open_basedir "/tmp/:/www/wwwroot/wiki.eijux.com/"
}
}
</pre>


* '''注意:'''
...
注意用'''<code>open_basedir </code>'''指定的限制'''是路径前缀,而非目录名'''。所以如果要将访问限制在仅为指定的目录,应用斜线结束路径名。<br/>
</syntaxhighlight>
如:若'''"open_basedir = /dir/user"''', 那么目录 '''"/dir/user"''' '''"/dir/user1"'''都是可以访问的。
##* 配置文件:位于“<span style="color: green">/www/server/panel/vhost/openlitespeed/detail/wiki.eijux.com.conf</span>”。
<div style="background-color:#ffffcc; color:#e76700; font-weight:bold;">
# <span style="color: blue">'''配置“open_basedir”'''</span>:通过编辑“<span style="color: blue; font-size: 120%">'''.user.ini'''</span>”文件,添加必要的目录树:
设置'''<code>open_basedir</code>'''对此有效。之前解析'''<code>.svg</code>'''、使用'''<code>syntaxhighlight</code>'''遇到此问题时,还有确实依赖的库、服务的问题需要解决,此备忘。
#: <syntaxhighlight lang="PHP" line highlight="">
</div>
open_basedir=/www/wwwroot/wiki.eijux.com/:/tmp/
</syntaxhighlight>
#* '''.user.ini''' 文件:开启“防止跨站攻击”之后自动创建,位于项目根目录,用于配置“open_basedir”。
#* '''open_basedir'''指定的限制是'''路径前缀,而非目录名'''(如:设置“/dir/user”,则“/dir/user”和“/dir/user1”都是可以访问的)。
#** 所以如果要将访问限制在仅为指定的目录,应用斜线结束路径名(如:“/dir/user/”)。
#* 添加 Linux 根目录“<span style="color: blue">'''/'''</span>”,则一定不会再报错,但是“防止跨站攻击”也就没啥意义了。
#**【通过错误信息定位需要的目录实在麻烦!】


== 无法生成avg缩略图 ==
== 无法生成avg缩略图 ==

2022年8月23日 (二) 15:51的版本


关于

手册:常见问题

open_basedir 问题

Warning: is_executable(): open_basedir restriction in effect. File(/bin/bash) is not within the allowed path(s): (/www/wwwroot/wiki.eijux.com/:/tmp/) in /www/wwwroot/wiki.eijux.com/includes/shell/Command.php on line 311

    MediaWiki:open basedir问题.png


open_basedir(防止跨站攻击) :用于将 PHP 所能打开的文件限制在指定的目录树,以此防止跨目录、跨站的访问。

1、本指令不受安全模式打开或者关闭的影响。

2、当一个脚本试图打开一个文件时,该文件的位置将被检查。

3、当文件在指定的目录树之外时 PHP 将拒绝打开它。


解决方案:

  1. 关闭“防止跨站攻击”
    1. 通过“宝塔面板”关闭:网站 -> 站点设置 -> 网站目录:取消“防止跨站攻击(open_basedir)”。如下图:
      宝塔面板:防止跨站攻击(open basedir).png
    2. 通过“配置文件”关闭:注销如下语句即禁用。
      ...
      
      phpIniOverride  {
      #php_admin_value open_basedir "/tmp/:/www/wwwroot/wiki.eijux.com/"
      }
      
      ...
      
      • 配置文件:位于“/www/server/panel/vhost/openlitespeed/detail/wiki.eijux.com.conf”。
  2. 配置“open_basedir”:通过编辑“.user.ini”文件,添加必要的目录树:
    open_basedir=/www/wwwroot/wiki.eijux.com/:/tmp/
    
    • .user.ini 文件:开启“防止跨站攻击”之后自动创建,位于项目根目录,用于配置“open_basedir”。
    • open_basedir指定的限制是路径前缀,而非目录名(如:设置“/dir/user”,则“/dir/user”和“/dir/user1”都是可以访问的)。
      • 所以如果要将访问限制在仅为指定的目录,应用斜线结束路径名(如:“/dir/user/”)。
    • 添加 Linux 根目录“/”,则一定不会再报错,但是“防止跨站攻击”也就没啥意义了。
      • 【通过错误信息定位需要的目录实在麻烦!】

无法生成avg缩略图

如果要使用第三方的converter,参见Image thumbnailing页面

  • 描述:

上传.svg文件过后,页面中提示“生成缩略图出错:无法创建临时缩略图文件”,在“特殊页面:文件列表”中查看文件时: Warning: symlink() has been disabled for security reasons in /www/wwwroot/wiki.eijux.com/includes/media/SvgHandler.php on line 280

  • 处理:

默认安装的PHP一些函数是没有默认开启的。 我们需要的函数是symlink(),则用在PHP的禁用函数中删除该函数即可。


  • 描述:

生成缩略图处提示:sh: convert: command not found,PHP错误信息为Warning: is_executable(): open_basedir restriction in effect. File(/bin/bash) is not within the allowed path(s): (/www/wwwroot/wiki.eijux.com/:/tmp/) in /www/wwwroot/wiki.eijux.com/includes/shell/Command.php on line 311

  • 处理:

先考虑是PHP配置的问题,

PHP错误'''require(): open_basedir restriction in effect”''',即访问脚本不在'''<code>open_basedir</code>'''的限定目录里面,'''<code>open_basedir</code>'''的作用是将php所能打开的文件限制在指定的目录或文件。<br/>

修改PHP配置文件PHP.iniopen_basedir之后错误依旧,而后一直都盯着open_basedir打转。兜兜转转许久才注意到sh: convert: command not found的提示,想到可能没有配置Svg Converter,从而进一步发现MediaWiki没有默认安装Converter。最后在| 官网手册SVG节了解到支持信息,相关的Converter("ImageMagick", "ImagickExt", "sodipodi", "inkscape", "batik", "rsvg", and "imgserv")均需单独安装。相较之下,选用了| NativeSvgHandler扩展(将SVG文件直接发送至客户端以进行客户端渲染)。步骤如下:

  1. 下载文件,并将其放置在extensions/文件夹中的NativeSvgHandler目录内。(注意修改所有者及读写权限)
  2. 将下列代码放置在您的LocalSettings.php的底部:'wfLoadExtension( 'NativeSvgHandler' );'
  3. 导航至Special:Version,以验证扩展已成功安装。

再于网页刷新,svg缩略图显示正常。