これはバグである可能性がありますが、私は何かを見落としているに違いないと確信しています。
基本的に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がないと、ファイルを正しく取得できません。また$live_site
、configuration.phpファイルで変数を確認しましたが、これが要因ではないことを確認しました。
ほとんどの場合、私が見落としている愚かなことである可能性が高く、おそらく私の目の前にあります。調査結果が出たら、質問を更新します。これを引き起こす可能性のあるものはありますか?または誰かが似たようなことに遭遇しましたか?
バージョンは3.3.1です
更新:
より深く潜り、ここに私の発見があります。
- 私はそれが
JUri::base()
完全に間違っていると考えていましたが、間違った変数を取得しているのを見てきましたが、証拠はありません。結果は同じですが、ステージングサイトではなくライブサイトから情報を取得しています。 - 私はすべてのコードの実行をテストし、生成したURLに直接移動したときに生成されたpdfを確認します。PDFは完全に作成されますが、
file_get_contents
関数を実行すると、完全に異なる処理を実行します(間違った場所からpdfを取得します) URLは正しいようですが、テストは機能しました)。 - 私はサイトでhtpasswdを使用していることに気付きました。
file_get_contents
関数はサーバー自体からURLにアクセスするため、認証する必要があるため、このステージング環境で最初にPDFを生成する方法はありませんでした。これにより、htpasswdのないライブサイトからPDFが生成されていることが確認できます。