如何通过ruby脚本将$ _POST值传递给php脚本
我需要运行cron作业以使用redmine的reposman.rb添加svn存储库。但我们也有一个php脚本(带有一个界面),使我们能够自动创建存储库。
php脚本收到一个$ _POST值,创建回购站,设置权限,分配一些组以读取和写入新创建的回购站。
我的问题是这样的:
- 我怎么会在reposman.rb执行PHP脚本,而不是
svnadmin create
命令? - 我怎样才能给php脚本一个$ _POST参数,所以它可以使用php脚本正确设置我的svn repos。
感谢
编辑: 这里有什么脚本都做了一些例子。
Ruby脚本:
... // Add the repos system "svnadmin create #{path}" ...
PHP脚本:
// Receive the name of the repos to add $dir= $_POST["dir"]; // Do all the stuff with the permissions $cmd= "sudo /usr/local/bin/createsvnrepo $dir"; system("$cmd", $retval); ...
由于价值观,@Richard克诺普的评论让我比任何答案,我会回答我的问题帮助别人。
我用curb发送一个帖子到php脚本。
reposman.rb
... # Added at start of file. require 'rubygems' require 'curb' ... # Replace the creation of repos from module SCM module Subversion def self.create(path) system_or_raise "svnadmin create #{path}" end end ... end # to module SCM module Subversion def self.create(path) Curl::Easy.http_post( "http://example.com/customCreaterepos.php", # Url to the php script Curl::PostField.content('reposName', path)) # Index of php $_POST in script end end ... end
发送HTTP请求到脚本 - $ _ POST并不打算从命令行初始化。
您可以假冒一个POST请求与PHP脚本:
(当然,它实际上更多的“落实”比“假”)
exec "echo 'var=123_&data=...' | "
" REQUEST_METHOD=POST CONTENT_TYPE=application/x-www-form-urlencoded "
" php-cgi"
注意,它确实需要php-cgi
二进制,而不是正常-cli版本。并且您需要复制CGI environment变量的全部。因此,将现有脚本修改为接受$ argv参数可能会更容易。
如果可以更改脚本,它应该通过文件或标准输入获取其输入数据。如果不是的话,你可以编写一个包装脚本,从文件/标准输入中选择数据,使用它填充$_POST
(是的,PHP超级全局变量是可写的)并通过require
调用原始脚本。
您可以从命令行运行脚本。 事情是这样的:
params = {'foo' => 'bar'} #etc
param_str = params.collect {|k,v| "#{CGI.escape(k)}=#{CGI.escape(v)}"}.join('&')
popen("/usr/bin/php /path/to/script.php", "w+") do |pipe|
pipe.puts(param_str)
pipe.close_write
res = pipe.read
end
你需要在这里(php_cli)使用PHP命令行界面。您没有$ _POST,但是您可以提供传递给php脚本的参数。从ruby做一个系统调用来执行php脚本(我不知道红宝石,所以我只发布php部分)。在你的PHP脚本开始用正确的shabang:
#!/usr/bin/php
<?php
通话应该是这样的: ./myscript。PHP -v =值-b =数值
检查$ _ SERVER [“argv”]作为对通过
发送HTTP请求到PHP脚本,并在后期的所有数据将得到解析到$ _POST数组,那么这将是可用的脚本。 Google“红宝石卷曲”。 – 2011-05-18 14:11:41