-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpackage.php
More file actions
113 lines (100 loc) · 2.77 KB
/
Copy pathpackage.php
File metadata and controls
113 lines (100 loc) · 2.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
<?php
namespace BsPaySdk;
require_once dirname(__FILE__). "/BsPaySdk/init.php";
$rootDir = opendir(dirname(__FILE__));
$packageName = "php_sdk_" . substr_replace(SDK_VERSION, "", 0, 4) . "_" . date("Ymd");
$build = dirname(__FILE__) . "/" . $packageName;
if (is_dir($build)) {
del_tree($build);
unlink($packageName.".zip");
}
mkdir($build, 0777, true);
# 将被过滤掉的打包文件
$filter = array(
"/\blog\b/i", // 排除 log
"/\bconfig_[\w]*.json\b/i", // 排除测试用的 config
"/\bjson_bak.json\b/i", // 排除测试用的 config
"/\bpackage.php\b/i", // 排除打包脚本自身
"/\bphp_sdk_v[\w]*\b/i", // 排除打包文件夹
"/\bWORK_FLOW.md\b/i", // 排除内部文件
"/\ServerImage\b/i", // 排除服务镜像文件夹
);
# do copy
while ($file = readdir($rootDir)) {
// filter
if (substr(strtolower($file), 0, 1) == "." || match_name($file, $filter)) {
continue;
}
echo $file . "\n";
if (is_dir($file)) {
full_copy($file, $build . "/" . $file, $filter);
} else {
copy($file, $build . "/" . $file);
}
}
# do zip(只在mac系统下执行,其他操作系统保留build目录自行手动处理)
if (PHP_OS == "Darwin") {
$shell = "zip -q -r $packageName.zip ./$packageName";
echo $shell;
system($shell, $status);
# delete temp file
del_tree($build);
}
# =====================================================
/**
* 复制文件夹及内部文件
*
* @param $source
* @param $target
* @param null $filter
*/
function full_copy($source, $target, $filter=null)
{
if (is_dir($source)) {
mkdir($target);
$d = dir($source);
while (FALSE !== ($entry = $d->read())) {
if ($entry == '.' || $entry == '..' || match_name($entry, $filter)) {
continue;
}
$Entry = $source . '/' . $entry;
if (is_dir($Entry)) {
full_copy($Entry, $target . '/' . $entry, $filter);
continue;
}
copy($Entry, $target . '/' . $entry);
}
$d->close();
} else {
copy($source, $target);
}
}
/**
* 删除文件夹及内部文件
*
* @param $dir
* @return bool
*/
function del_tree($dir)
{
$files = array_diff(scandir($dir), array('.', '..'));
foreach ($files as $file) {
(is_dir("$dir/$file")) ? del_tree("$dir/$file") : unlink("$dir/$file");
}
return rmdir($dir);
}
/**
* 判断名称是否匹配集合
*
* @param string $name
* @param array $set 正则表达式集合
* @return bool|void
*/
function match_name($name, $set)
{
foreach ($set as $value) {
if (preg_match($value, $name)) {
return true;
}
}
}