创建一个在Unix上运行发布脚本的PHP页面

时间:2011-03-15 13:13:14

标签: php unix

我刚刚在客户端的新服务器上编写了一些发布脚本,创建了一个SVN标记并将其检出,创建了所有特定符号链接并将其发布到其生产或登台网站上。

我的客户非常喜欢弄脏自己的手,并且当我专注于其他事情时,越来越习惯于深入了解并改变PHP / HTML。他实际上非常好,我鼓励他继续,因为这对我们两个人都有好处,并且他不会因为制造简单或恼人的错误而烦扰我。

我打算用SVN客户端安排他,这样他就可以提交他的更改,但是这个过程中唯一突出的就是允许他将这些更改发布到升级和生产。当然,我可以通过他访问服务器。 SSH并引导他完成整个过程,但这似乎有可能在某些时候出现严重错误。

我正在考虑设置一个受密码保护的PHP页面,让他通过点击按钮来运行这些脚本。

所以,我有两个问题:

a)我正在使用PHP页面来合理地公开发布脚本,

b)在PHP中实现此类页面的最佳方法是什么?该脚本是一个直接的shell脚本

干杯

4 个答案:

答案 0 :(得分:1)

您可以在PHP中使用exec来运行您需要运行的任何命令。如果您希望他提供SVN签到消息,那么您可能会包含以下用户输入:

exec("svn commit -m '$message'");
// Perform more exec() commands as needed

此时您需要小心 - 正如exec()上的PHP.net页面所说:

  

“当允许将用户提供的数据传递给此函数时,请使用escapeshellarg()或escapeshellcmd()以确保用户不会欺骗系统执行任意命令。”

Check out the PHP.net page了解更多信息。

答案 1 :(得分:1)

不要重新发明轮子,尝试Capistranto https://github.com/capistrano/capistrano

答案 2 :(得分:0)

我想到了两种方法:

  • 使用system或exec从php执行你的脚本,但它必须是可能的
  • 您的php脚本会创建一个令牌(文件),而cronjob会经常查找它并在令牌存在时运行您的脚本(更安全)

答案 3 :(得分:0)

你问题的A部分是主观的,所以我只想说我认为这是合理的。你问题的B部分非常简单。基本上你只需要通过PHP execute外部命令。如果您需要以与Apache设置运行时不同的用户身份运行,这会变得更加困难。

在最基本的形式中,它很简单:

exec('your command here');

那说你可能想用一些表单提交按钮来触发这些命令。

<?php
if ($is_authorized && $push_to_staging) {
  // execute the command to push the repo to staging.
}
?>

请务必使用escapeshellarg转义任何用户输入。