Bug(バグ) #205
完了ZendFrameworkがあるとインストールに失敗する
100%
説明
以前のチケットは http://trac.openpne.jp/ticket/4183 です
http://sns.openpne.jp/?m=pc&a=page_fh_diary&target_c_diary_id=21238より転記 {{{ ./symfony openpne:install にて Is it OK to start this task? (y/n) y PHP Notice: Undefined variable: config in /var/www/html/OpenPNE-3.1.1/lib/task/opPluginSyncTask.class.php on line 100 File "Zend/Validate/Hostname/Jp.php" does not exist or class "Zend_Validate_Hostname_Jp" was not found in the file 実際、ZendからJp.phpをコピーしてもインストは完了されない。 }}}
Hidenori Goto さんが約14年前に更新
この現象が再現したので調べてみました。
環境¶
- Windows7 64bit
- XAMPP for Windows 1.7.3
- XAMPP付属PHP 5.3.1
- XAMPP付属ZendFramework 1.9.6
回避方法¶
- XAMPP配下のPEARをインクルードパスから外す
- XAMPP配下のZendFrameworkのJp.phpのファイル名を、OpenPNEインストール時のみ一時的に変更する
原因詳細¶
OpenPNE3.6beta3に付属するZendFrameworkは古いバージョンのようで、Zend_Validate_Hostnameの処理方式が異なるようです。
- OpenPNE3.6beta3に付属のもの→Jp.phpなどが単体のクラスになっていて、クラスをロードする形になっている(Jp.phpは付属しない)
- XAMPP付属など新しいバージョンのもの→Jp.phpなどは配列データを返すのみになっている
システムのインクルードパスにZendFrameworkが存在しない場合は問題にならないのですが、WindowsでXAMPP環境を使っている場合はチケットタイトルのようにXAMPP環境のZendFrameworkが存在します。
OpenPNE付属のZendFrameworkのホスト名チェック処理(plugins.openpne.jpをバリデートする処理)で、以下のような流れでエラーになっていました。
- Zend_Validate_Hostname_Jpに対応するファイルが読み込み可能か?→true
- Zend_Validate_Hostname_Jpクラスをロード→クラスじゃないのでエラー
提案¶
システムのインクルードパスにPEARが事前に設定されている場合は、衝突の可能性があるので、OpenPNE側で対処した方がよいのかもしれません。
Kousuke Ebihara さんが約14年前に更新
- 優先度 を Normal(通常) から High(高め) に変更
- 対象バージョン を OpenPNE 3.7.0 にセット
ZendFramework では半公式ではありますが PEAR チャンネルサーバ経由でのインストールがおこなえるようにもなっています。
http://pear.zfcampus.org/
報告にあるような XAMPP 環境でのインストールはやや特殊かもしれませんが、前述の PEAR チャンネルサーバの利用や Fedora 等のディストリビューションが提供するパッケージを利用して、 ZendFramework を、たとえば OpenPNE ではない他のシステム用にインストールするというような運用は充分考えられることです。
3.6.0 までに確実に対処しておきたいところです。
Kousuke Ebihara さんが約14年前に更新
- ステータス を New(新規) から Accepted(着手) に変更
- 担当者 を Kousuke Ebihara にセット
- 互換性を壊すことを厭わないのであればデフォルトの include_path の設定を外すのが一番簡単。 OpenPNE では依存するライブラリはすべて同梱し、確実にそのライブラリを使う方針なので、そこに漏れがなければ問題にならない
- OpenPNE の lib/vendor/Zend/ をインクルードパスに設定する前に ZendFramework のライブラリが読み込める場合はそっちを優先して使う(各ライブラリのバージョンの差異によって挙動が異なる場合、そのライブラリを使用している箇所の動作保証ができなくなる)
- 同梱している Zend_Framework をバージョンアップするのが現実的に無難な解決策だが、影響範囲を考えると安定版やベータ版には取り込めなくなってしまう
- Zend_Loader で制御できないかどうか?
- もしくは独自のオートローダーを書いてハンドリングできないかどうか?
Kousuke Ebihara さんが約14年前に更新
次の方針で実装します。
- OpenPNE 3.7.0 : 同梱する ZendFramework の最新の安定版にアップデートします
- OpenPNE 3.6 以前 : ZendFramework の最新の安定版に存在する Zend/Validate/Hostname/*.php に対応するファイルが同梱している ZendFramework に存在していなければ、最新の安定版で配布されている Zend/Validate/Hostname/*.php とほぼ近い挙動になるようなクラスファイルを追加するという暫定的な対処をおこないます
Kousuke Ebihara さんが約14年前に更新
- ステータス を Accepted(着手) から Pending Review(レビュー待ち) に変更
- 進捗率 を 0 から 50 に変更
更新履歴 821abff4e86ab2fe50d592f5fe82209e14b653d7 で適用されました。
Hidenori Goto さんが約14年前に更新
以下のXAMPP環境で、症状が改善されていることを確認しました。
- Windows7 64bit
- XAMPP for Windows 1.7.3
- XAMPP付属PHP 5.3.1
- XAMPP付属ZendFramework 1.9.6
- php.iniはXAMPPデフォルトのまま
確認内容¶
- 821abff4e86ab2fe50d5 を含む最新版をgit clone
- OpenPNE-3.6beta4タグをチェックアウトして、インストールが失敗することを確認
- masterブランチに戻り、インストールが成功することを確認
Rimpei Ogawa さんが約14年前に更新
- ステータス を Pending Review(レビュー待ち) から Rejected(差し戻し) に変更
NOTICE ファイルの記述で "Zend Framework" を "ZendFramework" に変更しているのは意図的なものでしょうか。公式ページで "ZendFramework" とスペースなしで記載されている箇所が見つからなかったのでスペース付きの方が適切ではないかと思います。
また、このチケットとは直接関係ありませんが、NOTICE ファイルの symfony バージョンおよび Copyright の年号が更新されていない問題を発見しました。
Kousuke Ebihara さんが13年以上前に更新
- ステータス を Rejected(差し戻し) から Pending Review(レビュー待ち) に変更
更新履歴 882728cee6be00016dedbe3e64e417db1c34c7cf で適用されました。
Naoya Tozuka さんが13年以上前に更新
- ステータス を Pending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
- 進捗率 を 50 から 70 に変更
修正確認しました。OKです。
(NOTICE ファイルの symfony バージョンおよび Copyright の年号が更新されていない問題については #1588 で)
Naoya Tozuka さんが13年以上前に更新
- 題名 を ZendFramworkがあるとインストールに失敗する から Zend Frameworkがあるとインストールに失敗する に変更
Kousuke Ebihara さんが13年以上前に更新
- 題名 を Zend Frameworkがあるとインストールに失敗する から ZendFrameworkがあるとインストールに失敗する に変更
Fumie Toyooka さんが約13年前に更新
- ステータス を Pending Testing(テスト待ち) から Fixed(完了) に変更
- 進捗率 を 70 から 100 に変更
テストOKです。