web-dev-qa-db-ja.com

JUri :: base()の問題、サブドメインを失う

これはバグである可能性がありますが、私は何かを見落としているに違いないと確信しています。

基本的にJUri::base()はサブドメインパスを削除しています。これはJoomlaステージング環境のサイトグラウンドにあるため、取得するドメインは_http://staging1.domain.com_ですが、代わりに_http://domain.com_を取得します。

テンプレートファイルでJUri::base()をテストしましたが、正しく機能しましたが、サイト用にビルドされたカスタムコンポーネントでは機能しませんでした。

以下にその使用方法を示します。

_$tmpFileName = md5($id.$Itemid.time()).'.pdf';
file_put_contents(
  JPATH_SITE.'/tmp/'.$tmpFileName,
  file_get_contents(
    JUri::base()
    .'index.php?option=com_component&view=finish&format=pdf&tmpl=component&data='
      .$id
      .'&Itemid='
      .$Itemid
  )
);
_

上記のコードは、生成されたPDFファイル(PDFビュー)を開き、それをtmpディレクトリに保存します。その後、スクリプトの後半に添付ファイルとして含めます(後から削除します)。

この領域で私がJUri::base()をメールに追加すると(送信されたメールからそれが何であるかを確認できます)、サブドメインが取り除かれ、この機能を実行するコントローラーへのリダイレクトが正しいことを確認しました、しかしこの関数だけでURLが不適切になる理由は私を逃れます(JRouteはうまく機能します)。

ファイルの内容を取得しようとしているサーバーであるため、JUri::base(true)を使用できません。URLがないと、ファイルを正しく取得できません。また、configuration.phpファイルの_$live_site_変数を確認しましたが、これが要因ではないことを確認しました。

ほとんどの場合、私が見落としている愚かなことです。おそらく私の目の前にあります。問題が見つかったら、更新していきます。これを引き起こす可能性のあるものはありますか?または誰かが似たようなものに遭遇しましたか?

バージョンは3.3.1です

更新:

より深く潜って、ここに私の発見があります。

  1. 私はそれが完全にJUri::base()だと思っていましたが、間違った変数を取得しているのを見てきましたが、その証拠はありません。結果は同じですが、ライブサイトから情報を取得していますステージングサイトではありません。
  2. 私はすべてのコードの実行をテストし、生成したURLに直接移動したときに生成されたpdfを確認します。これにより、PDFが完全に作成されますが、_file_get_contents_関数で完了すると完全に別のことを行います(URLが正しく、テストが機能しているように見えても、間違ったURLからPDFを取得します)。
  3. 私はサイトでhtpasswdを使用していることに気付きました、_file_get_contents_関数は認証する必要があるサーバー自体からURLに移動するため、最初にこのステージング環境でPDFを生成する方法がありませんでした場所。これにより、htpasswdのないライブサイトからPDFが生成されていることが確認できます。
7
Jordan Ramstad

設定ファイルで「live_site」が定義されていると思います。 Juri::base()のコードを見ると、次のifステートメントがあります。

if (trim($live_site) != '')
{
    // build base url from the live_site setting
    ...
}
else
{
    // build base url from current scheme, Host, and port
    ...
}

したがって、設定に「live_site」が設定されている場合、システムが現在のURLの代わりにそれを使用している可能性があります。

(私は実際にこの問題を個人的に見たことがなかったので、これもかなりうまくいかないかもしれませんが、有望に見えます。)

4
David Fritsch