0

为什么这不起作用?

// 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 并定义常量?

4

1 回答 1

3

您没有包括您看到的文件,而是包括远程 Web 服务器在请求该文件时的响应

也就是说,远程 Web 服务器看到对 的请求db-con.php,将其加载,执行代码(在其自己的本地进程中定义常量)并将输出返回给您(可能为空,因为代码不回显任何内容)。因此,最终结果与您包含一个空文件相同。

更新:从手册中挖出参考:

如果在 PHP 中启用了“URL fopen 包装器”(它们在默认配置中),您可以使用 URL 指定要包含的文件(通过 HTTP 或其他支持的包装器 - 请参阅支持的协议和包装器以获取协议列表)而不是本地路径名。如果目标服务器将目标文件解释为 PHP 代码,则可以使用与 HTTP GET 一起使用的 URL 请求字符串将变量传递给包含的文件。严格来说,这与包含文件并使其继承父文件的变量范围不同。该脚本实际上正在远程服务器上运行,然后将结果包含到本地脚本中。

那么该怎么做呢?

好吧,包含来自远程服务器的代码是您不应该真正考虑做的事情(尽管有一些方法可以实现,但这是一个非常糟糕的主意)。在任何情况下,如果没有远程服务器的明确合作,您将无法做到这一点(否则任何人都可以包含其他任何人的配置文件并用于get_defined_constants获取密码)。如果您这样做,其他任何人都可以按照相同的步骤获取您的密码。你不希望这种情况发生。

于 2012-07-04T07:35:01.833 回答