[pmwiki-users] Templates and PHP 7.x

Petko Yotov 5ko at 5ko.fr
Wed Nov 6 22:09:23 PST 2019

I've updated the script, you can get it from:


To reply to your question, to return true, is_callable() expects exactly 
a function name without the "('$1')" parts.

So the 4th argument of Markup() should now be "ParametersParse" rather 
than "ParametersParse('\$1')".

Because of this, the functions ParametersParse() and Template() need to 
be updated because now they receive the full match array instead of its 
1st element. So I rewrote from:

   function ParametersParse($text) {...}


   function ParametersParse($m) {$text = $m[1]; ...}

Similarly for Template().

Lastly, at the end of the 3rd argument to both Markup() calls, the "e" 
letter needs to be removed, previously:


now: "/\(:template(.*?):\)/",


If you upgrade :  http://www.pmwiki.org/Upgrades

On 07/11/2019 03:39, Michael Eager wrote:
> I'm trying to use the PmForm and Captcha Cookbook addons, which use
> the Template addon.  This fails because the Template code uses the
> deprecated /e extension to preg_replace:
> templates.php:45
> Markup(
> 	'parameters',
> 	'>include',	## or where?
> 	"/($Parameters_mg|$Parameters_ms|$Parameters_mu)/e",    <====
> 	"ParametersParse('\$1')"
> );
> Markup(
> 	'template',
> 	'<include',
> 	"/\(:template(.*?):\)/e",   <====
> 	"Template('\$1')"
> );
> which eventually calls preg_replace(), not preg_replace_callback()
> pmwiki.php:1845
>         if (is_callable($r)) $x = preg_replace_callback($p,$r,$x);
>         else $x=preg_replace($p,$r,$x);   <====
> I'm a bit confused by the code, but it looks to me that $r should be
> callable (which I suppose is the the callback function passed to
> Markup()), but preg_replace_callback() is not being called.
> Is there a fix for this?

More information about the pmwiki-users mailing list