如何从PHP执行CGI文件?

2024-04-20 12:11:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试制作一个web应用程序来管理我的Mercurial存储库。 我希望这样,当我告诉它加载存储库X时:

  • 连接到MySQL服务器并确保X存在。在
  • 检查是否允许用户访问存储库。在
  • 如果以上是真的,那么从mysql服务器获取X的位置。在
  • 运行一个包含存储库路径的hgwebcgi脚本(python)。在

问题是,我想:获取hgweb脚本,修改它,然后运行它。 但我不想:获取hgweb脚本,修改它,将其写入一个文件并重定向到那里。 我使用Apache运行httpd进程。在


Tags: 文件用户路径服务器脚本web应用程序apache
3条回答

您可以在PHP中运行shell脚本。有各种各样的方法来实现这一点,而且有些主机没有提供适当的权限,这一切都有很好的文档记录php.net网站. 也就是说,最简单的方法就是简单地将命令放在反勾中。所以,要解压缩文件,我可以说:

`unzip /path/to/file`

因此,如果您的python脚本可以从命令行环境中运行(或者您可以修改它以便运行),那么这似乎是首选方法。在

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`;

至于你的疑问,不,你不太可能让php执行一个修改过的脚本,不管它是磁盘上的文件,映射到ram的虚拟文件,还是类似的东西。在

听起来你可能是想用一根小树枝敲打一根铁路道钉。如果您要根据存储在MySQL中的用户权限过滤访问权限,您是否查看了现有的HG解决方案,以确保没有比hgweb更适用的解决方案?它真的是专为做好一件事而构建的,而且这超出了它的正常范围。在

我建议将apache的本机身份验证作为一种更方便的方法来控制对存储库的访问,然后在不修改脚本的情况下为repo提供服务。在

相关问题 更多 >