01319:带/e修饰符的preg_replace已弃用

摘要:preg_replace with/e修饰符已弃用
创建时间:2013-08-06 11:51
状态:进行中
类别:功能
发件人:匿名?
分配:
优先级:434
版本:2.2.53
操作系统:Linux、Apache、PHP 5.5.0

请参阅故障排除关于如何找出导致出现警告的配方。

描述:在我的Web服务器上,我无法再使用pmwiki,因为Apache的mod_sec模块使用/e修饰符阻止了preg_replace的调用。由于从PHP 5.5.0开始不鼓励使用/e,请参见http://php.net/manual/en/reference.pcre.pattern.modifiers.php,如果能更新pmwiki就太好了。

或者:出现多条消息:“Deprecated:preg_replace():/e修饰符已弃用,请在第1663行的pmwiki.php中改用preg_erplace_callback”

有一项工作正在进行中,从PmWiki版本2.2.56开始,核心不应该依赖这个弃用的特性。我们将逐步迁移任何需要的模块。请测试最新版本并报告任何问题--佩特科2013年9月30日下午04:37

很抱歉告诉你,但这里也有同样的问题。版本2.2.56没有帮助。。。卡尔·隆卡雷克?2013年10月28日下午03:07

版本2.2.56是否工作没有是否启用了任何模块/配方/自定义?如果是,启用时,哪些配方会导致问题?如果没有,我想实时测试该服务器,请联系我5公里[蜗牛]5公里[期间]. --佩特科2013年10月28日下午03:45

好的,找到问题了。我使用了一个旧版本的pagestoreGZ。禁用它并添加“error_reporting(E_ALL&~E_DEPRECATED^E_NOTICE);“对于pmwiki.php,它又起作用了。不过还是要感谢。卡尔·隆卡雷克?2013年10月29日凌晨04:01

我在2.2.61中看到了这一点,只要启用了以下任何一项,所有这些都是从PMwiki.org的烹饪书区域新安装的:

  1. markuptounstyled.php型
  2. 标记时发出信号.php
  3. 瘦身.php
  4. 扩展标记.php
  5. 断纸.php
  6. 页面至php
  7. 节编辑.php
  8. 自动文档.php
  9. 包括网站.php
  10. swf-sites.php网站
  11. Java脚本-编辑.php
  12. AMmathjax.php

当前的php是-5.5.7,也是新安装的。

spellchecker.php在安装中运行良好。鲍博·桑德?

谢谢你的报告。我发布了新版本的食谱。自动目录这应该可以解决这个食谱的问题。您可以尝试联系其他作者并要求他们更新PHP 5.5的配方. --佩特科2014年2月5日上午11:34

接下来,这发生在干净安装的Gentoo系统上。正在安装的php.ini是一个开发php,它打开了所有警告等。用生产php.inis替换这些警告解决了所有问题。我很抱歉在发布上述内容之前没有意识到这一点。鲍勃?

多条消息出现此问题已弃用:preg_replace():/e修饰符已弃用,请在第1698行的/home/cornellbox/cornell box.com/pmwiki/pmwiki.php中改用preg_erplace_callback使用2.2.80版并运行PHP 5.6--psproefrock公司?2015年10月30日

请按照以下说明操作:PmWiki。故障排除要找出PHP 5.6需要更新的配方:启用诊断,然后转到pmwiki.PHP?action=规则集;或者禁用所有配方,然后一个接一个地重新启用它们,以查看哪些配方会导致出现警告--佩特科2015年10月30日,11:32 PM

这很有用。它有助于将问题缩小到我使用的皮肤上,并有助于解决这个问题--psproefrock公司?2015年12月13日

特定配方的问题

我希望这是这个问题的正确位置(我从故障排除)。

我正在更新PHP 5.5中的所有内容,但我无法自己更新一些食谱:群集标记器我向作者寻求帮助,但她没有时间“此时此刻,也不在可预见的未来”(凯瑟琳·安徒生). 这给我带来了麻烦,因为这两个菜谱对我的网站结构很重要在建工程因此,如果您有时间,我会向PmWiki的专家寻求帮助。提前谢谢。——弗兰克——2014年5月15日,晚上10:22

我从未使用过这些食谱,但我将其修改为使用与PHP 5.5兼容的Markup_e()函数,并且我没有收到“不推荐使用”的警告。获取附加:cluster.php附加:tagger.php,尝试它们并报告任何问题(我仍然没有使用它们)--佩特科2014年5月15日晚上10:51

很 完美。这两种食谱都能正常工作。非常感谢Petko,非常快速准确。。。令人印象深刻!--弗兰克——2014年5月16日上午03:54


blix蒙皮问题

注意:我现在已经提交了一个补丁(请参阅下面的ps)


这个blix皮肤使用较新版本的PHP时失败

我发现了问题(见下文)并创建了一个github票,但作者没有回应。

已弃用:preg_replace():/e修饰符已弃用,请改用preg_erplace_callback

谢谢

另外,在试图找出自己的解决方案时,我注意到皮肤指南页面仍然显示了一个带有现在不允许的/e修饰符的示例:

护肤品DaveG公司多年来,在PmWiki社区中一直很活跃,也很有帮助。尝试通过“pmwiki(snail)solidgone(period)com”的电子邮件直接联系他。如果不可能的话,因为皮肤的许可证允许修改和分发,所以可以分叉--佩特科2015年3月4日下午08:28


食谱:ImageMap

在Imagemap配方中也发现了这个问题。imagemap.php只是一个短文件,但我不知道如何修改它。——Dragonfly 2015年7月11日上午10:43

我给开发人员发了一条消息,应该很快就会修复。如果您赶时间,请更换第53行:

标记('area','指令',“/\\(:区域(.*?)?\\s*?:\\)/e”,“映射区域('$1')”);

具有:

Markup_e('area','指令',“/\\(:区域(.*?)?\\s*?:\\)/”,“映射区域(\$m[1])”);

或者等待汉斯发布新版本--佩特科2015年7月11日上午07:14

太好了,非常感谢!这也向我展示了如何修复我发现的其他几个问题。非常感谢--蜻蜓2015年7月21日下午2:54

如果这些是食谱中的食谱,请随时联系作者或在对话页面上留下解决方案--佩特科2015年7月21日上午09:27


食谱:PageTableOfContents已于2015年8月14日修复。格林曼?2015年9月8日下午04:50


或swf.php

在flash、flash2、swf-sites、swf-recipe上也发现了这个问题。我在哪里可以找到帮助来纠正这个问题。

在swf.php中,我试图更改这一行:

加价('swf','<urllink',

“/\\b(?>(\\L))([^\\s$UrlExcludeChars]+\\.swf)/e”,“保留(\$GLOBALS['LinkFunctions']['$1'](\$页面名,“$1”,“$1”,NULL,“$1$2”,\$GLOBALS[“SwfTagFmt”]),“L”);

有了这个:

标记_ e('swf','<urllink',

“/\\b(?>(\\L))([^\\s$UrlExcludeChars]+\\.swf)/”,“保留(\$GLOBALS['LinkFunctions'][\$m[1](\$页面名,\$m[1],\$m[1],空,\$m2,\$GLOBALS[“SwfTagFmt”]),“L”);

但我生成了意外的“$m”(T_VARIABLE)错误。

在第三行的末尾,\$m[1]和\$m[2]之间应有一个点:空,\$m[1]\$米[2],--佩特科2015年12月11日下午08:00

在Flash.php中,我试图更改这一行:

标记('flash','<img',“/\(:flash(.*?:)(.*?)(\\s.*?)?\\s*?:\\)/e”,“ShowFlash('$1','$2','$3')”);

具有

Markup_e('flash','<img',“/\\(:flash(.*?:)(.*)(\\s.*?)?\\s*?:\\)”,“ShowFlash('$1','$2','3')”);

这一次,没有错误,但它没有在我的页面中嵌入我的swf文件。我不知道什么是“$1”等,以及我是否必须通过\$m[1](什么都不改变)或在其他变量中更改它们。

有主意吗?

--Jvamp公司2016年1月25日01:30 AM 2015年12月12日00:57 AM

是的,您应该将“$1”更改为\$m[1],还要注意您已经删除了最后一个“/e”,则只应删除“e”并保留“/":
Markup_e('flash','<img',“/\\(:flash(.*?:)(.*)(\\s.*?)?\\s*?:\\)/”,“ShowFlash(\$m[1],\$m[2],\$m[3])”);
注意,这应该可以修复Markup_e()调用而不会出错,但我还没有测试这些模块--佩特科2015年12月11日,08:00 PM

对于Flash,它很管用!!!谢谢。

所以正确的代码是

标记_ e('swf','<urllink',

“/\\b(?>(\\L))([^\\s$UrlExcludeChars]+\\.swf)/”,“保留(\$GLOBALS['LinkFunctions'][\$m[1](\$页面名,\$m[1],\$m[2],空,\$m2[1]\$米[2],\$GLOBALS[“SwfTagFmt”]),“L”);

我应该更改食谱中的flash.php吗?

--Jvamp公司2016年1月25日01:30 AM 2015年12月13日11:01 AM

如果可以的话,尝试通过电子邮件联系维护人员,和/或写信给谈话页面。如果他们无法更新模块,并且许可证允许修改和重新分发,请随意上传正确的文件(确保您已经对其进行了良好测试)。否则,您可以链接到此页面,以便其他需要模块的人可以找到信息--佩特科2015年12月12日上午04:13


PopupIFrame的问题

几天前我要求更新(第7.2页)第页,共页弹出IFrame致作者(环氧化酶),但他似乎太忙了,或者不再是食谱的维护者。可以请专家帮我吗?标记对我来说太复杂了(标记(_e),但是$页面名还有保留,所以我不知道该怎么办)。谢谢。

弗兰克-2018年2月24日下午05:45

以下是更新此内容的一种方法(将Markup_e更改为Markup,然后查看“###更改行”了解更多信息):

标记('opiframe1','<链接','/%popiframe\\s*(.*?)%\\[\\[(.*吗)\\]\\]/',“弹出IFrame”);###变更行标记('opiframe2','<popiframe1',“/%popiframe\\s*(.*?)%(?>\\[\\[([^|\\]]*)\\|\\s*)(.*)\\s*\\]\\]($SuffixPattern)/”,“弹出IFrame”);###变更行函数PopupIFrame($m){###更改行提取($GLOBALS[“标记到HTML”]);###添加行@列表($m0、$opts、$tgt、$lbl、$sfx)=$m;###添加行

Keep()块不需要更改--佩特科2018年2月24日上午11:30

非常感谢你--弗兰克-2018年2月25日上午01:23


我搜索了家谱,什么时候会有结果https://www.pmwiki.org/wiki/Christian/GenealogySoftware网站我看到这里提到的问题与pmwiki.org本身有关。。。拉平维诺?

该组启用了较旧的插件(目录)。现已禁用。这里可能还有其他启用了旧插件的页面。只有这样的插件才能导致这些消息,请参阅故障排除. --佩特科