繁体   English   中英

将PHP网站部署到客户端服务器而不显示PHP文件

[英]Deploy PHP website to client server without showing PHP files

我问了一个有关使用readfile()远程执行PHP的最新问题,但也许最好还是提出一个问题,看看我是否对事情的想法是错误的,所以这里是:

  • 我有一个PHP网站,要求用户登录,其中包含许多表格,数据库连接,并使用$ _SESSION变量来跟踪各种情况
  • 我有一个潜在的客户,他想使用我网站的功能,但是要在他们自己的服务器上,由他们控制。 他们可能想使用服务器本地的内容和CSS文件来重新设计网站的样式,但这在以后成为一个问题
  • 我不想向他们展示我的PHP代码,因为那是我所提供的价值。

我曾想过通过从客户端服务器到我的服务器调用include()来做到这一点,这至少会使变量范围保持完整,但是许多站点(和PHP文档)似乎都建议使用readfile(),file_get_contents()或类似的东西。 理想情况下,我想在客户端的服务器上为服务器上的每个“真实”文件创建一个简单的包装文件。

关于如何完成我需要的任何建议?

谢谢,ColmF

根据建议,评论发布为答案并修改了修饰

PHP是一种解释性语言,因此可以“读取”文件并进行解析。 是的,它可以在某些情况下存储缓存的字节码,但是与字节码中编译和工作的高级语言不同。 这意味着php“编译器”需要您的实际源代码才能工作。 查看zend.com/en/products/guard,尽管我相信这意味着您的客户端必须使用Zend Server,但它可能会做您想要的事情。

未能与该公司签订合同,其中包含不重复使用您的代码等的条款。在这种情况下,这是您的最佳保护。 但是,您还应该小心,如果您使用的是“开放源代码”许可下的任何内容,则整个应用程序都可能被视为开放源代码,因此这完全没有意义。

对于许多公司而言,这不是一种非标准的做法。 我已经制作了令我特别骄傲的软件,并且公司希望使用它。 由于他们出于“个人”原因或因为必须遵守PCI等标准而相信自己的信息安全,因此有时我的应用程序必须在其环境中运行。 我已将我的产品提供为“网络服务”,它们在其中向我的服务器查询数据并接收响应。 在那种情况下,我的源代码受到完全保护,因为这与任何其他封闭的API都没有什么不同。 在每种情况下,我均已将副本许可给客户,但规定他们不得修改或分发该副本。 这是具有法律约束力的合同,完全可以从客户的角度进行预期。 当然,有些条款规定我会提供支持等,但这既不是这里也不是那里。

简短的答案:

  • 法律协议,可能是每个人的最佳选择
  • Zend Guard像产品一样,从未使用过,所以我无法担保
  • 私有API,但这对您实际上不起作用,因为客户端需要托管它

祝好运!

如果他们希望将其完全包含在服务器中,那么最好的选择是合法解决方案,而不是技术解决方案。

您向他们授权了该软件,并确保合同规定该知识产权归您所有,并且未经事先许可就无法复制/分发(显然,您需要一些比这更好的法律条款,但您​​知道了)。

建议您不要使用远程执行,而应使用PHP源保护系统,例如Zend Guard,ionCube或sourceguardian。

http://www.zend.com/cn/products/guard/

http://www.ioncube.com/

http://www.sourceguardian.com/

我认为您将很难解决这个问题,除非您想要某种有趣的包装程序来curl对服务器的类型请求。 特别是在处理会话和cookie之类的内容时。

您确定PHP混淆器不足以完成您的工作吗?

基本上,您正在寻找一种将应用程序代理到远程服务器(即客户端)的方法。 在客户端站点上使用readfile()类的东西很好,但是您仍然需要在其末端使用多个脚本。 基本上, readfile刮擦特定文件路径或URL上可用的内容,并将其通过管道传递给最终用户。 因此,如果我要执行readfile('google.com') ,它将输出Google主页的源代码。

假设您不只是希望在客户的站点上使用虚拟表单,您将需要在其末端使用一些代码。 该代码将不得不拦截表单提交(因此,在要使用readfile进行抓取的页面上,您将需要一个URL参数,以告诉您代码表单提交URL是您客户的网站,而不是您自己的网站)。 页面(表单提交处理程序页面)将需要回拨到您自己的站点。 这样想:

readfile("https://your.site/whatever?{$_SERVER['QUERY_STRING']}");

然后,您的站点将处理响应,然后将所有内容传递回客户的站点。

希望我能使您走上正确的道路。 让我知道是否不清楚; 我意识到这是很多信息。

而不是自己托管它,为什么不执行大多数php应用程序的工作,而仅通过自动更新功能将程序分发给您的客户端呢? 自己托管它很复杂,从网站管理到由谁付费托管。

如果您不希望分发它,请找到允许您执行此操作的预写许可证。 如果找不到,那就该和律师谈了。

您不能阻止他们看到您的代码。 您可能会让他们很难理解您的代码,这是第二好的选择。 参见SD PHP混淆器

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM