Task(タスク) #4112
未完了PHP7対応のための修正を行う
0%
説明
2017/01 時点の OpenPNE3 は、全ての安定版および master ブランチにおいて PHP7 では動作しない状態となっている (#3879)
調査 (完了)¶
PHP7 への移行にあたって以下の調査を行う。
- OpenPNE3 が PHP7 で動かない原因
- OpenPNE3 を PHP7 で動かすためにはどのような修正が必要か (機能を削る必要があるか)
修正¶
- 最低動作環境を PHP 5.4 以上とする
- PEAR 1.10.3 へのアップデート
- LExpress/symfony1 への移行
- Net_UserAgent_Mobile をアップデート
- ただしパッケージとしては未リリースのため GitHub から直接ソースコードを取得する必要がある
- https://github.com/iteman/net-useragent-mobile
Youichi Kimura さんがほぼ8年前に更新
現状の 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
Youichi Kimura さんがほぼ8年前に更新
- PEAR のバージョンを 1.10.0 以上にアップデート
- PEAR 1.10.0 with PHP7 support is out | PEAR Blog
- 2015-10-17 にリリースされている 1.10.1 が現時点の最新
ここまでで 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
- Net_UserAgent_Mobile をアップデート
- ただしパッケージとしては未リリースのため GitHub から直接ソースコードを取得する必要がある
- https://github.com/iteman/net-useragent-mobile
Doctrine_Query_Abstract::_preQuery()
メソッドを修正する- メソッドへの動的な呼び出しの評価順が変更されたことによるもの
- LExpress/doctrine1 で行われている修正をコピー
sfWebResponse::normalizeHeaderName
メソッドを修正する- PCRE の
/e
修飾子は PHP 7.0.0 で既に廃止されている - LExpress/symfony1 で行われている修正をコピー
- PCRE の
ここまでで pc_frontend, pc_backend ともにログイン可能な状態になる。
ただし、PCRE の /e
修飾子の廃止により I18N 周りに不具合が生じているほか、dev 環境では E_NOTICE, E_WARNING エラーが多数出力されている。
Youichi Kimura さんがほぼ8年前に更新
現時点で個人的に考えている PHP7 対応案
開発版、または次の安定版 (OpenPNE 3.10?) に向けて¶
- LExpress/symfony1 への移行
- PEAR 1.10.1 へのアップデート
- 動作環境は PHP 5.4.0 以上
- upstream の更新が止まっている Net_UserAgent_Mobile について
- Net_UserAgent_Mobile を現時点の最新版に更新した上で独自にメンテナンスする?
- mobile_frontend を廃止する? (これを選ぶなら開発版のうちに決める必要がある)
安定版 (OpenPNE 3.8) および旧安定版 (OpenPNE 3.6) について¶
最低動作要件の変更を認めるかどうかで難易度が変わる
- LExpress/symfony1 における修正点を 部分的に 取り込み?
- 例えば https://github.com/LExpress/symfony1/commit/b90e1254 は PHP 5.3.0 以上を前提とした (無名関数を使用している) コードになっているが、PHP 5.2 でも動くように手を加えるべきか?
- PEAR 1.10.1 へのアップデート?
- 最低動作環境を PHP 5.4.0 以上に引き上げることになる
- 確認できた分だけでも修正の必要な箇所が多いため独自に修正するのは現実的ではない
- Net_UserAgent_Mobile をアップデート
- https://github.com/iteman/net-useragent-mobile で公開されている未リリースのソースコード
- 明記されていないが、PHP 5.2 でも動く構文のみで書かれているように見える
Youichi Kimura さんが7年以上前に更新
個人的に考えている 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 について
- Net_UserAgent_Mobile を現時点の最新版に更新した上で独自にメンテナンスする?
- mobile_frontend を廃止する? (これを選ぶなら開発版のうちに決める必要がある)
Youichi Kimura さんが7年以上前に更新
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?) に考える
Youichi Kimura さんが7年以上前に更新
- 題名 を PHP7対応についての調査 から PHP7対応のための修正を行う に変更
- 説明 を更新 (差分)
- 対象バージョン を OpenPNE 3.9.0 にセット
当チケットを PHP7 対応に向けた修正の親チケットとして継続します