我正在编写一系列与第三方API交互的函数,这些API将包含在其他PHP脚本中。这些第三方API中的大多数都使用基于令牌的身份验证,因此我想在函数中存储这些令牌,但我想知道防止在包含的文件中利用这些函数的最佳做法是什么。
例如,在名为~/public_html/includes/functions.php
的脚本中,我将定义一些使用cURL调用公共API的函数,然后从API返回某种响应。然后,在我的应用程序中,我将包含~/public_html/includes/functions.php
并调用函数与第三方API进行交互。
我担心的是,如果其他人在他们的脚本中包含http://www.example.com/includes/functions.php
,并开始调用我的函数来使用我的凭据进行API调用? functions.php应该住在其他地方,可能在~/public_html
目录之外吗?或者我可以使用UNIX权限来阻止除我自己的应用之外的任何人包含functions.php
脚本?
答案 0 :(得分:1)
如果其他人包括,我的担心是什么 http://www.example.com/includes/functions.php在他们的剧本中,和 开始调用我的函数来使用我的凭据进行API调用? 应该将functions.php放在其他地方,也许是在其他地方 〜/ public_html目录?或许我可以使用UNIX权限来防止 除了我自己的应用程序以外的任何人都包含functions.php脚本吗?
你在这里混淆了很多东西。长话短说:你不应该担心。我详细解释了如何使用网址in this answer。以下是您的摘要。
具体而言,虽然可以使用include
来包含完整的网址,例如include('http://www.google.com/');
,但您从include
获得的唯一内容是页面的最终呈现内容。 100%没有函数,类,变量,字符串,常量或PHP代码内部包含的任何内容。或者非常清楚地解释in the PHP documentation you are linking to;强调我的:
如果在PHP中启用了“URL include wrappers”,则可以指定该文件 使用URL包含(通过HTTP或其他支持的包装器 - 请参阅 支持协议列表的协议和包装器)而不是 本地路径名。如果目标服务器将目标文件解释为PHP 代码,变量可以使用URL请求传递给包含的文件 与HTTP GET一起使用的字符串。 严格来说,这并不严格 包含文件并让它继承父文件的东西 变量范围;该脚本实际上是在远程服务器上运行的 然后将结果包含在本地脚本中。
因此,您无法以您描述的方式远程包含凭据或任何PHP内部。可能发生的唯一方法是在本地包含~/public_html/includes/functions.php
。那是PHP内部暴露的时候。
或者更好的理解方法:当您通过http://
或https://
请求PHP文件时,会对其进行解析&通过Apache中的PHP模块处理。所以它只返回最终产品 - 如果有任何帖子经常由echo
声明传达。
但是当您通过本地文件系统包含文件时,Apache中的PHP模块不会解析它。它只是原始代码。这就是你如何使用PHP代码内部包含的函数,类,变量,字符串,常量和任何东西。