2016-06-28 9 views
1

私はPHP7で動作するようにSocialEngineを移植しています。preg_replaceをpreg_replace_callbackに置き換えてもまだ失敗する

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); 
私は次のエラーを取得するデフォルトはOn

をインストール

これでエラーが表示されます:

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> 

これは私にとって間違っていますか?

+1

あなたは[this](http://stackoverflow.com/a/21334984/5447994)にチェックを入れましたか? – Thamilan

+1

エラーメッセージ:「/ e修飾子はもはやサポートされていません。」のように、このフラグを削除すると動作します。 – Toto

答えて

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でハッピーコーディングを削除することでした...

0

今、私にはわかりませんこのエラーやそれが意味することに関連するものについては何でも、ここではwh彼らはこの魔法のポーションを固定話しているhttps://www.drupal.org/project/views_slideshow/issues/1872616 から

::私はそれを修正することが判明で

I found that there were four places in this file that needed changing. The two already mentioned and then two more times where preg_replace was used. For me they were around lines 186 + 277.

At 186 and 277 I replaced

$vars['location'] => array(
     'type' => preg_replace('/_(.?)/e',"strtoupper('$1')", $vars['settings']['type']), 
    ), 

with

$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); 
    } 
    } 
} 

私はまた、ファイルの場所がエラーで与えられていることを非常に便利であると言い、そうでなければわかっていない問題を解決することができました。

関連する問題