-1

サイトのルートを構成ファイルの定数として定義しました。

define('SITE_ROOT', 'http://folder/site/home');

次に、インクルード文字列で定数を使用しようとしましたが、うまくいかないようです:

<? include (SITE_ROOT.'/incs/header.php'); ?>

しかし、それを使用して画像を含めると、正常に機能します。

<img src="<?= SITE_ROOT ?>/img/banner.png"/>

私は何が欠けていますか?

4

1 に答える 1

2

これincludeは、URL ではなくローカル ファイルシステム パスで動作するためです。適切な構成で HTTP を介してファイルを含めることを有効にしたとしても (これは一般的に悪い考えであり、大きなセキュリティ リスクです)、別の問題が残ります。

代わりに、構成ファイルで別の定数を定義します。

define('DIR_ROOT', dirname(__FILE__)); // DIR_ROOT points to where the config is

その後

<? include (DIR_ROOT.'/incs/header.php'); ?>

余談ですが、エスケープされていないデータを HTML 内に埋め込んではいけません。あなたの<img>例は代わりに次のように読むべきです

<img src="<?= htmlspecialchars(SITE_ROOT); ?>/img/banner.png"/>

htmlspecialcharsの最初の 3 つの引数は常に明示的に指定する必要があるため、上記はまだ正しく記述されていないことに注意してください。これは面倒なので、実際には、適切な短い名前を持つ独自の関数で呼び出しをラップします (これは、1 文字の名前が良いアイデアである例外的なケースの 1 つです)。

于 2013-05-29T10:15:21.267 に答える