如何在外部文件中执行php

如何在外部文件中执行php,php,constants,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"); 当然,通过包含外部文件,php会运行,常量也会定义?您并没有像看到的那样包含文件,而是在请求该文件时包含远程web服务器的响应 也就

为什么这样不行

// 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");

当然,通过包含外部文件,php会运行,常量也会定义?

您并没有像看到的那样包含文件,而是在请求该文件时包含远程web服务器的响应

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

更新:从手册中找到参考:

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

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

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

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

更新:从手册中找到参考:

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

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

这很有道理!!!我觉得有点傻。。。那么我该如何运行代码呢?@AlexMorley Finch:你没有。如果可以,其他任何人都可以这样做并查看您的密码。@亚历克斯莫利·芬奇:除非远程服务器愿意向全世界公开源代码,否则不会。在这种情况下,将所有内容都放在一个文本文件中,然后
eval
它。感谢您的清理,我将接受您的建议,而不是实施此操作,这是有意义的。谢谢:)这很有道理!!!我觉得有点傻。。。那么我该如何运行代码呢?@AlexMorley Finch:你没有。如果可以,其他任何人都可以这样做并查看您的密码。@亚历克斯莫利·芬奇:除非远程服务器愿意向全世界公开源代码,否则不会。在这种情况下,将所有内容都放在一个文本文件中,然后
eval
它。感谢您的清理,我将接受您的建议,而不是实施此操作,这是有意义的。谢谢:)
// 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