« WordPress: PHPを5.6から7.3に... Main Anaconda: Spyderの配色スキー... »

WordPress: 非互換プラグインのPHP7対応

怒涛のめもめもリンク集 | WordPress: PHPを5.6から7.3に更新したら、プラグインエラー2件、本文表示失敗の続き)

PHP5をPHP7に更新を行なったらWordPressが動作しなくなった件について、チェックしてみると下記の2つのプラグインのPHP7への非互換性でWordPressの立ち上げ自体が動作しなくなっていた。

  • amazon_linkage 0.6.3||リンク切れ
  • php_hl_string 0.9.9||リンク切れ

php_hl_string については、下記記事も:

両方ともPHP7の非互換性に関するものだった。元リンクがないので、とりあえずPHP7で動作するように下記のように変更してみた。

amazon_linkage:

  • split()をexplode()へ変更。
diff -u old/wp-content/plugins/amazon_linkage/amazon.php wp-content/plugins/amazon_linkage/amazon.php
--- old/wp-content/plugins/amazon_linkage/amazon.php      2008-06-07 00:17:48.000000000 +0900
+++ wp-content/plugins/amazon_linkage/amazon.php       2019-11-15 04:33:46.038804505 +0900
@@ -4,7 +4,7 @@
 Plugin URI: http://note.openvista.jp/187/
 Description: ASIN を指定して Amazon.co.jp から個別商品の情報を取り出します
 Author: leva + ともかめ
-Version: 0.6.3
+Version: 0.6.3b
 Author URI: http://note.openvista.jp/187/
 Special Thanks: Tomokame, 1st created author (http://tomokame.moo.jp/)
 Special Thanks: Keith Devens.com (http://keithdevens.com/software/phpxml)
@@ -212,7 +212,7 @@
     for($i=0; $i<count($matches[1]); $i++){

       $matches[1][$i] = preg_replace("/[\- ]/", "", $matches[1][$i]);
-      list($this->asins_[$i], $this->types_[$i], $this->extras_[$i]) = split(",", $matches[1][$i]);
+      list($this->asins_[$i], $this->types_[$i], $this->extras_[$i]) = explode(",", $matches[1][$i]);

       $this->shadows_[$i] = true;

php_hl_string:

--- old/wp-content/plugins/phphlstring/php_hl_string.php      2019-11-25 05:34:19.887690704 +0900
+++ wp-content/plugins/phphlstring_0.9.9/php_hl_string.php   2019-11-25 05:28:47.537690790 +0900
@@ -3,7 +3,7 @@
 Plugin Name: PHP Highligh String
 Plugin URI: http://www.chameleonic.org/plugin/
 Description: PHPのコードを見やすく色分けしながら、行番号をつけます。使い方は、[code lang="php" -1]コード[/code ]のようにbbCode風の専用タグを書きます。
-Version: 0.9.9
+Version: 0.9.9b
 Author: chameleon
 Author URI: http://www.chameleonic.org/
 */
@@ -24,7 +24,7 @@
 */

 //PEARに依存する。
-$pear_dir = ABSPATH . 'wp-content/plugins/phphlstring/PEAR';
+$pear_dir = ABSPATH . 'wp-content/plugins/phphlstring_0.9.9/PEAR';

 if(is_dir($pear_dir))
     ini_set("include_path", ini_get("include_path") . PATH_SEPARATOR . $pear_dir);
@@ -88,9 +88,18 @@

     function first($content)
     {
-        $content = preg_replace('#\[code\](.*?)\[/code\]#sie', '$this->do_hlight(\'\\1\', false,    false,    $content);', $content);
-        $content = preg_replace('#\[code lang="(.*?)"\](.*?)\[/code\]#sie', '$this->do_hlight(\'\\2\',\'\\1\',false,$content);', $content);
-        $content = preg_replace('#\[code lang="(.*?)"\s*?-([0-9]*?)\](.*?)\[/code\]#sie', '$this->do_hlight(\'\\3\',\'\\1\',\'\\2\',$content);', $content);
+        $content = preg_replace_callback(
+                '#\[code\](.*?)\[/code\]#si',
+                function($m){return $this->do_hlight($m[1], false, false, $content);},
+                $content);
+        $content = preg_replace_callback(
+                 '#\[code lang="(.*?)"\](.*?)\[/code\]#si',
+                function($m){return $this->do_hlight($m[2],$m[1],false,$content);},
+                $content);
+        $content = preg_replace_callback(
+                 '#\[code lang="(.*?)"\s*?-([0-9]*?)\](.*?)\[/code\]#si',
+                function($m){return $this->do_hlight($m[3],$m[1],$m[2],$content);},
+                $content);
         return $content;
     }

@@ -107,7 +116,7 @@
     function do_hlight($txt, $lang = false,   $sl,    $content)
     {
        //fixed for PHP--------------------
-       $txt=eregi_replace('<?','<',$txt);
+       $txt=preg_replace('#<?#i','<',$txt);
        //---------------------------------
        if(!($sl==false)){
                $options = array('numbers' => HL_NUMBERS_LI,    'tabsize' => 4,);
@@ -142,9 +151,18 @@

     function first_pre($content)
     {
-        $content = preg_replace('#\[code\](.*?)\[/code\]#sie', '$this->do_blocks(\'\\1\',false, $content);', $content);
-        $content = preg_replace('#\[code lang=\\\"(.*?)\\\"\](.*?)\[/code\]#sie', '$this->do_blocks(\'\\2\', \'\\1\', $content);', $content);
-        $content = preg_replace('#\[code lang=\\\"(.*?)\\\"\s*?-([0-9]*?)\](.*?)\[/code\]#sie', '$this->do_blocks_extend(\'\\3\', \'\\1\',\'\\2\', $content);', $content);
+        $content = preg_replace_callback(
+                 '#\[code\](.*?)\[/code\]#si',
+                function($m){return $this->do_blocks($m[1],false, $content);},
+                $content);
+        $content = preg_replace_callback(
+                '#\[code lang=\\\"(.*?)\\\"\](.*?)\[/code\]#si',
+                function($m){return $this->do_blocks($m[2], $m[1], $content);},
+                $content);
+        $content = preg_replace_callback(
+                '#\[code lang=\\\"(.*?)\\\"\s*?-([0-9]*?)\](.*?)\[/code\]#si',
+                function($m){return $this->do_blocks_extend($m[3],$m[1],$m[2], $content);},
+                $content);
         return $content;
     }

--- old/wp-content/plugins/phphlstring/PEAR/Text/Highlighter.php     2005-08-14 20:36:08.000000000 +0900
+++ wp-content/plugins/phphlstring_0.9.9/PEAR/Text/Highlighter.php   2019-11-24 22:42:12.468698227 +0900
@@ -199,7 +199,7 @@
             return PEAR::raiseError('Highlighter for ' . $lang . ' not found');
         }

-        $obj =& new $classname($options);
+        $obj = new $classname($options);

         return $obj;
     }
@@ -353,7 +353,7 @@
     {
         if (!($this->_renderer)) {
             include_once('Text/Highlighter/Renderer/Html.php');
-            $this->_renderer =& new Text_Highlighter_Renderer_Html($this->_options);
+            $this->_renderer = new Text_Highlighter_Renderer_Html($this->_options);
         }
         $this->_str = $str;
         $this->_state = -1;

Leave a comment

Your comment