#author("2021-11-27T01:57:00+09:00;2014-09-01T00:25:40+09:00","","")
* PHP 5.4 対応版リリースの提案 [#hda33a00]

- ページ: [[BugTrack2]]
- 投稿者: [[umorigu]]
- 優先順位: 重要
- 状態: 完了
- カテゴリー: その他
- 投稿日: 2014-06-02 (月) 07:22:01
- バージョン: 1.4.7_notb (to 1.5.0 (仮))

** PHP5関連 [#r93289ef]
- [[BugTrack/632]] PHP5で動作しない
-- [[BugTrack2/324]] PHP 5.3 でエラーが出るようになった
-- [[BugTrack2/349]] php-5.4.0で動作させる対応
-- など

** メッセージ [#z632a0b0]
こんにちは。umoriguと申します。いつもPukiWikiを利用させていただいております。
標準状態でPHP 5.4, 5.5 上で動作するリリース((バージョンは仮に 1.5.0 としています))を提案します。

業務でPukiWikiを利用している立場では、スパム対策などの今後予定されている新機能はそれほど必要ではありませんが、
PHP 5.4 への対応は喫緊の課題になっています。
日本中でPukiWikiの5.4対応を待ち望まれている方は多いと考え、この提案を行っています。

CVS HEAD (Main branch) からリリース済み 1.4.7_notb へ、一部変更のバックポートを行うアプローチをとりました。


現在の PukiWiki 最新リリースである 1.4.7_notb は、標準状態で PHP 5.4 で[[動作しません>BugTrack2/349]]。
[[BugTrack2/349]] において既に議論されてる通り、以下の3点の変更を行うことでPHP5.4に対応できます。

- (a) hex2bin がPHP組み込み関数に追加されたことに伴う Fatal: Cannot redeclare hex2bin() エラー
-- (a') (対応) hex2bin 関数のリネーム
- (b) htmlspecialchars() の挙動が変更されたことに伴う EUC_JP 版で日本語が表示されない問題
-- (b') (対応) [CVS版で解決済み] $encoding オプションを指定するPukiWiki独自関数 htmlsc への置き換え
- (c) Call-time pass-by-reference が廃止されたことに伴うエラー
-- (c') (対応) [CVS版で解決済み] Call-time pass-by-reference を使わないようにロジックを変更

ここで、2006年6月以降の pukiwiki CVS Main branch への 452 commitをすべて調査・解析しました。
([[BugTrack2/353/Appendix]] に解析結果を示します。)


この結果、リリース済みの 1.4.7_notb に対して以下の変更のみを適用することで、(b)(c)を解決し、PHP 5.4 上で動作することがわかりました。


- (b') の対応を行ったコミット
| |Commit ID|Date|Author|Log message|h
|440|429ae9e|2011-01-26 00:01:01|henoheno|htmlsc(): Just sugar for htmlspecialchars(), and a foundation|
| | |>|>|URL: [[sourceforge.jp/users/umorigu/pf/pukiwiki15/scm/commits/429ae9efab6d8d5e224f56ecf668126d2ce632df>cvs:../../../../../users/umorigu/pf/pukiwiki15/scm/commits/429ae9efab6d8d5e224f56ecf668126d2ce632df#]]|
- (c') の対応を行ったコミット
| |Commit ID|Date|Author|Log message|h
|25|70a7d4c|2006-08-06 22:17:31|henoheno|BugTrack2/182: With php.ini: allow_call_time_pass_reference = Off  'Warning: Cal|
| | |>|>|URL: [[sourceforge.jp/users/umorigu/pf/pukiwiki15/scm/commits/70a7d4cf1d3b69e216b85e8e1f88916e84874987>cvs:../../../../../users/umorigu/pf/pukiwiki15/scm/commits/70a7d4cf1d3b69e216b85e8e1f88916e84874987#]]|
|56|ea1c908|2006-10-03 22:33:36|henoheno|BugTrack2/182: With php.ini: allow_call_time_pass_reference = Off  'Warning: Cal|
| | |>|>|URL: [[sourceforge.jp/users/umorigu/pf/pukiwiki15/scm/commits/ea1c908cc851ac15f1bd6874760434e6a9e339ce>cvs:../../../../../users/umorigu/pf/pukiwiki15/scm/commits/ea1c908cc851ac15f1bd6874760434e6a9e339ce#]]|
|57|249cd0d|2006-10-03 23:16:31|henoheno|A little cleanup: * Remove unused variable * Use intval() to say why it's safe w|
| | |>|>|URL: [[sourceforge.jp/users/umorigu/pf/pukiwiki15/scm/commits/249cd0dfa66426b1e2c49f89dc16cf59f94800b8>cvs:../../../../../users/umorigu/pf/pukiwiki15/scm/commits/249cd0dfa66426b1e2c49f89dc16cf59f94800b8#]]|
|74|6446c63|2006-10-28 23:35:42|henoheno|Warning: Call-time pass-by-reference has been deprecated|
| | |>|>|URL: [[sourceforge.jp/users/umorigu/pf/pukiwiki15/scm/commits/6446c637da17cdd0407240ca21fdcba9fb5b2655>cvs:../../../../../users/umorigu/pf/pukiwiki15/scm/commits/6446c637da17cdd0407240ca21fdcba9fb5b2655#]]|
|128|f03df94|2007-02-10 15:21:53|henoheno|Warning: Call-time pass-by-reference has been deprecated|
| | |>|>|URL: [[sourceforge.jp/users/umorigu/pf/pukiwiki15/scm/commits/f03df9417161e4e0feb2a0b93d9b4e54ba687c59>cvs:../../../../../users/umorigu/pf/pukiwiki15/scm/commits/f03df9417161e4e0feb2a0b93d9b4e54ba687c59#]]|



CVS版において変更がされていない(a)については、hex2bin 関数のリネームを行う必要があります。



実際に 1.4.7_notb 時点のソース(タグ: r1_4_7_notb) に対して上記の変更のみを取り込んだものを、以下(外部リンク: sourceforge.jp 内)に置きました。ブランチ名 branch_r1_5 としています。

URL: [[sourceforge.jp/users/umorigu/pf/pukiwiki15/scm/commits?branch=branch_r1_5>cvs:../../../../../users/umorigu/pf/pukiwiki15/scm/commits?branch=branch_r1_5#]]


*** リポジトリ構成に対する説明: [#l20a8658]

- PukiWiki リポジトリはCVSですが、今回の提案を行うため、gitリポジトリに変換しています。(sourceforge.jp の仕組み上、個人リポジトリはgitのみ作成できます)
- 1.4.7 リリース以降の CVS Main branch への変更をすべて branch_r1_6 としています。
- 今回提案リリース向けの変更を branch_r1_5 としています。


※ブランチ名は変更できますので、大きな意味はありません。

*** 変更点の説明 [#z47630e3]


| |Commit ID|Commit Date|Log message|説明|h
|1|bbfe5cf|2006-06-12 00:35:54|This commit was manufactured by cvs2svn to create tag 'r1_4_7_notb'.|r1_4_7_notb のタグを表す|
| | | |>|URL: [[sourceforge.jp/users/umorigu/pf/pukiwiki15/scm/commits/bbfe5cf82d48ca5dadfb5884314b8b24a56c3d02>cvs:../../../../../users/umorigu/pf/pukiwiki15/scm/commits/bbfe5cf82d48ca5dadfb5884314b8b24a56c3d02#]]|
|2|c954cdf|2014-06-02 05:50:11|Rename 'hex2bin' to 'pkwk_hex2bin' because of PHP 5.4+ compatibility|hex2bin を pkwk_hex2bin にリネーム -- (a')の対応|
| | | |>|URL: [[sourceforge.jp/users/umorigu/pf/pukiwiki15/scm/commits/c954cdf4b7987b663180558b380dd792e9852799>cvs:../../../../../users/umorigu/pf/pukiwiki15/scm/commits/c954cdf4b7987b663180558b380dd792e9852799#]]|
|3|e23ccc3|2014-06-02 05:57:45|htmlsc(): Just sugar for htmlspecialchars(), and a foundation|429ae9e の変更を適用 -- (b')の対応|
| | | |>|URL: [[sourceforge.jp/users/umorigu/pf/pukiwiki15/scm/commits/e23ccc3b3b1095360e5555a547471bfc303e49cc>cvs:../../../../../users/umorigu/pf/pukiwiki15/scm/commits/e23ccc3b3b1095360e5555a547471bfc303e49cc#]]|
|4|e72eb89|2014-06-02 06:01:07|Replace 'htmlspecialchars' by 'htmlsc'|429ae9e で対応しきれなかったもの(CVS版ではロジックの変更により存在していない部分など)に対する htmlsc 置換  -- (b')の対応|
| | | |>|URL: [[sourceforge.jp/users/umorigu/pf/pukiwiki15/scm/commits/e72eb8997265134c2ecc95173e2570d99e7cbcee>cvs:../../../../../users/umorigu/pf/pukiwiki15/scm/commits/e72eb8997265134c2ecc95173e2570d99e7cbcee#]]|
|5|e607ffc|2014-06-02 06:04:09|BugTrack2/343: Use ENT_COMPAT at htmlspecialchars|BugTrack2/343 への対応。1.4.7 との互換性を維持し、1.4.7からの変更を最小にするため、CVS版とは異なるアプローチ(ENT_COMPATの利用)を行った  -- (b')の対応|
| | | |>|URL: [[sourceforge.jp/users/umorigu/pf/pukiwiki15/scm/commits/e607ffc613ca96889719a12bbc7b24548858909d>cvs:../../../../../users/umorigu/pf/pukiwiki15/scm/commits/e607ffc613ca96889719a12bbc7b24548858909d#]]|
|6|88fb8d6|2014-06-02 06:08:37|BugTrack2/182: With php.ini: allow_call_time_pass_reference = Off|70a7d4c の変更を適用 -- (c')の対応|
| | | |>|URL: [[sourceforge.jp/users/umorigu/pf/pukiwiki15/scm/commits/88fb8d60d0b5914fc8ba2c26a4d71b9cfd5ee77f>cvs:../../../../../users/umorigu/pf/pukiwiki15/scm/commits/88fb8d60d0b5914fc8ba2c26a4d71b9cfd5ee77f#]]|
|7|9342619|2014-06-02 06:13:12|BugTrack2/182: With php.ini: allow_call_time_pass_reference = Off|429ae9e の変更を適用 -- (c')の対応|
| | | |>|URL: [[sourceforge.jp/users/umorigu/pf/pukiwiki15/scm/commits/9342619eb24468640fd8c9fad540ca5c96f1c79f>cvs:../../../../../users/umorigu/pf/pukiwiki15/scm/commits/9342619eb24468640fd8c9fad540ca5c96f1c79f#]]|
|8|7300ab9|2014-06-02 06:20:29|A little cleanup:|249cd0d の変更を適用 -- (c')の対応|
| | | |>|URL: [[sourceforge.jp/users/umorigu/pf/pukiwiki15/scm/commits/7300ab9e8a0931e6e5742152b7e6cc5adc98b59a>cvs:../../../../../users/umorigu/pf/pukiwiki15/scm/commits/7300ab9e8a0931e6e5742152b7e6cc5adc98b59a#]]|
|9|e95e519|2014-06-02 06:28:39|Warning: Call-time pass-by-reference has been deprecated|f03df94 の変更を適用 -- (c')の対応|
| | | |>|URL: [[sourceforge.jp/users/umorigu/pf/pukiwiki15/scm/commits/e95e5191051c389c6f64d0cafcef31a896a62dba>cvs:../../../../../users/umorigu/pf/pukiwiki15/scm/commits/e95e5191051c389c6f64d0cafcef31a896a62dba#]]|



PukiWiki CVS版の変更は非常に注意深く行われており(関連の変更のみによって各コミットが構成されており、
無関係な変更が含まれていない)、変更点の抽出および1.4.7リリース版への適用は比較的容易に行うことができました。
このような運用を行われている開発者の方々に感謝します。


*** 提案ソースコードの取得 [#j37c1140]

提案の変更を適用したソースコードはgitがインストール済みの場合、

 $ git clone -b branch_r1_5 git ://git.pf.sourceforge.jp/gitroot/u/um/umorigu/pukiwiki15.git
 $ git clone -b branch_r1_5 git://git.pf.sourceforge.jp/gitroot/u/um/umorigu/pukiwiki15.git

※"git" と "://git" の間のスペースを除いてください。(PukiWiki-dev URL投稿制限のため)

とすることで取得できます。

これが最終版というわけではなく、実際のリリースに向けてはリリース番号などの変更が必要であろうと考えています。
一方、1.4.7_notb からの変更点の説明は最小限ですむと考えています。

またこの変更自体に致命的なバグが存在することも考えられます。
指摘があれば際は速やかに修正する用意があります。


*** パッチファイル [#u1262894]

CVS版にそのまま適用するため、変更点をまとめた patch ファイルを作成しました。
以下の場所からダウンロードできます。

[[sourceforge.jp/users/umorigu/pf/pukiwiki15/files/>cvs:../../../../../users/umorigu/pf/pukiwiki15/files/#]] - paches ディレクトリ


|		|	Patch file	|	Note	|	Commit	|h
|	1	|	pw15.1.hex2bin.patch	|	hex2bin リネーム	|	c954cdf 	|
|	2	|	pw15.2.htmlsc.patch	|	htmlsc 利用	|	e23ccc3, e72eb89, e607ffc	|
|	3	|	pw15.3.passbyrefcall.patch	|	Call-time pass by reference 削除	|	88fb8d6, 9342619, 7300ab9, e95e519	|
|	4	|	pw15.4.r15.patch	|	バージョンを 1.5.0 に	|	8bb75c8	|




*** 今後のリリース・マイルストーンについて(案) [#d3fc4b15]

PHP5.4, 5.5対応版については、1.5.0として、バージョン番号を変更するのが妥当と考えます。
// 2006年当時ではPHP4の対応は必須でしたが、現状新規に構築するシステムで
// PHP4を採用することは考えづらいことから、サポートPHPバージョンをPHP5.x として
ただし、1.5.xについては、branch_r1_6 からのバックポートを含む、バグ修正などの
メンテナンスリリースという位置づけです。

スパム対策など、現在 CVS Main branch (および branch_r1_4_7) に追加された新機能は
重要なもので、PukiWikiの価値をさらに高めるものになると考えます。
これらは、引き続き branch_r1_6 のようなブランチで開発を続け、
完成したところで将来の version 1.6 または version 2.0 としてリリースすることを提案します。
これらは当初予想されていたよりもはるかに大きく重要な機能であり、完成すれば単体でメジャーバージョンをつけるに値する価値のあるものであると認識しています。


*** まとめ [#pac70429]

- PukiWikiのPHP5.4,5.5対応は非常に望まれていることであり、公式にリリースを行ってほしい。
- そしてPHP5.4対応はは既に広く使われ、非常に安定している 1.4.7_notb ベースで行うのが望ましい。
- この対応(CVS HEADからのバックポート)を行った。 [[sourceforge.jp/users/umorigu/pf/pukiwiki15/scm/commits?branch=branch_r1_5>cvs:../../../../../users/umorigu/pf/pukiwiki15/scm/commits?branch=branch_r1_5#]]
- 現在の CVS Main branch は将来のリリース(v1.6 or v2.0)に向けた開発ブランチとする。


--------
- PukiWikiが将来も安定して動くような状況になって欲しい・・・・・・。 -- [[singo]] &new{2014-06-26 (木) 20:52:22};
- 社内の情報共有に使用しています。PHP5.5対応感謝です。 --  &new{2014-07-10 (木) 13:52:55};
- PHP5.4.29 下で問題なく動作を確認しました。レンタルサーバの PHP5.2 サポートが切られたら他システムに移行するしかないと思っていましたので、助かりました。ありがとうございます。 --  &new{2014-07-14 (月) 11:56:28};
- (b') の対応を行ったコミット で提示されているURLのリンク先が変?Commit IDが429ae9eなのにリンクの出だしが /88fb8d6 ですし。あと、(c') の対応を行ったコミット にある429ae9e とURLの対応も正しいのかどうかが判らない --  &new{2014-07-15 (火) 02:01:50};
- Commit ID 429ae9eのリンク先, 変更点 429ae9e のCommit ID が間違ってました。修正しました。ご指摘ありがとうございます -- [[umorigu]] &new{2014-07-15 (火) 02:53:22};

- [[開発日記/2014-07-19]](1.5.0 リリース - umorigu)にて対応版がリリースされたので、ひとまず完了に --  &new{2014-09-01 (月) 00:25:39};

//#comment

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Site admin: PukiWiki Development Team

PukiWiki 1.5.4+ © 2001-2022 PukiWiki Development Team. Powered by PHP 8.2.12. HTML convert time: 0.073 sec.

SourceForge