为什么这不起作用?
// File hosted on `example.com`
// db-con.php
<?php
define("DB_HOST" , "host");
define("DB_NAME" , "name");
define("DB_USER" , "user");
define("DB_PASS" , "pass");
-
// File hosted on `another-example.com`
// index.php
<?php
include 'http://example.com/db-con.php';
echo DB_HOST;
-
// output
Notice: Use of undefined constant DB_HOST - assumed 'DB_HOST' in C:\Users\Alex\Dropbox\Shared\Web\htdocs\BASE_TEMPLATE\index.php on line 14
当然通过包含外部文件,运行php,并定义常量?
答案 0 :(得分:3)
您未按原样包含该文件,而是在请求该文件时包含远程Web服务器的响应。
也就是说,远程Web服务器看到db-con.php
的请求,加载它,执行代码(在其自己的本地进程中定义常量)并将输出返回给您(可能是空的,因为代码不回应任何东西)。因此,最终结果与包含空文件的结果相同。
更新:挖出手册中的参考资料:
如果&#34; URL fopen wrappers&#34;在PHP中启用(它们在 默认配置),您可以指定要包含的文件 URL(通过HTTP或其他受支持的包装器 - 请参阅支持的协议 和Wrappers用于协议列表)而不是本地路径名。如果 目标服务器将目标文件解释为PHP代码,变量 可以使用所使用的URL请求字符串将其传递给包含的文件 使用HTTP GET。严格来说,这并不是一回事 包括文件并让它继承父文件的变量 范围;该脚本实际上是在远程服务器上运行的 然后将结果包含在本地脚本中。
好吧,包括来自远程服务器的代码是你不应该想到的(虽然有办法实现它,但这是一个非常糟糕的主意)。在任何情况下,如果没有远程服务器的明确合作,您将无法做到这一点(否则任何人都可以包含任何其他人的配置文件并使用get_defined_constants
来获取密码)。如果您这样做,其他任何人都可以按照相同的步骤操作并获取您的密码。你不希望这种情况发生。