magic quotes
这篇博文里涉及两个问题。一是Mediawiki显示空白,二是在托管共享服务器上关掉自己PHP环境里的magic quotes。
对于第一个问题,我找到了原因但是没在上面费时间;解决了第二个问题,第一个问题也就N/A了。
先说事情的缘起。最近发现我那个自用小Wiki出状况了,所有页面都显示空白正文,只剩标题和Wiki标准界面菜单。
如果点“编辑”,就能在编辑框里看到正文。做一些改动再打开,可以看到词条内容确实被改动过。这是个很好的信号,说明数据库里的内容都还在,而且存取都没问题,只是后续的处理和显示出错了。
大致搜了一下网上内容,有遇到完全相同症状的,说是PHP的PCRE版本升级了,而低版本的Mediawiki代码会出错。方案是降级PCRE或者升级Mediawiki。
降级PCRE是不可能的了,Mediawiki早该升级了。
那就升吧。
- 下载Mediawiki。
- 解压。
- 上传到服务器上的一个新路径下。
- 把旧Wiki里的images目录拷过去。
- 把旧wiki里的LocalSettings.php改一下$wgScriptPath,拷过去。
- 浏览器上打开新路径的Wiki链接/mw-config,按指示操作。
- 确认新版本运行正常。
- 删除旧Wiki目录。
- 把新Wiki目录改为旧Wiki曾用名。
- 把LocalSettings.php的$wgScriptPath改回来。
做到第六步时报错了,说新版Mediawiki不能在magic_quotes_gpc打开的情况下运行,让我关掉。
magic_quotes_gpc是PHP_INI_PERDIR级别的,不能够被程序软关,就是说在LocalSettings.php里调用ini_set没用,必须在类似php.ini这类系统级设置里硬关。
可系统不是我一个人的,我只能局部定制。
直接在.htaccess里写
php_flag magic_quotes_gpc Off
刷,产生“500 Internal Server Error”错误。据说如果PHP在Apache上不是以Module运行,则会看到这个错误号。这条路走不通了,再来。
写个PHP脚本,只有一句话:phpinfo(); 上传运行。阅读phpinfo()的输出,找到PHP初始设置都用了哪些.ini文件。
再写个PHP脚本,只有一句话readfile($_GET[file]); 上传运行,把.ini文件一个个读出内容来,拼接成一个php.ini,在文件末尾附上
magic_quotes_gpc = Off
在.htaccess里放一句
SetEnv PHPRC 新php.ini全路径名
上传,再刷,没关掉……
几乎山穷水尽时留意到了phpinfo输出的这一栏:
user_ini.filename .user.ini
对啊,PHP_INI_PERDIR的说明里也提到了.user.ini,我早该用这个最省力的方法。
创建一个.user.ini文件,把“magic_quotes_gpc = Off”写到里面,上传到Wiki主目录下。再刷,呼,终于行了。