2009-07-26 76 views
0

我正在尝试制作一个Web应用程序,以便为我管理我的Mercurial存储库。 我想要它,以便当我告诉它加载存储库X时:如何从PHP执行CGI文件?

  • 连接到MySQL服务器并确保X存在。
  • 检查用户是否被允许访问存储库。
  • 如果上述属实,从mysql服务器获取X的位置。
  • 运行包含存储库路径的hgweb cgi脚本(python)。

这是问题所在,我想:采取hgweb脚本,修改它并运行它。 但我不想:采取hgweb脚本,修改它,将其写入文件并在那里重定向。 我使用Apache来运行httpd进程。

回答

2

Ryan Ballantyne发表了正确答案(我向上投票)。反引号操作符是执行shell脚本的方式。

最简单的解决方案可能是修改hgweb脚本,使其不会“包含”存储库本身的路径。相反,将它作为命令行参数传递。这意味着您不必担心在任何地方修改和编写hgweb脚本。所有你需要做的是:

//do stuff to get location of repository from MySQL into variable $x 
//run shell script 
$res = `python hgweb.py $x`; 
2

您可以在PHP中运行shell脚本。有很多种方法可以做到这一点,并且一些主机并没有提供适当的权限,所有这些在php.net上都有详细记录。也就是说,最简单的方法就是简单地将你的命令用反引号括起来。所以,要解压的文件,我可以说:

`unzip /path/to/file` 

所以,如果你的Python脚本是这样的,它可以在命令行环境中运行(或者你可以修改它,以便运行),这将似乎是首选方法。

+0

这并没有回答他的问题。 – 2009-07-26 23:42:08

+0

@Paul McMillan:很确定它确实回答了这个问题。问题是“我如何从PHP执行CGI文件?”,反引号操作符是要走的路。 – zombat 2009-07-26 23:54:18

0

就你问题而言,不,你不可能让php执行一个修改后的脚本而不写入某个地方,无论这是磁盘上的文件,映射到内存的虚拟文件还是类似的东西。

这听起来像你可能试图用树枝砸铁路钉。如果您根据存储在MySQL中的用户权限过滤访问权限,您是否看过现有的HG解决方案以确保没有比hgweb更适用的东西?这确实是为了完成一件事而设计的,而且这超出了普通领域。

我可能会建议寻找Apache的本地身份验证作为一个更方便的方法来控制对存储库的访问,然后只提供回购而不修改脚本。