プロジェクト

全般

プロフィール

Task(タスク) #4112

PHP7対応のための修正を行う

Youichi Kimura12ヶ月前に追加. 約2ヶ月前に更新.

ステータス:
Accepted(着手)
優先度:
Normal(通常)
担当者:
対象バージョン:
開始日:
2017-03-27
期日:
進捗率:

0%


説明

2017/01 時点の OpenPNE3 は、全ての安定版および master ブランチにおいて PHP7 では動作しない状態となっている (#3879)

調査 (完了)

PHP7 への移行にあたって以下の調査を行う。

  • OpenPNE3 が PHP7 で動かない原因
  • OpenPNE3 を PHP7 で動かすためにはどのような修正が必要か (機能を削る必要があるか)

修正


子チケット

Enhancement(機能追加・改善) #4176: PEARパッケージのアップデートRejected(差し戻し)Youichi Kimura

Enhancement(機能追加・改善) #4177: 最低動作環境をPHP5.4以上に変更するNew(新規)

Enhancement(機能追加・改善) #4178: LExpress/symfony1 に移行するRejected(差し戻し)Youichi Kimura

Enhancement(機能追加・改善) #4179: SimplePie 1.4.3 へのアップデートPending Testing(テスト待ち)Youichi Kimura

Bug(バグ) #4187: Class 'sfPearRest13' not found のエラーによりプラグインのインストールに失敗するNew(新規)Youichi Kimura


関連するチケット

関連している OpenPNE 3 - Task(タスク) #4172: 新masterブランチへの移行 Fixed(完了) 2017-03-15

履歴

#1 Youichi Kimura10ヶ月前に更新

現状の OpenPNE を PHP 5.6 で動かした場合に発生する E_STRICT 等のエラーについて opIgnoreKnownErrorsPlugin にまとめています。
https://github.com/upsilon/opIgnoreKnownErrorsPlugin/blob/e13ef7e9/config/known_errors.yml

このうち、Assigning the return value of new by reference is deprecated のエラーが発生している箇所については PHP7 では全て Parse Error になります。

例:

$ php7.0 symfony openpne:version
Core versions:
 OpenPNE                       3.8.23-dev
 symfony                       1.4.13
OpenPNE plugin versions:
PHP Parse error:  syntax error, unexpected 'new' (T_NEW) in /home/upsilon/git/openpne3/master/lib/vendor/PEAR/PEAR/Config.php on line 650

#2 Youichi Kimura10ヶ月前に更新

ここまでで openpne:version タスクは (E_WARNING 等は出るものの) 動く状態になる:

$ php symfony openpne:version
PHP Warning:  ob_start(): function '' not found or invalid function name in /vagrant/lib/vendor/symfony/lib/config/sfApplicationConfiguration.class.php on line 155

Warning: ob_start(): function '' not found or invalid function name in /vagrant/lib/vendor/symfony/lib/config/sfApplicationConfiguration.class.php on line 155
PHP Notice:  ob_start(): failed to create buffer in /vagrant/lib/vendor/symfony/lib/config/sfApplicationConfiguration.class.php on line 155

Notice: ob_start(): failed to create buffer in /vagrant/lib/vendor/symfony/lib/config/sfApplicationConfiguration.class.php on line 155
Core versions:
 OpenPNE                       3.9.0-dev
 symfony                       1.4.13
OpenPNE plugin versions:
 opAuthMailAddressPlugin       1.3.5
PHP Warning:  Declaration of sfPearRest::downloadHttp($url, $lastmodified = NULL, $accept = false) should be compatible with PEAR_REST::downloadHttp($url, $lastmodified = NULL, $accept = false, $channel = false) in /vagrant/lib/vendor/symfony/lib/plugin/sfPearRest.class.php on line 30

Warning: Declaration of sfPearRest::downloadHttp($url, $lastmodified = NULL, $accept = false) should be compatible with PEAR_REST::downloadHttp($url, $lastmodified = NULL, $accept = false, $channel = false) in /vagrant/lib/vendor/symfony/lib/plugin/sfPearRest.class.php on line 30
PHP Notice:  Only variables should be passed by reference in /vagrant/lib/vendor/symfony/lib/plugin/sfSymfonyPluginManager.class.php on line 186

Notice: Only variables should be passed by reference in /vagrant/lib/vendor/symfony/lib/plugin/sfSymfonyPluginManager.class.php on line 186
PHP Notice:  Only variables should be passed by reference in /vagrant/lib/plugin/opPluginManager.class.php on line 213

Notice: Only variables should be passed by reference in /vagrant/lib/plugin/opPluginManager.class.php on line 213
 opSkinBasicPlugin             unknown

ここまでで pc_frontend, pc_backend ともにログイン可能な状態になる。

ただし、PCRE の /e 修飾子の廃止により I18N 周りに不具合が生じているほか、dev 環境では E_NOTICE, E_WARNING エラーが多数出力されている。

#3 Youichi Kimura10ヶ月前に更新

現時点で個人的に考えている PHP7 対応案

開発版、または次の安定版 (OpenPNE 3.10?) に向けて

  • LExpress/symfony1 への移行
  • PEAR 1.10.1 へのアップデート
    • 動作環境は PHP 5.4.0 以上
  • upstream の更新が止まっている Net_UserAgent_Mobile について
    1. Net_UserAgent_Mobile を現時点の最新版に更新した上で独自にメンテナンスする?
    2. mobile_frontend を廃止する? (これを選ぶなら開発版のうちに決める必要がある)

安定版 (OpenPNE 3.8) および旧安定版 (OpenPNE 3.6) について

最低動作要件の変更を認めるかどうかで難易度が変わる

#4 Youichi Kimura10ヶ月前に更新

個人的に考えている PHP7 対応案その2

安定版 (OpenPNE 3.8) および旧安定版 (OpenPNE 3.6) について

サポート対象を PHP 5.6.x までとする(PHP7 対応を行わない)
#4112-3 の対応案は、次期安定版へのつなぎとしては負担が大きすぎるため。

開発版、または次の安定版 (OpenPNE 3.10?) に向けて

PHP 7 以降をサポート対象に追加し、PHP 5.4.0 未満は外す (ここは #4112-3 と同じ)

  • LExpress/symfony1 への移行
  • PEAR 1.10.1 へのアップデート
    • 動作環境は PHP 5.4.0 以上
  • upstream の更新が止まっている Net_UserAgent_Mobile について
    1. Net_UserAgent_Mobile を現時点の最新版に更新した上で独自にメンテナンスする?
    2. mobile_frontend を廃止する? (これを選ぶなら開発版のうちに決める必要がある)

#5 Youichi Kimura10ヶ月前に更新

3/3 の MTG で決定した内容

3/9 のリリース後に行う:

  • master ブランチの置き換え (#4172)
    • master => old-master にブランチ名を変更する
    • OpenPNE-3.8.23 から分岐して master ブランチを作成

それ以降:

  • OpenPNE 3.10.x では、PHP7 対応に必要なもの以外で 3.8 と非互換なコミットは行わない (3.8 からの移行を行いやすくするため)
  • LExpress/symfony1 に移行する
  • Net_UserAgent_Mobile => 残す
    • User-Agent 判定、携帯個体識別番号の取得に使用する
    • symfony や PEAR と比べて置き換える負担は大きくないかも
    • → mobile_fronend を削除するかどうかは、さらに次の安定版 (3.12.x?) に考える

#6 Youichi Kimura9ヶ月前に更新

#7 Youichi Kimura9ヶ月前に更新

  • 題名PHP7対応についての調査 から PHP7対応のための修正を行う に変更
  • 説明 を更新 (diff)
  • 対象バージョンOpenPNE 3.9.0 にセット

当チケットを PHP7 対応に向けた修正の親チケットとして継続します

#8 Youichi Kimura9ヶ月前に更新

  • 説明 を更新 (diff)

#9 Youichi Kimura約2ヶ月前に更新

2017/10/24 時点の master ブランチにおける既知の問題:

  • #4176-9: Net_IPv4 クラス内で、PHP7 で廃止された関数が使用されている
    • 実際にエラーが発生するかは未確認
  • #4178-3: symfony に対して未適用のパッチが存在する
    • 過去に修正されたいくつかの不具合が再発している可能性がある (#3716, #3629, #2408)
  • #4187: 一部のプラグインで opPlugin:install タスクの実行が失敗する
    • plugins ディレクトリに直接プラグインを追加する場合には影響はない

他の形式にエクスポート: Atom PDF