【问题标题】:Including a PHP file of another server包含另一个服务器的 PHP 文件
【发布时间】:2018-04-11 03:37:36
【问题描述】:

我正在尝试通过 PHP 在两台服务器之间进行通信。可以说,我的本地主机上有一个 PHP 文件“a.php”,远程服务器上有另一个 PHP 文件“b.php”。我想在 a.php 中包含 b.php。我试图通过包含方法通过提供remore服务器“http://ip/b.php”的完整路径来做到这一点,但没有任何反应。 实际上,我想从 a.php 文件运行一部分脚本,然后我想与 b.php 文件通信,然后返回到 a.php 文件。 请指导我如何做到这一点。我知道有人问过类似的问题,并且我尝试使用这些技术解决此问题,但徒劳无功。

谢谢

【问题讨论】:

  • “远程文件”只能通过 HTTP 请求“包含”(除非您以某种方式通过 Internet 将远程磁盘安装为本地磁盘;甚至不要去那里)。如果您向http://ip/b.php 发送HTTP 请求,会发生什么? PHP 文件由远程服务器解释,你只得到它的结果,就像你在浏览器中访问它一样。除非您将远程服务器重新配置为 解释 PHP 并且只输出原始 PHP 代码。在这种情况下,PHP 代码将在公共互联网上清晰可见。甚至不要让我开始延迟。总体:坏主意。
  • 其实我想从a.php文件中调用b.php文件。请指导我如何实现这一目标?
  • 这到底是什么意思?你希望结果是什么?
  • 我想从本地文件调用 b.php 文件,因为我想运行用 b.php 文件编写的代码并将响应返回到 a.php 文件中
  • 希望你现在明白这个场景

标签: php include


【解决方案1】:

不,此设置在大多数 Web 服务器 (php.ini) 中默认禁用/不允许,因此出于安全原因,您不能使用包含来包含来自远程地址的文件。

如果您仍然希望允许包含远程文件,则必须在 php.ini 中将指令 allow_url_include 设置为 On

但从面向安全的角度来看,这又是一种不好的做法;因此,它通常被禁用(实际上我从未见过它启用)

如果你想读取远程文件的内容,你可以使用 file_get_contents 函数,但是这将作为纯 HTML 标记代码返回,不会有任何服务器端代码。

including php file from another server with php

另一种解决方案是

  1. 将文件保存为文本文件,从中删除。
  2. 使用 file_get_contents 访问文件

例子

http://ip/b.php - 将此文件另存为 b.txt

<?php 
    $filedata = file_get_contents('http://ip/b.txt');
    eval ("?>$filedata");
?>

【讨论】:

  • 我也打开了allow_url_include,但没有成功
  • 那么,我必须在 b.php 中使用 file_get_contents 吗?其实我想从 a.php 文件中调用 b.php 文件
  • 我已经用解决方案更新了答案。但这不是正确的方法。我更喜欢使用一些参数从远程服务器打印 json 响应的最佳方式。
  • 是否需要先将文件另存为txt?不能是php吗?
  • 我只是建议了一种方法来做到这一点。它可以是 php 文件。包含 php 文件时出现什么错误?
【解决方案2】:

尽管这是不安全和不好的做法,但您始终可以使用 .htaccess(关闭 php_flag 引擎)关闭特定目录的 php。

然后,您的文件将直接作为文本文件提供给知道 url 的人。这样您就可以通过 allow_url_include 或 Mad Angle 所说的 get_file_contets 将它们包含在内。

但无论哪种方式 - 这是个坏主意。所以你可以试试科学:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-15
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-17
    • 1970-01-01
    相关资源
    最近更新 更多