在2个站点之间生成PDF

Rob*_*lin 5 php pdf cakephp cross-domain

我站在十字路口的前方,充满了解决问题的潜在方法.我的问题是我想将特定用户引用到为他们呈现相关PDF文件的唯一页面.最好,我想将它们引用到一个站点,相关的MySQL数据和pdf渲染插件没有打开.希望您可以了解我应该使用哪种解决方案.

参考

  • 站点A - 我更喜欢将它们引用到的站点
  • 站点B - 包含MySQL数据和PDF插件的站点

信息

  • 这两个站点都是通过CakePHP 1.3构建的
  • 站点A当前没有附加数据库.它只运行在API调用上,只运行到站点B.
  • 这些PDF文件的生成量不会太大,但找到一个解决方案也很有趣
  • 对这些PDF的引用发生在事件上,并且不会同时发送给数千个用户.

解决方案#1

将它们引用到站点B并在那里生成所有内容.

优点:易于修复.
缺点:我不希望这些用户知道站点B.站点B主要用于内部通信,并且对于给定用户最好不要使用它.
虽然:相反避免这个.

解决方案#2

在酒店内进行一个页面,卷发页面等于解决方案#1,然后输出相同的结果.

优点:相当容易修复.
缺点:想不出来.
几点思考:将浏览器明白,我输出PDF?或者我(如果可能的话)从cURL请求复制标题回复并header()在输出之前将它们设置为自己?

解决方案#3

在站点B中生成一次PDF并将其放在站点A上.然后只需参考.pdf链接.

优点:加载速度更快.在这种情况下并不重要,甚至可能不被注意.
缺点:不能轻易修改PDF输出.虽然
:我将如何转移文件?这两个站点位于同一台服务器上,因此可以通过简单的路径更改,但站点之间的所有其他通信都是由于它们不需要共享服务器.羞于打破这种设计.也许我必须做一个高级的cURL请求并将pdf文件作为POST从站点B发送到站点A并上传它?但是,这似乎也不是一个好的解决方案.

解决方案#4

运行API从站点A到站点B,以根据来自URL的ID获取相关数据.但也有网站A上的PDF插件.

优点:在某种程度上,这是一种非常合理的方法.
缺点:我希望仅在站点B上生成所有PDF.使管理所有这些变得更容易.虽然
:我有点不确定这种方法与解决方案2相比有多大(如果有的话)更有益.

非常感谢你的时间.请激励给定解决方案之一,或展示您自己的解决方案.

编辑:虽然代码样本总是受到赞赏,但我对于为什么应该使用哪种解决方案或其他解决方案的共鸣和逻辑更感兴趣.我已经知道如何通过编码解决大部分这些解决方案.对于访问者,请随时链接到有关您的回复的相关功能和方法.

Iks*_*tar 1

看起来您想将站点 B 隐藏起来,不让公众看到。

最简单的方法是在站点 A 和站点 B 之间创建反向代理。您可以执行类似 sitea.com/pdf-items/ 的操作,将为 siteb.com/ 提供服务

编辑:

反向代理可以跨域,服务器不必共享任何公共内容,除了站点 A 可以访问站点 B(听起来好像已经是这样)

Apache 有一个使用 mod_proxy 的简单方法(http://httpd.apache.org/docs/2.2/mod/mod_proxy.html

快速谷歌一下就找到了在 Apache 上设置它的指南。http://www.apachetutor.org/admin/reverseproxies

Nginx 也有一个 http://www.cyberciti.biz/tips/using-nginx-as-reverse-proxy.html

IIS 有点复杂,我从未设置过它,但根据文档,该功能确实存在。

编辑2:接近

这里我们不用担心PHP组件。发生的情况是,Apache 服务器将根据指定的代理映射转发请求,例如,如果代理设置为 Sitea.com/pdf siteb.com/,则 sitea.com/pdf/alpha.pdf 实际上将请求 siteb.com/alpha。 pdf. 在此架构中,它将忽略 sitea.com PHP 路由,但会尊重 siteb.com 路由,因为它是一个成熟的请求,但由 sitea 的网络服务器完成。

关于兑现对 siteb 的请求,这意味着 sitea.com/pdf/getpdf.php?id=1 实际上将完成访问 sitea.com/getpdf.php?id=1 的所有动作。

或者,如果您想在 siteA.com 上设置 VHOST(例如 pdf.sitea.com),您可以设置 pdf.sitea.com 映射到 siteb.com 的代理,但如果 sitea 和 siteb 都可公开访问,则这将毫无用处。

如果 sitea.com 可供您的受众使用,并且 siteB 位于访问受限的防火墙后面,则反向代理效果最佳,因此代理将允许 sitea.com 访问 siteb.com 中原本无法访问的部分。

通过启用 proxy_mod 并在 VHOST 或服务器配置下设置 ProxyPass 和 ProxyReversePass,可以修改主机的 siteA.com Apache 配置。