代码之家  ›  专栏  ›  技术社区  ›  Desolator

包含来自另一个服务器的PHP文件

  •  25
  • Desolator  · 技术社区  · 16 年前

    我在不同的服务器上有两个PHP文件,一个位于 http://www.mysite.com/main.php 另一个 http://www.sample.com/includeThis.php .

    我想包括第一个文件中的第二个文件。

    第二个文件的内容如下:

    <?php
    $foo = "this is data from file one";
    

    第一个文件:

    <?php
    include "http://www.sample.com/includeThis.php";
    echo $foo;
    

    我有什么办法可以做到吗?

    6 回复  |  直到 14 年前
        1
  •  33
  •   Sarfraz    16 年前

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

    如果你还想允许 包含 在远程文件中, allow_url_include 必须设置为 On 在PHPini

    但同样,从安全性的角度来看,这是一个糟糕的实践;因此,它通常是被禁用的(实际上,我从未见过它被启用)。

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

        2
  •  3
  •   Pekka    15 年前

    在阅读了你的评论之后——你在评论中说你想做这件事作为一种复制保护手段——我的回答是强调的, 算了吧 . 这不是版权保护的工作原理。

    你唯一能做的就是 include() 从其他地方获取要在本地解释器上解释的源代码 . 这很容易破解:恶意客户只需 echo() 提取的代码。

    远程(在服务器上)执行远程脚本对您没有帮助,因为该脚本的状态(变量、函数…) 不会出现在您调用它的脚本中。

    您可以选择:

    • 编译/编码/模糊脚本,可能需要一个特定的PHP模块来执行(关于这方面的许多问题,所以)

    • 创建在服务器上运行并执行请求的操作的真实Web服务(例如使用SOAP)

    不过,就其价值而言,我个人并不购买,也不建议客户购买需要“打电话回家”才能工作的编码脚本和脚本。我相信通过严格的许可协议来保护您的产品(这会吓唬商业客户购买您的产品,因为偷窃被抓的风险太高。)

        3
  •  2
  •   antmeeks    14 年前

    我想知道手术室是否为自己找到了解决办法。据我所知,实现这一点的唯一方法是让您的所有客户机帐户与您要包含的脚本位于同一服务器上-我做了类似的事情:

    /路径\u到\u myserver\u root/httpdocs/clients/client01/wwwroot/scripta.php /路径_to_myserver_root/httpdocs/clients/client02/wwwroot/scripta.php 等。。。。

    然后: /路径\u到\u myserver\u root/privatefiles/myapp/scriptb.php

    wwwroot是每个客户机域指向的位置。

    scripta.php有一些业务逻辑,然后包含scriptb.php,用于上面完整路径的函数:

    需要('/path_to_myserver_root/privatefiles/myapp/scriptb.php')

    scriptb.php驻留在服务器上一个私有的受保护目录中,HTTP无法访问,客户端无法访问。

    现在请注意,我这样做的原因是为了在多个帐户之间保持版本一致性,而不是从我的客户机中保留一些专有的神奇的PHP代码——但是我想它可以实现这个目的。

    Meh,YMMV。

        4
  •  1
  •   SoLoGHoST    16 年前

    使用 file_get_contents ,若要打开该文件,请将其附加到第二个文件,如下所示:

    $secondFile = file_get_contents('http://www.sample.com/includeThis.php');
    file_put_contents('your_file', $secondFile, FILE_APPEND);
    

    如果你想把它放在你的文件的末尾,这就可以了。而不仅仅是在你的文件上做一个包含。

    不管怎样,就像我说的,在我看来,这是危险和危险的,尤其是如果你不确定它里面的内容。

    此外,您的_文件需要是实际的服务器路径,而不是URL。

        5
  •  0
  •   Martin Milan    16 年前

    当您试图按照您的建议跨域访问时,实际上并没有包含一个已准备就绪的文件—过程是不同的。机器需要通过HTTP返回文件,这不是include语句的全部内容。

    另外,如果您使用的是共享主机,PHP通常被配置为防止您离开自己的域。

    如果您不受此限制,一种解决方案可能是使用PHP从另一个服务器复制文件的副本,然后将其包含在您的域中。另一个Apporach可能是编写一个小的“部署”脚本,在您进行更改时将其复制到需要的任何地方…

    希望这有帮助…

    马丁

        6
  •  0
  •   Your Common Sense    16 年前

    将第一个重命名为.txt
    然后再想一想,你确定你需要跨域包括

    推荐文章