2011-05-18 173 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」]作爲對通過

相關問題