我有一个在Ruby中运行的脚本,另一个在PHP中运行,并且,根据我的需要,不可能使用相同的脚本语言运行它。
我想用PHP在Ruby中创建一个变量。目前,我有这个代码:
PHP:
$config = fopen("config.txt","w+");
fwrite($config,$sArguments);
fclose($config);
红宝石:
while true do
file = File.new("config.txt", "r")
config = file.gets
file.close
end
PHP将在文件中编写下一个配置,Ruby将读取它并将其转换为变量。它可以工作,但Ruby必须处理读取和读取文件,有时无法正确读取它,因此这段代码的优化非常糟糕。
是否有更快的方法将信息从PHP脚本传递到Ruby脚本?
答案 0 :(得分:0)
很难从给出的信息中确切地说出问题是什么,但是当你说Ruby有时候无法阅读时,我猜你的Ruby脚本正在读取文件,而PHP在编写它的过程中。
一个简单的解决方法是让PHP将其写入临时文件,然后移动或重命名临时文件,以便Ruby脚本可以拾取它。移动/重命名是原子的,因此不可能读取半个文件。
您还可以进行一些改进:
退一步,如果您使用的是“真正的操作系统”,更简单的选择是通过Unix套接字使用基于消息的IPC,假设持久性不是问题。请查看“Introduction to IPC in Ruby”上的此页面,了解有关在流程之间传递消息的示例的详细介绍。
答案 1 :(得分:0)
我不是PHP方面的专家,但我认为“How to run Ruby code from Python (Python-Ruby bridge)”提供了一些如何完成两种语言之间通信的方法。虽然该页面提到了Ruby-Python通信,但我非常确定可以为Ruby和PHP实现一些建议。
一种解决方案是使用XML-RPC将简单数据类型从PHP传输到Ruby。 Ruby对XML-RPC有本机支持,我认为PHP有一些库可以支持XML-RPC。
您也可以使用管道。也就是说,您通过Ruby的IO.popen
调用PHP脚本。我在“Feasibility of using pipe for ruby-python communication”中为Ruby-Python做了类似的事情,但我还没有真正评估其性能。