web-dev-qa-db-ja.com

外部PHPライブラリおよびdefined( '_ JEXEC')を使用するか、死にます。

プラグインでhatemile-for-phpライブラリ( https://github.com/hatemile/hatemile-for-php )を使用したい。

このライブラリはこの1つのプラグイン内でのみ使用しているため、ライブラリフォルダーではなくプラグインフォルダーに含めました。

さて、行を追加しなければならなかったのだろうか

defined('_JEXEC') or die;

各外部ライブラリのPHPファイルの先頭に。

Joomlaライブラリフォルダー(たとえば、/ libraries/phpass/PasswordHash.php)といくつかの人気のあるJoomla拡張機能を調べました。サードパーティがあることに気づきましたPHPファイルは行なしで含まれています

defined('_JEXEC') or die;

ファイルの上部。

Joomla!で外部ライブラリを使用するのは正しい方法ですか?

2
astridx

それは同時に良い質問と悪い質問です。なぜですか?多くのJoomlaユーザー/スーパーユーザーにとって質問は「エキゾチック」に聞こえるので、良いです。なぜこの短いコード行がJoomlaのコカ・コーラのように至る所にあるのでしょうか。 :)「誰も」それがなぜそんなにうまくいくのか理解していません。

defined('_JEXEC') or die('gooo to hell!');

Joomlaのドキュメンテーションでは、この行が何であるか、なぜそこにあるのか、いつそれを使用するのか、いつ使用しないのかが非常に明確に説明されているため、問題は悪いです。したがって、Joomla stackexchangeの定期的で知識のあるユーザーは、公式のJoomla文書をクリックするだけで誰かが2分以内にそれを読む必要があるため、この種の質問に答えたくありません。なぜここにコピーするのですか?ただし、ここでは情報をここに入れておきましょう。

_JEXECは、Joomla!のルートにあるindex.phpファイルで通常定義される定数です。インスタンスであり、Joomlaへの安全なエントリポイントをマークするために使用されます。定義済みまたはダイチェックは、_JEXECがファイルに到達するための経路で定義されていることを確認します

JEXECチェックの一般的な規則は、PHPファイルが適切に動作するために別のファイルに依存しているかどうかです。通常、JEXECチェックなしでファイルに直接アクセスし、PHPエラーが発生した場合(PHPエラーレポートがデフォルトでエラーを表示するように設定されていると想定)、欠落している変数、関数、オブジェクトなどについてファイルを保護する必要があります。

一部のファイルは、このチェックから保護する必要はありません。それらは、外部依存関係のないファイル(単純なクラスやコードのビットなど)である場合もあれば、Joomla!内になくても動作できる外部ファイルである場合もあります。この例には、完全に自己完結型のTinyMCEのGZip化されたJavascriptジェネレーターが含まれます。

それは非常に明確な説明です(ドキュメントからコピー)上記に基づいて:

質問で言及されたファイルの上にjexecを置くことはしません。

;)

ドキュメントへのリンク:https://docs.joomla.org/JEXEC

それはエキゾチックな質問であるだけでなく、明らかにあらゆる種類の厄介な幽霊がいつでもどこでもその中にいる良いホラー主題です。しかし、もしこれなら、どうすればいいでしょう... :)そのため、人が偏執的なタイプのような場合は、どのような場合でも、ファイルと機能を調査して何かを理解していなくても、すべてのファイルの上に_jexecチェックを含めることをお勧めします。それは確かだ。 (私はOSMに、これらの最後の欠落した文章をドキュメントに正式に追加するよう依頼します)。 ;

これは問題の一部ではありませんでしたが、重要でした。

拡張機能が公開用に作成され、多くのJoomla Webサイトで配布および使用される場合は、すべてのPHPファイルの上部で_jexec定義のチェックを使用する必要があります。それは「偏執狂になりたくない」法律です。

2
Zollie

Joomla World Conference 2016のJisse Reitsmaによる名前空間のプレゼンテーションに関する優れたビデオがあります。23分のあたりから、コードでJexecを使用しないことで他のユーザーと共有できる状況を最終的に説明する例が示されています。 Wordpress/Magentoのようなプラットフォーム https://www.youtube.com/watch?v=Dyx05GR4Bms Wordpress Joomla 4に付属するフレーバーといくつかの新しい機能は、Jexecがすべてのファイルに含まれるという期待が緩和される可能性があると思います。@ astridxの質問に戻るために、Jexecを外部ライブラリに追加しないでください。 Joomlaコード。

1
Irata