使用包括跨域包含PHP代码 - 失败

时间:2010-06-23 11:55:17

标签: php include cross-domain common-files

我有一系列网站都托管在具有不同域的同一台服务器上。我想托管一些常见的PHP scrips,然后能够从其他域调用这些。

我对我的php有点新鲜,所以请原谅代码尝试 - 我尝试过以下的迭代,可以尝试帮助你理解我的目标!

来自php标签......

include('http://www.mydomain/common_include.php?show_section=$section');

$show_section = $_GET['show_section'];
include('http://www.mydomain/common_include.php');//Then $show_section would be available to the included file/cod

最后,我尝试了包含一个函数的include,然后尝试从父脚本运行包含。

  • 我更喜欢保留这个PHP 定向而不是得到 涉及服务器(文件 系统等(但我可以改变 权限等)
  • 我可以但不希望仅将相同的库分别上传到每个域
  • 我知道PHP在服务器上运行,因此将脚本包含在另一台服务器上可能会有问题。

提前致谢。

EDIT 好的 - 我认为这是不好的做法,所以不会这样做....非常感谢快速的答案。 但是有没有其他建议如何在所有网站上显示这个基本的PHP应用程序,而不必将文件添加到每个网站的根目录?只是为了防止大规模的脚本重复......(大声思考从数据库或任何其他解决方案调用脚本) 再次感谢您的帮助

5 个答案:

答案 0 :(得分:3)

如果您可以将远程PHP文件包含到您自己的项目中,那将是一个巨大的安全风险。在服务器将PHP发送给您之前,PHP会被解析,因此跨域包含只包含脚本生成的输出。包含PHP文件以便可以执行它们的唯一方法是通过本地文件系统。

如果你看看PHP.net关于include的文档,你可以找到:

  

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

这几乎解释了整个事情。

答案 1 :(得分:1)

原始问题的根源似乎是海报关注在多个站点上使用PHP脚本或插件,然后每次需要更新时都要执行繁重的任务。虽然尝试跨站点包含PHP文件是一个坏主意,但是将脚本结构化为尽可能自包含是一个更好的计划。保持整个插件包含在一个目录中....并确保您的函数调用尽可能好地形成 - 干净,命名良好的函数,统一的命名约定以及每个函数需要的参数的深思熟虑的计划。避免使用全局变量。

理想情况下,每次需要更新所有位置的插件/脚本时,您都应该有一个非常简单的时间。您甚至可以设置一个自动化过程,将包含插件的新目录上传到每个站点,替换旧站点。并且代码中的函数调用应该很少发生变化。

如果您的脚本足够大,您可能会实施自动更新过程,就像更新版本的Wordpress一样。单击一个按钮,它会自动更新。在过去,更新十几个运行Wordpress的网站(例如)是一个巨大的痛苦。

答案 2 :(得分:0)

这是非常糟糕的做法 实际上你不包括PHP而只包括HTML代码。

包含文件,而不是网址。可以使用同一台服务器 只需对这些文件使用绝对路径即可。

答案 3 :(得分:0)

除了这是一个不好的做法,你应该先检查一下是否允许URLs,如果你真的想这样做。

但是,如果所有需要使用该脚本的站点,您可以将脚本放在执行php的用户可访问的目录中,并将该dir添加到php.ini include_path属性({{3 }})

(或者您可以创建一个php扩展并将其加载为扩展名)

答案 4 :(得分:0)

如果你在该服务器上拥有root权限,你可以使用来自filesystem root的绝对路径,但是大多数托管都不允许你这样做。