我正在尝试创建一个可以管理我的Mercurial存储库的Web应用程序。 我想要它,以便当我告诉它加载存储库X:
这是问题所在,我想:获取hgweb脚本,修改它并运行它。 但我不想:采取hgweb脚本,修改它,将其写入文件并重定向。 我正在使用Apache来运行httpd进程。
答案 0 :(得分:2)
您可以在PHP中运行shell脚本。有各种方法可以做到这一点,并且一些主机没有提供适当的权限的复杂性,所有这些都在php.net上有详细记录。也就是说,最简单的方法是简单地将命令括在反引号中。因此,要解压缩文件,我可以说:
`unzip /path/to/file`
所以,如果您的python脚本可以从命令行环境运行(或者您可以修改它以便运行),这似乎是首选方法。
答案 1 :(得分: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 :(得分:0)
就你的问题而言,不,你不可能在没有在某处编写修改脚本的情况下执行修改后的脚本,无论是磁盘上的文件,映射到ram的虚拟文件,还是类似的东西。
听起来你可能正试图用一根小树枝砸铁路钉。如果您根据存储在MySQL中的用户权限过滤访问权限,那么您是否查看过现有的HG解决方案以确保没有比hgweb更适用的方法?它真的是为了完成一件事而构建的,这是超出正常范围的。
我可能会建议将apache的本机身份验证作为一种更方便的方法来控制对存储库的访问,然后只需在不修改脚本的情况下提供repo。