如何在外部文件中执行php

时间:2012-07-04 07:33:01

标签: php constants

为什么这不起作用?

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

1 个答案:

答案 0 :(得分:3)

您未按原样包含该文件,而是在请求该文件时包含远程Web服务器的响应

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

更新:挖出手册中的参考资料:

  

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

那怎么办呢?

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