如何使用PHP解组Ruby对象

时间:2015-07-01 11:20:02

标签: php ruby marshalling

Marshaled数据位于redis服务器中,我需要使用PHP访问它。没有其他选择。

2 个答案:

答案 0 :(得分:1)

据我所知,Ruby的内部Marshal格式没有反序列化器。你可以写一个here's the documentation

此外,如果Ruby对象使用PHP缺少的功能,则可能无法将Ruby对象表示为PHP对象。无论哪种方式,您可能必须在PHP中重新实现Ruby的对象模型的重要部分,以便反序列化Ruby Marshal字符串。例如,如果在解码字符串之后,您最终得到的对象是UserFoo的实例,其中3个实例变量引用了类MyBar的实例?

无论如何,这里有一系列博客文章可以帮助您入门:

  1. A little dip into Ruby's Marshal format
  2. Another dip into Ruby's Marshal format
  3. A final dip into Ruby's Marshal format
  4. 可以尝试的一件事是,使用PHP的现有JVM实现(例如Quercus或P8)和embed an instance of JRuby在您的应用程序中运行您的PHP代码反序列化字符串,前提是可以使用JRuby对字符串进行反序列化。 (同样,您可以在CLI上使用IronPHP和IronRuby执行相同操作。)

答案 1 :(得分:0)

你需要使用另一种格式(更简单,因为你不需要编写自己的解组库)而不是ruby内部编组,比如JSON,XML等。

或者你可以从php中简单地执行ruby脚本来解组ruby对象。