如何从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脚本的路径。