douxu9707
2011-12-27 18:58
浏览 24
已采纳

通过PHP中的fsockopen()传递资源

I have two servers. Server A has all the databases. How can server B query server A's database and receive the results with fsockopen()? currently, I can only pass actual text through the socket (i.e. if server A's php code prints out something as in echo). How can I pass through the query results (the resource) in this open socket?

图片转代码服务由CSDN问答提供 功能建议

我有两台服务器。 服务器A具有所有数据库。 服务器B如何查询服务器A的数据库并使用 fsockopen()接收结果? 目前,我只能通过套接字传递实际文本(即,如果服务器A的PHP代码打印出 echo 中的内容)。 如何在此打开的套接字中传递查询结果(资源)?

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • dst8922 2011-12-27 19:02
    已采纳

    If using fsockopen is the only way you are able to communicate with Server B's database, serializing the results of the query or encoding them in JSON format and writing them to the socket are possibilities.

    Is it not possible to grant read-only access to the mysql server from server A only so you can query directly? Otherwise a REST service would be a good alternative to fsockopen.

    As stated, you cannot pass the resource over the socket as it wouldn't have any meaning on server A anyway. If you tried to pass it over the socket it would probably return a string (i.e. Resource #1)

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • dtv995719 2011-12-27 19:01

    You can't pass the PHP resource type*­Docs* via fsockopen, because fwrite/read will convert the data into a (binary) string. See:

    Converting to resource

    As resource variables hold special handlers to opened files, database connections, image canvas areas and the like, converting to a resource makes no sense.

    Same is true for converting a resource into something else, e.g. a string.

    评论
    解决 无用
    打赏 举报
  • douqiao1983 2011-12-28 02:33

    What are you doing? Just allow remote mysql and let the database server do its job.

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题