php实现一键更新
实现 PHP 一键更新的方法
使用 Git 自动拉取最新代码
通过 PHP 调用 Git 命令实现代码自动更新。确保服务器已安装 Git 并配置了正确的权限。
$output = shell_exec('git pull origin master');
echo "<pre>$output</pre>";
通过 FTP/SFTP 实现文件更新
利用 PHP 的 FTP 扩展实现远程文件下载和替换。需要配置 FTP 账号和权限。
$conn = ftp_connect("ftp.example.com");
ftp_login($conn, "username", "password");
ftp_get($conn, "local_file", "remote_file", FTP_BINARY);
ftp_close($conn);
使用 cURL 下载更新包
通过 cURL 从远程服务器下载更新包并解压。
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://example.com/update.zip");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($ch);
curl_close($ch);
file_put_contents("update.zip", $data);
$zip = new ZipArchive;
$zip->open("update.zip");
$zip->extractTo("./");
$zip->close();
实现数据库结构更新
在更新代码的同时执行数据库迁移脚本。
$pdo = new PDO("mysql:host=localhost;dbname=database", "username", "password");
$sql = file_get_contents("update.sql");
$pdo->exec($sql);
安全注意事项
更新功能应设置权限验证,避免未授权访问。建议添加 IP 白名单或 Token 验证。
if ($_SERVER['REMOTE_ADDR'] !== '允许的IP' || $_GET['token'] !== '安全令牌') {
die('无权访问');
}
日志记录功能
记录每次更新的时间和结果,便于排查问题。
file_put_contents("update.log", date("Y-m-d H:i:s")." 更新完成\n", FILE_APPEND);
回滚机制
更新前备份当前版本,出现问题时可快速回退。
shell_exec('cp -r ./ ./backup_'.date("YmdHis"));
完整示例
结合上述功能的完整实现示例:
// 验证权限
if ($_GET['token'] !== 'YOUR_SECURE_TOKEN') {
die('Access denied');
}
// 备份当前版本
shell_exec('cp -r ./ ./backup_'.date("YmdHis"));
// 执行Git更新
$output = shell_exec('git pull origin master 2>&1');
file_put_contents("update.log", date("Y-m-d H:i:s")."\n".$output."\n", FILE_APPEND);
// 执行数据库更新
if (file_exists("update.sql")) {
$pdo = new PDO("mysql:host=localhost;dbname=database", "username", "password");
$pdo->exec(file_get_contents("update.sql"));
}
echo "更新完成";
以上方法可根据实际需求组合使用,建议在生产环境使用前充分测试。







