将数据插入远程sqlite

时间:2014-01-29 01:43:57

标签: php mysql sqlite yii

我有以下情况。我有两个Web应用程序在两个不同的服务器上运行。我想将server1 webapplication中的数据插入到server2 sqlite数据库中。 enter image description here

由于sqlite不支持远程连接,我正在寻找替代方法来插入数据,如调用webservice等。

建议任何可能的替代方案。

感谢。

PS:两台服务器都有在Yii + Apache开发的应用程序(不确定需要这些信息)

2 个答案:

答案 0 :(得分:2)

这包括两个步骤:

  1. 在SQlite方面,创建一个微小的PHP API,接受SQL通过POST请求执行。不要忘记执行授权!
  2. 在主应用程序(MySQL)方面,确保您创建与SQlite兼容的SQL,然后使用cURL将其发布到SQlite端
  3. 至于授权:具有共享秘密的简单解决方案可能是

      MySQL端的
    • 读取当前时间戳
      • 连接$ timestamp。$ sharedsecret。$ sql
      • 计算哈希值(想到SHA256)
      • 将时间戳,SQL和哈希作为POST参数发送
    • 在SQlite方面
      • 检查时间戳,如果时间太长或太新(重放安全性),则会失败
      • 计算哈希值($ timestamp。$ sharedsecret。$ sql)并与发送的哈希进行比较,如果错误则会失败
      • 运行SQL并返回结果

    这个假设,SQlite方面完全信任MySQL方面。

答案 1 :(得分:0)

您可以在server2上创建一个小API来处理来自server1的更新/请求。 RESTful API会很好,为您的表创建合理的端点。请尝试查看ToroDispatch。然后,您可以使用curl函数或使用一些HTTP客户端库(如Guzzle。)与server2进行通信。

如果需要发送的更新频率很高,那么在后台进行消息传递可能是更好的方法。这将使您的应用程序更好地处理更多连接,并且不会阻止您处理网络请求的请求。如果是这种情况,你可以通过cron作业(不是实时),甚至更好的,使用Gearman来做到这一点。

对于服务器到服务器的安全问题,您可以通过以下方式限制访问:

  1. 使用某种形式的基本身份验证(请求签名)或
  2. 通过专用网络将server2的API暴露给server1,或
  3. 将server1上的server1列入白名单(通过防火墙或网络服务器)。