我正致力于将SocialEngine移植到PHP7上工作。
在默认安装中,我收到以下错误:
preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in
<b>/home/vagrant/code/mysite/project/app/application/libraries/Scaffold/modules/NestedSelectors/NestedSelectors.php</b>
on line <b>300</b>
该错误的代码如下所示:
$xml = preg_replace('/([-_A-Za-z*]+)\s*:\s*([^;}{]+)(?:;)/ie', "'<property name=\"'.trim('$1').'\" value=\"'.trim('$2').'\" />\n'", $xml);
我将其替换为preg_replace_callback
,如此:
$xml = preg_replace_callback('/([-_A-Za-z*]+)\s*:\s*([^;}{]+)(?:;)/ie', function($matches) {
return "'<property name=\"'.trim('$matches[1]').'\" value=\"'.trim('$matches[2]').'\" />\n'";
}, $xml);
现在我收到了这个错误:
preg_replace_callback(): The /e modifier is no longer supported, use preg_replace_callback instead in
<b>/home/vagrant/code/mysite/project/app/application/libraries/Scaffold/modules/NestedSelectors/NestedSelectors.php</b>
on line <b>304</b>
这对我来说似乎有效,我做错了什么?
答案 0 :(得分:0)
而不是
$xml = preg_replace_callback('/([-_A-Za-z*]+)\s*:\s*([^;}{]+)(?:;)/ie', function($matches) {
return "'<property name=\"'.trim('$matches[1]').'\" value=\"'.trim('$matches[2]').'\" />\n'";
}, $xml);
做
$xml = preg_replace_callback('/([-_A-Za-z*]+)\s*:\s*([^;}{]+)(?:;)/i', function($matches) {
return "'<property name=\"'.trim('$matches[1]').'\" value=\"'.trim('$matches[2]').'\" />\n'";
}, $xml);
我所做的就是删除e
../ie
快乐的编码......
答案 1 :(得分:0)
现在我对与此错误或其含义相关的任何内容一无所知,但我发现了解决此错误的内容:
来自https://www.drupal.org/project/views_slideshow/issues/1872616 他们在谈论修复这种神奇药水的地方:
我发现此文件中有四个位置需要更改。 这两个已经提到过,然后又有两次preg_replace 被使用了。对我来说,他们在186 + 277线附近。
在186和277我取代了
$vars['location'] => array( 'type' => preg_replace('/_(.?)/e',"strtoupper('$1')", $vars['settings']['type']), ),
与
$vars['location'] => array( 'type' => preg_replace_callback( // php5.x preg_replace_callback() method '/_(.?)/', function ($m) { return strtoupper($m[1]); }, $vars['settings']['type']), ),
所以我拿了原始代码:
// Loop through all the addons and call their methods if needed.
foreach ($addons as $addon_id => $addon_info) {
foreach ($addon_info['accepts'] as $imp_key => $imp_value) {
if (is_array($imp_value)) {
$methods[$imp_key][] = preg_replace('/_(.?)/e',"strtoupper('$1')", $addon_id);
}
else {
$methods[$imp_value][] = preg_replace('/_(.?)/e',"strtoupper('$1')", $addon_id);
}
}
}
然后把它煮熟并修复这些元素:
原件:
preg_replace('/_(.?)/e',"strtoupper('$1')", $vars),),
修正:
preg_replace_callback('/_(.?)/', function ($m) { return strtoupper($m[1]); }, $vars), ),
他们结合起来:
preg_replace_callback('/_(.?)/', function ($m) { return strtoupper($m[1]); }, $addon_id);
在我尝试使用的主题的背景下,成为:
// Loop through all the addons and call their methods if needed.
foreach ($addons as $addon_id => $addon_info) {
foreach ($addon_info['accepts'] as $imp_key => $imp_value) {
if (is_array($imp_value)) {
$methods[$imp_key][] = preg_replace_callback('/_(.?)/', function ($m) { return strtoupper($m[1]); }, $addon_id);
}
else {
$methods[$imp_value][] = preg_replace_callback('/_(.?)/',function ($m) { return strtoupper($m[1]); }, $addon_id);
}
}
}
我还会说,错误中给出了文件位置非常方便,这样我就可以修复一个不可知的问题。