2010-06-23 124 views
1

我有一系列的网站都托管在同一台服务器上有不同的域名。我想托管一些常见的PHP脚本,然后能够从其他域调用这些脚本。使用包含跨域的包含php代码 - 失败

我有点新鲜的我的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 

最后我试图在包括包含一个函数,然后试图运行从父脚本包括拉动。

  • 我更希望把这个PHP 导向而不是涉及服务器(文件中获取 系统等(但我可以改变 权限等)
  • 我可以,但宁愿不只是上传相同的库到每个单独
  • 我知道PHP是在服务器,因此可能问题上运行域包括跨脚本下载到另一台服务器。

预先感谢。

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

+0

代码需要位于服务于所有站点的服务器上。这里的所有都是它的。 – Yuliy 2010-06-23 13:35:38

+0

这是不安全的代码。 – rook 2010-06-23 23:05:50

回答

3

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

如果你看看PHP.net的约包括文档,你可以找到这样的:

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

这几乎可以解释整个事情。

0

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

包括文件,不是网址。这是可能的同一台服务器。
只需使用绝对路径来这些文件。

+0

对不起,你可以请澄清'包括文件,而不是网址'你的意思是使用php'file_get_content'或'fopen'?谢谢 – megaSteve4 2010-06-23 12:15:51

+0

@ user256888我的意思是使用相同的包括。但使用**文件名**作为参数,而不是URL。 – 2010-06-23 12:24:36

+0

包含文件意味着包括('/ usr/local/apache/htdocs/common_include.php')不包括('http://www.mydomain/common_include.php') – 2010-06-23 12:25:30

0

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

然而,如果所有需要使用脚本的网站,你可以把这个脚本在某处由执行PHP的用户可以访问的目录,并添加到目录在php.ini include_path属性(can also be done at runtime

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

1

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

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

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

+0

在您的本地副本中的每个网站....只需从某种源控制系统中提取代码即可。然后,您只需在一个主要位置使用这些脚本,并可以使用更新,然后将这些更新提供给使用它的所有站点。 – Sherri 2013-02-24 15:25:13

0

如果您在该服务器上拥有root用户权限,则可以使用文件系统根目录下的绝对路径,但大多数主机不会让您这样做。