PHP常量包含在内

时间:2013-05-29 10:10:45

标签: php include constants

我已将网站的根目录定义为配置文件中的常量:

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

然后我尝试在include字符串中使用常量,但它似乎不起作用:

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

但是当我使用它来包含图像时,它可以正常工作:

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

我错过了什么?

1 个答案:

答案 0 :(得分: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的前三个参数。而且由于这很麻烦,实际上你可以使用自己的函数来包装对它的调用,它也有一个很好的短名称(这是一个特殊情况,其中一个字符的名字是个好主意)。