真是累,每次安装测试帝国模板都需要手动删除install.lock文件,然后再下一步下一步!
下一步完成后,还需要你自己填写数据库和初始密码!
真是烦死了!
于是乎,我写了一个PHP,大致功能如下:
不用手动访问/e/install目录和删除lock文件
运行PHP,自动安装帝国cms,并且跳转帝国后台登录!
初始账号:admin
初始密码:123456
目前只适合帝国cms7.5,以后可能会增加帝国cms7.2
上代码:
<?php
$sql_name = "test_4s5_cn";
$sql_pass = "ggggggggggggg";
// 下载帝国安装包和配置文件
downloadAndExtract(__DIR__."/e/install/","http://api.4s5.cn/cdn/ecms/zip/install.zip");
downloadAndExtract(__DIR__."/e/config/","http://api.4s5.cn/cdn/ecms/zip/config.zip");
importSqlZip("http://api.4s5.cn/cdn/ecms/zip/mysql.sql.zip",$sql_name,$sql_name,$sql_pass);
// 配置数据库config文件
$config_file = __DIR__."/e/config/config.php";
modifyDatabaseConfig($config_file,['dbusername' => $sql_name, 'dbpassword' => $sql_pass, 'dbname' => $sql_name, 'dbtbpre' => "phome_"]);
// 安装install的数据库
// 获取当前域名
$domain = $_SERVER['HTTP_HOST'];
// 拼接 URL
$url = "http://{$domain}/e/admin";
// 跳转到 URL
header("Location: $url");
// 自定义函数
/**
* 从远程URL下载包含SQL文件的ZIP压缩文件,解压缩SQL文件到指定目录,然后将数据导入到MySQL数据库中。
*
* @param string $remoteUrl 远程ZIP文件的URL地址
* @param string $dbName 目标MySQL数据库的名称
* @param string $dbUser 目标MySQL数据库的用户名
* @param string $dbPass 目标MySQL数据库的密码
* @param string $dbHost 目标MySQL数据库的主机地址,默认为localhost
* @param string $sqlDir 解压缩SQL文件的目录路径,默认为当前文件所在目录下的path/目录
* @throws Exception 如果下载、解压缩、数据库操作失败,则会抛出异常
*/
function importSqlZip($remoteUrl, $dbName, $dbUser, $dbPass, $dbHost = 'localhost', $sqlDir = __DIR__.'/path/') {
// 创建一个临时文件用于保存下载的 Zip 文件
$tempZip = tempnam(sys_get_temp_dir(), 'sql_zip_');
// 下载远程 Zip 文件并保存到本地
$fp = fopen($tempZip, 'w');
$ch = curl_init($remoteUrl);
curl_setopt($ch, CURLOPT_FILE, $fp);
$success = curl_exec($ch);
curl_close($ch);
fclose($fp);
if (!$success) {
throw new Exception('Failed to download the remote SQL ZIP file.');
}
// 创建指定目录
if (!mkdir($sqlDir, 0777, true)) {
throw new Exception('Failed to create directory.');
}
// 解压缩文件到指定目录
$zip = new ZipArchive();
if ($zip->open($tempZip) === TRUE) {
$zip->extractTo($sqlDir);
$zip->close();
} else {
throw new Exception('Failed to extract the SQL ZIP file.');
}
// 清空数据库
$dsn = "mysql:host=$dbHost;dbname=$dbName";
$pdo = new PDO($dsn, $dbUser, $dbPass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$tables = $pdo->query("SHOW TABLES")->fetchAll(PDO::FETCH_COLUMN);
foreach ($tables as $table) {
$pdo->query("DROP TABLE IF EXISTS $table");
}
// 导入 SQL 文件
$files = glob($sqlDir . '*.sql');
foreach ($files as $file) {
$pdo->exec(file_get_contents($file));
}
// 删除临时文件和 SQL 文件
unlink($tempZip);
$files = glob($sqlDir . '*.sql');
foreach ($files as $file) {
unlink($file);
}
rmdir($sqlDir);
}
function downloadAndExtract($installDir, $remoteZipUrl) {
// 删除指定目录及其下所有文件
if (is_dir($installDir)) {
$files = glob($installDir . '/*');
foreach ($files as $file) {
if (is_file($file)) {
unlink($file);
} elseif (is_dir($file)) {
$innerFiles = glob($file . '/*');
foreach ($innerFiles as $innerFile) {
if (is_file($innerFile)) {
unlink($innerFile);
}
}
rmdir($file);
}
}
rmdir($installDir);
}
// 创建指定目录
if (!mkdir($installDir, 0777, true)) {
throw new Exception('Failed to create install directory.');
}
// 下载远程 Zip 文件并保存到本地
$tempZip = tempnam(sys_get_temp_dir(), 'download_');
$fp = fopen($tempZip, 'w');
$ch = curl_init($remoteZipUrl);
curl_setopt($ch, CURLOPT_FILE, $fp);
$success = curl_exec($ch);
curl_close($ch);
fclose($fp);
if (!$success) {
throw new Exception('Failed to download the remote ZIP file.');
}
// 解压缩文件到指定目录
$zip = new ZipArchive();
if ($zip->open($tempZip) === TRUE) {
$zip->extractTo($installDir);
$zip->close();
} else {
throw new Exception('Failed to extract the ZIP file.');
}
// 删除临时文件
unlink($tempZip);
}
// 读取数据库文件,然后传入需要替换的数组
function modifyDatabaseConfig($filename, $newConfig) {
// 读取配置文件内容
$file = file_get_contents($filename);
// 替换配置内容
// 配置文件里的变量名前缀
$prefix = '$ecms_config[\'db\']';
// 遍历新配置,将对应的变量替换为新值
foreach ($newConfig as $key => $value) {
$pattern = '/' . preg_quote($prefix) . '\[\'' . preg_quote($key) . '\'\]\s*=\s*\'[^;]+;/';
$replace = $prefix . '[\'' . $key . '\'] = \'' . $value . '\';';
$file = preg_replace($pattern, $replace, $file);
}
// 保存文件
file_put_contents($filename, $file);
}
第二次更新
本次更新了帝国cms7.2版本的安装,运行PHP自动判断帝国版本,然后自动安装
<?php
$sql_name = "test_4s5_cn";
$sql_pass = "wnxxtJTa3y4SPPrr";
if(file_exists(__DIR__."/e/admin/index.php")){
$string = file_get_contents(__DIR__."/e/admin/index.php");
// 开始检查帝国cms版本
if (strpos($myString, "7.2") !== false) {
$ecms = 7.5;
} else {
$ecms = 7.2;
}
}else{
die("未检测到帝国admin后台");
}
// 下载帝国安装包和配置文件
downloadAndExtract(__DIR__."/e/install/","http://api.4s5.cn/cdn/ecms/zip/{$ecms}/install.zip");
downloadAndExtract(__DIR__."/e/config/","http://api.4s5.cn/cdn/ecms/zip/{$ecms}/config.zip");
importSqlZip("http://api.4s5.cn/cdn/ecms/zip/{$ecms}/mysql.sql.zip",$sql_name,$sql_name,$sql_pass);
// 配置数据库config文件
$config_file = __DIR__."/e/config/config.php";
modifyDatabaseConfig($config_file,['dbusername' => $sql_name, 'dbpassword' => $sql_pass, 'dbname' => $sql_name, 'dbtbpre' => "phome_"]);
// 获取当前域名
$domain = $_SERVER['HTTP_HOST'];
// 拼接 URL
$url = "http://{$domain}/e/admin";
echo "安装成功!帝国版本:{$ecms}";
// 停顿三秒钟后跳转后台
echo " <meta http-equiv=\"refresh\" content=\"3;url={$url}\" />";
// 自定义函数
/**
* 从远程URL下载包含SQL文件的ZIP压缩文件,解压缩SQL文件到指定目录,然后将数据导入到MySQL数据库中。
*
* @param string $remoteUrl 远程ZIP文件的URL地址
* @param string $dbName 目标MySQL数据库的名称
* @param string $dbUser 目标MySQL数据库的用户名
* @param string $dbPass 目标MySQL数据库的密码
* @param string $dbHost 目标MySQL数据库的主机地址,默认为localhost
* @param string $sqlDir 解压缩SQL文件的目录路径,默认为当前文件所在目录下的path/目录
* @throws Exception 如果下载、解压缩、数据库操作失败,则会抛出异常
*/
function importSqlZip($remoteUrl, $dbName, $dbUser, $dbPass, $dbHost = 'localhost', $sqlDir = __DIR__.'/path/') {
// 创建一个临时文件用于保存下载的 Zip 文件
$tempZip = tempnam(sys_get_temp_dir(), 'sql_zip_');
// 下载远程 Zip 文件并保存到本地
$fp = fopen($tempZip, 'w');
$ch = curl_init($remoteUrl);
curl_setopt($ch, CURLOPT_FILE, $fp);
$success = curl_exec($ch);
curl_close($ch);
fclose($fp);
if (!$success) {
throw new Exception('Failed to download the remote SQL ZIP file.');
}
// 创建指定目录
if (!mkdir($sqlDir, 0777, true)) {
throw new Exception('Failed to create directory.');
}
// 解压缩文件到指定目录
$zip = new ZipArchive();
if ($zip->open($tempZip) === TRUE) {
$zip->extractTo($sqlDir);
$zip->close();
} else {
throw new Exception('Failed to extract the SQL ZIP file.');
}
// 清空数据库
$dsn = "mysql:host=$dbHost;dbname=$dbName";
$pdo = new PDO($dsn, $dbUser, $dbPass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$tables = $pdo->query("SHOW TABLES")->fetchAll(PDO::FETCH_COLUMN);
foreach ($tables as $table) {
$pdo->query("DROP TABLE IF EXISTS $table");
}
// 导入 SQL 文件
$files = glob($sqlDir . '*.sql');
foreach ($files as $file) {
$pdo->exec(file_get_contents($file));
}
// 删除临时文件和 SQL 文件
unlink($tempZip);
$files = glob($sqlDir . '*.sql');
foreach ($files as $file) {
unlink($file);
}
rmdir($sqlDir);
}
function downloadAndExtract($installDir, $remoteZipUrl) {
// 删除指定目录及其下所有文件
if (is_dir($installDir)) {
$files = glob($installDir . '/*');
foreach ($files as $file) {
if (is_file($file)) {
unlink($file);
} elseif (is_dir($file)) {
$innerFiles = glob($file . '/*');
foreach ($innerFiles as $innerFile) {
if (is_file($innerFile)) {
unlink($innerFile);
}
}
rmdir($file);
}
}
rmdir($installDir);
}
// 创建指定目录
if (!mkdir($installDir, 0777, true)) {
throw new Exception('Failed to create install directory.');
}
// 下载远程 Zip 文件并保存到本地
$tempZip = tempnam(sys_get_temp_dir(), 'download_');
$fp = fopen($tempZip, 'w');
$ch = curl_init($remoteZipUrl);
curl_setopt($ch, CURLOPT_FILE, $fp);
$success = curl_exec($ch);
curl_close($ch);
fclose($fp);
if (!$success) {
throw new Exception('Failed to download the remote ZIP file.');
}
// 解压缩文件到指定目录
$zip = new ZipArchive();
if ($zip->open($tempZip) === TRUE) {
$zip->extractTo($installDir);
$zip->close();
} else {
throw new Exception('Failed to extract the ZIP file.');
}
// 删除临时文件
unlink($tempZip);
}
// 读取数据库文件,然后传入需要替换的数组
function modifyDatabaseConfig($filename, $newConfig) {
// 读取配置文件内容
$file = file_get_contents($filename);
// 替换配置内容
// 配置文件里的变量名前缀
$prefix = '$ecms_config[\'db\']';
// 遍历新配置,将对应的变量替换为新值
foreach ($newConfig as $key => $value) {
$pattern = '/' . preg_quote($prefix) . '\[\'' . preg_quote($key) . '\'\]\s*=\s*\'[^;]+;/';
$replace = $prefix . '[\'' . $key . '\'] = \'' . $value . '\';';
$file = preg_replace($pattern, $replace, $file);
}
// 保存文件
file_put_contents($filename, $file);
}
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容