2011-05-18 133 views
3

我需要运行cron作业以使用redmine的reposman.rb添加svn存储库。但我们也有一个php脚本(带有一个界面),使我们能够自动创建存储库。

php脚本收到一个$ _POST值,创建回购站,设置权限,分配一些组以读取和写入新创建的回购站。

我的问题是这样的:

  1. 我怎么会在reposman.rb执行PHP脚本,而不是svnadmin create命令?
  2. 我怎样才能给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); 
... 
+0

发送HTTP请求到PHP脚本,并在后期的所有数据将得到解析到$ _POST数组,那么这将是可用的脚本。 Google“红宝石卷曲”。 – 2011-05-18 14:11:41

回答

0

由于价值观,@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 

0

发送HTTP请求到脚本 - $ _ POST并不打算从命令行初始化。

0

您可以假冒一个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参数可能会更容易。

1

如果可以更改脚本,它应该通过文件或标准输入获取其输入数据。如果不是的话,你可以编写一个包装脚本,从文件/标准输入中选择数据,使用它填充$_POST(是的,PHP超级全局变量是可写的)并通过require调用原始脚本。

0

您可以从命令行运行脚本。 事情是这样的:


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 
0

你需要在这里(php_cli)使用PHP命令行界面。您没有$ _POST,但是您可以提供传递给php脚本的参数。从ruby做一个系统调用来执行php脚本(我不知道红宝石,所以我只发布php部分)。在你的PHP脚本开始用正确的shabang:

#!/usr/bin/php 
<?php 

通话应该是这样的: ./myscript。PHP -v =值-b =数值

检查$ _ SERVER [“argv”]作为对通过

相关问题