2010-06-06 130 views
1

我有一个基于php的网站,它使用SSL并要求用户在访问任何页面之前登录。我想允许从另一个域访问此网站,以便功能保持不变,但用户的外观,感觉和域更改(具有额外的优势,我只能维护一个版本的代码)。使用远程URL和SSL使用readfile()

完成一些阅读后,我在辅助服务器上的php文件中使用readfile()函数调用主服务器上的相应文件。例如,主服务器上的login.php是通过名为login.php的文件从辅助服务器访问的,该文件包含readfile(“http://www.primarydomain.com/login.php”)(除此之外)。

现在的问题 - 我甚至无法登录!登录页面在初始调用时显示正常,但当输入并提交登录用户和密码时,就好像远程服务器没有看到触发表单处理的$ _SERVER ['REQUEST_METHOD']变量,只是作为空表单加载。

任何想法我做错了或我可能需要改变什么配置?

谢谢!

+0

你可以显示你用来做登录的代码吗? – 2010-06-06 15:03:05

+0

您是否将[* context *](http://www.php.net/manual/en/function.stream-context-create.php)参数提供给['readfile'](http://php.net) /manual/en/function.readfile.php)?我想你需要通过上下文传递请求变量(用户名,密码)。当你传递一个URL到'readfile()'时,PHP将在该域上执行,只有输出将被读取。 – 2010-06-06 15:12:55

回答

0

创建一个PHP文件,然后将其用于跨多个站点的相同目的是一个好主意。但是,以这种方式使用该文件的方式取决于您的托管软件包的一般基础架构。

如果你有一个托管帐户,允许所有的一个帐户下受影响的网站的主机,你应该能够调用常见的文件(在这种情况下login.php)使用include()require()功能。

<?php 
require('/home/1234/public_html/common/login.php'); 
?> 

在这种情况下,所有这一切的PHP文件的功能将如同它是调用页面的一部分执行。

如果您在多个托管帐户/服务器上有多个站点,则上述内容不再可用。使用readfile()函数将能够收集如果通过浏览器访问URL将会看到的输出,但底层功能将会丢失 - 也就是说,您不能调用login.php文件并让它实际上在辅助服务器上执行登录现场。

在这种情况下,您确实需要获取实际PHP文件的副本,并将它们放在辅助服务器/帐户上以使用它们。

这可能会使管理文件的版本变得稍微困难​​一点,但这是处理此问题的常用方法,只要您记得将任何文件更新推送到所有受影响的站点,它都能正常工作。

+0

感谢您的信息。 作为回应,辅助站点将不会在同一个托管帐户下进行管理 - 我打算允许客户使用此方式访问主站点,并在登录时应用进一步的检查以防止访问“未经授权”的IP (任何不是来自我的客户)。 也许可以按照Andy的评论所建议的使用上下文变量来完成我所需要的工作 - 我会进一步研究以了解它是否可行。 另外,是否有另一种方式来从主站点“包含”代码,以便在执行时看到所有变量? Thx – ColmF 2010-06-07 14:55:42

+0

想要添加 - 我不希望允许客户端在可能的情况下查看php代码,因此我尝试了这种方法。 – ColmF 2010-06-07 14:58:45

+0

这是一个不错的主意,但不切实际。在增加宕机风险(您的所有客户端站点都依赖于您的服务器始终可用并可随时访问)和效率降低之间(您完成此操作的所有页面负载都会将中继请求延迟到中央服务器) ,还有一百万个其他不好的副作用。添加到您可能违约的合约条款中,永远不会实际提供所购买的代码。如果您担心您的代码被重新使用或误用,请查看PHP混淆 - http://www.google.com.au/search?q=php+code+obfuscation – 2010-06-08 00:01:46