You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

无构建框架的PHP项目如何集成Git在页脚显示最新提交信息?

当然可行!不用构建框架也能实现

这是个非常实用的小需求,哪怕不用任何构建框架,也能通过简单的Git命令调用+PHP输出轻松实现。下面给你两种常用的方案,你可以根据自己的服务器环境选择:

方案一:PHP运行时直接调用Git命令

这种方式最直接,适合服务器允许PHP执行shell命令的场景:

  • 首先确认你的服务器上安装了Git,并且PHP的shell_exec()exec()函数没有被禁用(可以查看php.ini里的disable_functions配置项)。
  • 在页脚对应的PHP文件中添加以下代码来获取提交信息:
// 获取最后一次提交的短哈希值
$lastCommitHash = trim(shell_exec('git log --pretty=format:"%h" -n 1'));
// 获取提交的时间(格式:YYYY-MM-DD HH:MM:SS ±HHMM)
$lastCommitDate = trim(shell_exec('git log --pretty=format:"%ci" -n 1'));
// 获取提交作者的名字
$lastCommitAuthor = trim(shell_exec('git log --pretty=format:"%an" -n 1'));
// 获取提交的简短信息
$lastCommitMessage = trim(shell_exec('git log --pretty=format:"%s" -n 1'));
  • 接着在页脚的HTML结构中输出这些信息:
<footer class="site-footer">
  <div class="commit-info">
    <p>最后提交: <strong><?php echo $lastCommitHash; ?></strong> | <?php echo $lastCommitDate; ?> | 作者: <?php echo $lastCommitAuthor; ?></p>
    <p>提交说明: <?php echo htmlspecialchars($lastCommitMessage, ENT_QUOTES, 'UTF-8'); ?></p>
  </div>
</footer>
  • 注意事项:如果是共享主机环境,可能需要指定Git的绝对路径(比如/usr/bin/git),可以通过在服务器终端执行which git来获取准确路径;另外要确保PHP进程对项目根目录有读取权限,能访问.git文件夹。

方案二:预生成静态信息文件(更安全)

如果服务器限制了PHP执行shell命令,或者你担心运行时调用命令的安全风险,可以在部署阶段提前生成包含提交信息的静态文件:

  • 编写一个简单的部署脚本(或者手动执行以下命令),生成git-info.php文件:
#!/bin/bash
echo "<?php
\$gitCommitInfo = [
  'hash' => '$(git log --pretty=format:"%h" -n 1)',
  'date' => '$(git log --pretty=format:"%ci" -n 1)',
  'author' => '$(git log --pretty=format:"%an" -n 1)',
  'message' => '$(git log --pretty=format:"%s" -n 1)'
];
?>" > git-info.php
  • 在项目的页脚文件中引入这个静态文件并输出信息:
<?php require_once 'git-info.php'; ?>
<footer class="site-footer">
  <div class="commit-info">
    <p>最后提交: <strong><?php echo $gitCommitInfo['hash']; ?></strong> | <?php echo $gitCommitInfo['date']; ?> | 作者: <?php echo $gitCommitInfo['author']; ?></p>
    <p>提交说明: <?php echo htmlspecialchars($gitCommitInfo['message'], ENT_QUOTES, 'UTF-8'); ?></p>
  </div>
</footer>
  • 这个方案的优势在于不会在项目运行时执行任何shell命令,安全性更高,适合对权限管控严格的生产环境。

额外小提示

  • 如果你只想在开发环境显示这些提交信息,生产环境隐藏,可以通过环境变量或配置文件来控制:
<?php
// 假设你有一个环境变量标识当前环境
if ($_SERVER['APP_ENV'] === 'development') {
    // 输出提交信息的代码
}
?>
  • 记得对提交信息中的特殊字符进行转义(比如上面用到的htmlspecialchars()),避免潜在的XSS风险。

内容的提问来源于stack exchange,提问作者mooga

火山引擎 最新活动