如何从PHP调用ruby脚本?

我正在写一个php中的Wordpress插件,下一步是对这个插件的一些补充。

添加将从网上抓取数据,发送表单等。我有这个部分几乎准备好从我对Wordpress插件有任何想法之前 – 它使用机械化编码在ruby中 。 我还没有在php中找到类似于机械化的东西。

但我不知道从Wordpress调用我的ruby脚本的最佳方法是什么。 一些任务将由cron管理。 那些基于用户请求的?

  • php脚本只触发 ruby脚本。 它不会等待/需要任何来自ruby的输出
  • WordPress插件完全可移植,function无需ruby脚本。 Ruby增加了更多东西。 如果有人需要它。
  • 一切都将在我的linux服务器上运行,我有root访问权限

依赖于Ruby的WordPress插件不可移植。 如果你是唯一一个会使用它的人,那就没关系。

如果Ruby脚本需要返回一个将被调用它的PHP脚本立即使用的结果,那么像exec()这样的东西是唯一的方法。 确保转义传递给Ruby脚本的任何参数; 否则你很容易受到注射攻击。

如果Ruby脚本不需要立即返回结果(例如一些后台处理,例如缩略图生成),那么我认为最好的方法是将PHP脚插入MySQL数据库或类似的东西。 Ruby脚本可以在后台运行或从cron运行,定期检查数据库以查找新作业,并执行它需要执行的任何处理。 这种方法避免了exec()的性能开销和安全问题,并且它可以说也更具可伸缩性。 (类似的方法是让Ruby脚本侦听套接字,并且您的PHP脚本将连接到套接字。但这需要更多工作才能使其正确。)

如果我是你,我会处理来自cron的所有ruby。 在DB中创建一个队列来处理用户请求,然后让cron调用的脚本(在ruby中?)从队列中获取所有未处理的作业并开始运行它们,然后从队列中删除该作业(或者设置某种标记为它正在完成)。 这样你就不必调用exec ,在大多数情况下,除非用户在具有超级用户访问权限的VPS / Dedicated服务器上运行,否则它将不受限制。

你也可以把它作为一个单独的工作,让它比主要工作更经常地轮询数据库中的未处理工作……如果有必要的话。

不过,这引出了一个问题……为什么在php blog / cms app中使用ruby ??????

使用exec()运行ruby解释器,为它提供ruby脚本的路径。

http://php.net/manual/en/function.exec.php