プロジェクト

全般

プロフィール

Backport(バックポート) #2163

OpenPNE.ymlのbase_url にパスが含まれない場合に、デバッグモードでwarningメッセージが表示される場合があ

isao sanoほぼ13年前に追加. 12年以上前に更新.

ステータス:
Fixed(完了)
優先度:
High(高め)
担当者:
対象バージョン:
開始日:
2011-06-09
期日:
進捗率:

100%


説明

症状

OpenPNE.yml の base_url に、 http://sns.example.com と末尾にスラッシュをつけずに設定した場合、デバッグモード実行していると warning が表示される箇所があります。より厳密には、末尾にスラッシュがない場合ではなく、URLにパスが含まれない場合です。

再現する箇所の例

環境

  • 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 を参照)。


関連するチケット

関連している OpenPNE 3 - Bug(バグ) #1577: OpenPNE.ymlのbase_url にパスが含まれない場合に、デバッグモードでwarningメッセージが表示される場合がある Fixed(完了) 2010-09-10

関係しているリビジョン

リビジョン 3235f108 (差分)
Maki Takahashiほぼ13年前に追加

(fixes #2163, BP from #1577) fixed opApplicationConfiguration::getAppRouting() because a warning occurred by it when the base_url's last character is not '/'

リビジョン 58a8667f (差分)
Shogo Kawaharaほぼ13年前に追加

(fixes #2163, BP from #1577) fixed opApplicationConfiguration::getAppRouting() correctly to get path information

リビジョン 486a4749 (差分)
Maki Takahashiほぼ13年前に追加

(fixes #2163, BP from #1577) fixed opApplicationConfiguration::getAppRouting() because a warning occurred by it when the base_url's last character is not '/'

リビジョン 58099c9d (差分)
Shogo Kawaharaほぼ13年前に追加

(fixes #2163, BP from #1577) fixed opApplicationConfiguration::getAppRouting() correctly to get path information

履歴

#1 Kousuke Ebiharaほぼ13年前に更新

  • 対象バージョンOpenPNE3.6beta11 から OpenPNE3.6beta12 に変更

親チケットが「テスト待ち」「完了」でないものをすべて beta12 以降での対応とします。

#2 Shingo Yamadaほぼ13年前に更新

  • 担当者Shingo Yamada から Maki Takahashi に変更

#3 Maki Takahashiほぼ13年前に更新

  • ステータスNew(新規) から Accepted(着手) に変更

#4 匿名ユーザー がほぼ13年前に更新

  • ステータスAccepted(着手) から Pending Review(レビュー待ち) に変更
  • 進捗率0 から 50 に変更

更新履歴 3235f1084d6deaceb3257231c65c3931edde530c で適用されました。

#5 Kousuke Ebiharaほぼ13年前に更新

  • ステータスPending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
  • 進捗率50 から 70 に変更

#6 Shogo Kawaharaほぼ13年前に更新

  • 題名OpenPNE.ymlのbase_urlで末尾に「/」がないURLを設定した場合に、デバッグモードでwarningメッセージが表示される場合がある から OpenPNE.ymlのbase_url にパスが含まれない場合に、デバッグモードでwarningメッセージが表示される場合があ に変更

#7 Shogo Kawaharaほぼ13年前に更新

親チケット差し戻しのため、こちらのチケットも差し戻したいです。
( 私には権限がないです。 )

#8 Shingo Yamadaほぼ13年前に更新

  • ステータスPending Testing(テスト待ち) から Pending Fixing(修正待ち) に変更

#9 Maki Takahashiほぼ13年前に更新

  • ステータスPending Fixing(修正待ち) から Accepted(着手) に変更

親チケットの修正分を取り込みます

#10 Shogo Kawaharaほぼ13年前に更新

  • ステータスAccepted(着手) から Pending Review(レビュー待ち) に変更
  • 進捗率70 から 50 に変更

更新履歴 58a8667f576c0e90593116bf835f93c0c3b30278 で適用されました。

#11 Shogo Kawaharaほぼ13年前に更新

更新履歴 58099c9d3c1d947651566edbec3a0d363b610187 で適用されました。

#12 匿名ユーザー がほぼ13年前に更新

更新履歴 486a47496fd810a7391f5bf99c24461e3b65494a で適用されました。

#13 Kousuke Ebiharaほぼ13年前に更新

  • ステータスPending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
  • 進捗率50 から 70 に変更

#14 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 が表示されていること」を確認し、修正後のコードではこの警告が表示されなくなったことを確認しました。

完了とします。

#15 Yuma Sakata12年以上前に更新

テストOKです。

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