Marshaled数据位于redis服务器中,我需要使用PHP访问它。没有其他选择。
答案 0 :(得分:1)
据我所知,Ruby的内部Marshal格式没有反序列化器。你可以写一个here's the documentation。
此外,如果Ruby对象使用PHP缺少的功能,则可能无法将Ruby对象表示为PHP对象。无论哪种方式,您可能必须在PHP中重新实现Ruby的对象模型的重要部分,以便反序列化Ruby Marshal字符串。例如,如果在解码字符串之后,您最终得到的对象是UserFoo
的实例,其中3个实例变量引用了类MyBar
的实例?
无论如何,这里有一系列博客文章可以帮助您入门:
您可以尝试的一件事是,使用PHP的现有JVM实现(例如Quercus或P8)和embed an instance of JRuby在您的应用程序中运行您的PHP代码反序列化字符串,前提是可以使用JRuby对字符串进行反序列化。 (同样,您可以在CLI上使用IronPHP和IronRuby执行相同操作。)
答案 1 :(得分:0)
你需要使用另一种格式(更简单,因为你不需要编写自己的解组库)而不是ruby内部编组,比如JSON,XML等。
或者你可以从php中简单地执行ruby脚本来解组ruby对象。