Backport(バックポート) #2163
完了OpenPNE.ymlのbase_url にパスが含まれない場合に、デバッグモードでwarningメッセージが表示される場合があ
100%
説明
症状¶
OpenPNE.yml の base_url に、 http://sns.example.com と末尾にスラッシュをつけずに設定した場合、デバッグモード実行していると warning が表示される箇所があります。より厳密には、末尾にスラッシュがない場合ではなく、URLにパスが含まれない場合です。
再現する箇所の例¶
- http://sns.example.com/pc_backend_dev.php
- メール通知(app_url_for()が含まれているもの)
環境¶
- PHP 5.3.2 on Windows(XAMPP)
- PHP 5.3.2 on Ubuntu 10.04
原因¶
opApplicationConfiguration::getAppRouting() 内で parse_url($url) の結果 $parts を使っている箇所があり、そこで $parts['path'] が定義されているかを確認せずに参照している。
http://sns.example.com のようなパスが含まれないURLの場合、 parse_url() が返す連想配列に path というキーは含まれない。
修正内容¶
- lib/config/opApplicationConfiguration.class.php getAppRouting() メソッド内
586- $url = sfConfig::get('op_base_url'); 587- if ('http://example.com' !== $url) 588- { 589- $parts = parse_url($url); 590- $options['context'] = array( 591- 'prefix' => $this->getAppScriptName($application, sfConfig::get('sf_environment'), $parts['path'], $isNoScriptName), 592- 'host' => $parts['host'], 593- ); 594- }
591 行目で $parts['path'] が存在する前提として参照しているため、この直前で $parts['path'] を明示的に定義する(存在しなければデフォルト値を与える)。
ここで与えるべきデフォルト値は null か空文字列がよいと思われるが、より適切な値があればそれを与える。
補足¶
$parts['path'] のデフォルト値については #1577:note-9 - #1577:note-10 の考察を以て「空文字列」とすることにした。
また、このチケットでは問題とされていないが、 $parts['host'] の値についても定義されていない場合を考慮するようにした。
更に、このチケットでの修正に併せて #1577:note-18 で言及されている問題も解消した(内容は #1577:note-16 を参照)。
Kousuke Ebihara さんが13年以上前に更新
- 対象バージョン を OpenPNE3.6beta11 から OpenPNE3.6beta12 に変更
親チケットが「テスト待ち」「完了」でないものをすべて beta12 以降での対応とします。
匿名ユーザー さんが13年以上前に更新
- ステータス を Accepted(着手) から Pending Review(レビュー待ち) に変更
- 進捗率 を 0 から 50 に変更
更新履歴 3235f1084d6deaceb3257231c65c3931edde530c で適用されました。
Kousuke Ebihara さんが13年以上前に更新
- ステータス を Pending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
- 進捗率 を 50 から 70 に変更
Shogo Kawahara さんが13年以上前に更新
- 題名 を OpenPNE.ymlのbase_urlで末尾に「/」がないURLを設定した場合に、デバッグモードでwarningメッセージが表示される場合がある から OpenPNE.ymlのbase_url にパスが含まれない場合に、デバッグモードでwarningメッセージが表示される場合があ に変更
Shogo Kawahara さんが13年以上前に更新
- ステータス を Accepted(着手) から Pending Review(レビュー待ち) に変更
- 進捗率 を 70 から 50 に変更
更新履歴 58a8667f576c0e90593116bf835f93c0c3b30278 で適用されました。
Kousuke Ebihara さんが13年以上前に更新
- ステータス を Pending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
- 進捗率 を 50 から 70 に変更
Minoru Takai さんが13年以上前に更新
- ステータス を Pending Testing(テスト待ち) から Fixed(完了) に変更
- 進捗率 を 70 から 100 に変更
コードチェック¶
親チケットで修正内容に疑問がありましたが、それについて親チケットでのコミット内容が妥当だと確認できています。このチケットでは親チケットと同一の修正が取り込まれていることが確認できているのでOKです。
動作テスト¶
親チケット(master:3.7.0)と同様にテストを行いました。
この問題は、ソースコードの修正さえ見れば改善されているか否かは明らかであり、動作テストの重点はコードチェックに置かれます。ソースコードの修正は妥当だと判断できており、このチケットへの対応はOKと判断できます。
ついでにですが、 http://sns.example.com/pc_backend_dev.php のようなURLとなるSNS(テスト環境)において、修正前のコードでは「未定義の $parts['path'] を参照している旨の warning が表示されていること」を確認し、修正後のコードではこの警告が表示されなくなったことを確認しました。
完了とします。