159 lines
5.5 KiB
PHP
159 lines
5.5 KiB
PHP
<?php
|
|
/**
|
|
* ThinkShop商城系统 - 团队十年电商经验汇集巨献!
|
|
* =========================================================
|
|
* Copy right 2019-2029 成都云之牛科技有限公司, 保留所有权利。
|
|
* ----------------------------------------------
|
|
* 官方网址: https://www.cdcloudshop.com
|
|
* =========================================================
|
|
*/
|
|
|
|
namespace app\model\system;
|
|
|
|
use app\model\BaseModel;
|
|
use app\model\web\Config;
|
|
|
|
class H5 extends BaseModel
|
|
{
|
|
private $h5_domain = __ROOT__ . '/h5';
|
|
|
|
public function refresh()
|
|
{
|
|
try {
|
|
$h5_template_path = 'public/h5/default'; // h5模板文件目录
|
|
$h5_path = 'h5'; // h5端生成目录
|
|
if (!is_dir($h5_template_path) || count(scandir($h5_template_path)) <= 2) {
|
|
return $this->error('', '未查找到h5模板');
|
|
}
|
|
|
|
if (is_dir($h5_path)) {
|
|
// 先将之前的文件删除
|
|
if (count(scandir($h5_path)) > 2) deleteDir($h5_path);
|
|
} else {
|
|
// 创建H5目录
|
|
mkdir($h5_path, intval('0777', 8), true);
|
|
}
|
|
$this->copyFile($h5_template_path, $h5_path);
|
|
file_put_contents($h5_path . '/refresh.log', time());
|
|
return $this->success();
|
|
} catch ( \Exception $e ) {
|
|
return $this->error('', $e->getMessage() . $e->getLine());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 独立部署下载
|
|
* @return array
|
|
*/
|
|
function downloadH5Separate($domain_name)
|
|
{
|
|
$this->h5_domain = $domain_name;
|
|
|
|
$h5_template_path = 'public/h5/separate'; // h5模板文件目录
|
|
if (!is_dir($h5_template_path) || count(scandir($h5_template_path)) <= 2) {
|
|
return $this->error('', '未查找到h5模板');
|
|
}
|
|
|
|
$source_file_path = 'upload/temp/h5';
|
|
if (is_dir($source_file_path)) {
|
|
// 先将之前的文件删除
|
|
if (count(scandir($source_file_path)) > 2) deleteDir($source_file_path);
|
|
} else {
|
|
// 创建H5目录
|
|
mkdir($source_file_path, intval('0777', 8), true);
|
|
}
|
|
$this->copyFile($h5_template_path, $source_file_path);
|
|
$file_arr = getFileMap($source_file_path);
|
|
|
|
if (!empty($file_arr)) {
|
|
$zipname = 'h5_' . date('Ymd') . '.zip';
|
|
|
|
$zip = new \ZipArchive();
|
|
$res = $zip->open($zipname, \ZipArchive::CREATE);
|
|
if ($res === TRUE) {
|
|
foreach ($file_arr as $file_path => $file_name) {
|
|
if (is_dir($file_path)) {
|
|
$file_path = str_replace($source_file_path . '/', '', $file_path);
|
|
$zip->addEmptyDir($file_path);
|
|
} else {
|
|
$zip_path = str_replace($source_file_path . '/', '', $file_path);
|
|
$zip->addFile($file_path, $zip_path);
|
|
}
|
|
}
|
|
$zip->close();
|
|
|
|
header("Content-Type: application/zip");
|
|
header("Content-Transfer-Encoding: Binary");
|
|
header("Content-Length: " . filesize($zipname));
|
|
header("Content-Disposition: attachment; filename=\"" . basename($zipname) . "\"");
|
|
readfile($zipname);
|
|
@unlink($zipname);
|
|
deleteDir($source_file_path);
|
|
}
|
|
}
|
|
}
|
|
|
|
private function copyFile($source_path, $to_path = '')
|
|
{
|
|
$files = scandir($source_path);
|
|
foreach ($files as $path) {
|
|
if ($path != '.' && $path != '..') {
|
|
$temp_path = $source_path . '/' . $path;
|
|
if (is_dir($temp_path)) {
|
|
mkdir($to_path . '/' . $path, intval('0777', 8), true);
|
|
$this->copyFile($temp_path, $to_path . '/' . $path);
|
|
} else {
|
|
if (file_exists($temp_path)) {
|
|
if (preg_match("/(index.)(\w{8})(.js)$/", $temp_path)) {
|
|
$content = file_get_contents($temp_path);
|
|
$content = $this->paramReplace($content);
|
|
file_put_contents($to_path . '/' . $path, $content);
|
|
} else {
|
|
copy($temp_path, $to_path . '/' . $path);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 参数替换
|
|
* @param $site_id
|
|
* @param $string
|
|
* @return null|string|string[]
|
|
*/
|
|
private function paramReplace($string)
|
|
{
|
|
$api_model = new Api();
|
|
$api_config = $api_model->getApiConfig()['data'];
|
|
|
|
$web_config_model = new Config();
|
|
$web_config = $web_config_model->getMapConfig();
|
|
$web_config = $web_config['data']['value'];
|
|
|
|
$socket_url = (strstr(__ROOT__, 'https://') === false ? str_replace('http', 'ws', __ROOT__) : str_replace('https', 'wss', __ROOT__)) . '/wss';
|
|
|
|
$patterns = [
|
|
'/\{\{\$baseUrl\}\}/',
|
|
'/\{\{\$imgDomain\}\}/',
|
|
'/\{\{\$h5Domain\}\}/',
|
|
'/\{\{\$mpKey\}\}/',
|
|
'/\{\{\$apiSecurity\}\}/',
|
|
'/\{\{\$publicKey\}\}/',
|
|
'/\{\{\$webSocket\}\}/'
|
|
];
|
|
$replacements = [
|
|
__ROOT__,
|
|
__ROOT__,
|
|
$this->h5_domain,
|
|
$web_config['tencent_map_key'] ?? '',
|
|
$api_config['is_use'] ?? 0,
|
|
$api_config['value']['public_key'] ?? '',
|
|
$socket_url
|
|
];
|
|
$string = preg_replace($patterns, $replacements, $string);
|
|
return $string;
|
|
}
|
|
|
|
} |