141 Commits
Author SHA1 Message Date
qkqpttgfandGitHub ea278dc2b3 Update version 2021-03-31 15:43:52 +08:00
qkqpttgfandGitHub ca4ec6f497 fix: Aliyun download need header
改用手机token
2021-03-31 15:30:07 +08:00
qkqpttgfandGitHub 671481c284 use content cache in TXT 2021-03-31 15:28:00 +08:00
qkqpttgfandGitHub 449ead425a try fix: ShareLink get cookie in php8(Set-Cookie/set-cookie) 2021-03-30 16:16:07 +08:00
qkqpttgfandGitHub c0852bc979 Merge pull request #274 from 186526/patch-22
[UPDATE] renexmoe v1.3
2021-03-28 17:32:36 +08:00
qkqpttgfandGitHub 8a5d22f699 add change description 2021-03-28 17:18:48 +08:00
186526andGitHub ff74c9b50c [UPDATE] renexmoe v1.3
更新详情见 https://github.com/186526/onemanager-theme-renexmoe
2021-03-28 17:10:55 +08:00
qkqpttgfandGitHub d9d34d32c9 fix: guest upload exist file, get local name not md5 2021-03-28 17:01:15 +08:00
qkqpttgfandGitHub d591812c7f fix: need Sites scope 2021-03-28 16:42:23 +08:00
qkqpttgfandGitHub 599b937f99 fix: need Sites scope 2021-03-28 16:42:19 +08:00
qkqpttgfandGitHub 7ea726c9c7 fix: need Sites scope 2021-03-28 16:39:06 +08:00
qkqpttgfandGitHub 1295ad92ef fix: need Sites scope 2021-03-28 16:38:37 +08:00
qkqpttgfandGitHub 32649ccc62 fix: reading base64 config in SCF_file 2021-03-28 16:24:25 +08:00
qkqpttgfandGitHub e83648a332 admin fix classic theme, remove disableChangeTheme 2021-03-27 14:55:09 +08:00
qkqpttgfandGitHub ec6e9d50ce show hour&minute when uploading 2021-03-27 14:34:58 +08:00
qkqpttgfandGitHub 58482e88c5 fix: SCF Region 2021-03-22 22:46:14 +08:00
qkqpttgfandGitHub d377410b19 fix: SCF Region 2021-03-22 22:45:33 +08:00
qkqpttgfandGitHub 75710ec7e9 try limit 5 uploading at same time 2021-03-16 14:17:37 +08:00
qkqpttgfandGitHub 43b1046aba fix bug 2021-03-15 21:28:53 +08:00
qkqpttgfandGitHub 0f5c7587d5 get personal drive space size 2021-03-15 21:16:21 +08:00
qkqpttgfandGitHub d5c456bc0b try fix activityLimitReached 2021-03-14 17:34:18 +08:00
qkqpttgfandGitHub 7b51e773f3 get disk space size 2021-03-14 17:00:39 +08:00
qkqpttgfandGitHub 82e8d5d0e7 wait to get disk space size 2021-03-14 17:00:01 +08:00
qkqpttgfandGitHub 06db4a70f6 get disk space size 2021-03-14 16:59:07 +08:00
qkqpttgfandGitHub 3118222734 get disk space size 2021-03-14 16:58:30 +08:00
qkqpttgfandGitHub 2850db0699 try fix: can not update in php8 2021-03-14 16:42:31 +08:00
qkqpttgfandGitHub 273f41d90b away tabs 2021-03-13 14:55:26 +08:00
qkqpttgfandGitHub fab8a996e3 open github in new tab 2021-03-13 14:16:17 +08:00
qkqpttgfandGitHub 5543c0314e Update version 2021-03-13 14:01:40 +08:00
qkqpttgfandGitHub 19549e0612 use driveId, select secret drive. 2021-03-13 13:51:41 +08:00
qkqpttgfandGitHub 6f2a4c4a40 use driveId 2021-03-13 13:50:37 +08:00
qkqpttgfandGitHub 9717e32254 change layout in setup 2021-03-13 13:49:46 +08:00
qkqpttgfandGitHub 377a9f8aaa fix: not encode file name. fix: sha1 big file. 2021-03-13 13:47:46 +08:00
qkqpttgfandGitHub 119ac5280d fix: 500 error in php8 2021-03-12 17:38:47 +08:00
qkqpttgfandGitHub 6230773e52 fix: 500 error in php8 2021-03-12 17:37:26 +08:00
qkqpttgfandGitHub bc66f43bea Update version 2021-03-11 20:07:00 +08:00
qkqpttgfandGitHub 0649f19e21 QQ Group is dead 2021-03-11 20:03:35 +08:00
qkqpttgfandGitHub 8ef5e3d4a6 fix: load sha1.js 2021-03-11 20:01:49 +08:00
qkqpttgfandGitHub 4c0daaca80 fix: load sha1.js 2021-03-11 19:59:58 +08:00
qkqpttgfandGitHub ab49796661 Show error in login 2021-03-11 18:48:43 +08:00
qkqpttgfandGitHub 5c29afd5fe Merge pull request #242 from Nchyn/patch-1
Update nchyn_grey.html
2021-03-09 21:00:27 +08:00
qkqpttgfandGitHub 4cecf6f5af Update version 2021-03-09 20:59:22 +08:00
qkqpttgfandGitHub 6e66ec05d8 Can change admin password now 2021-03-09 17:18:59 +08:00
qkqpttgfandGitHub 6949fae7eb sha1 admin pass in submit 2021-03-09 16:04:19 +08:00
qkqpttgfandGitHub 928d028d7f sha1 admin pass in submit 2021-03-09 15:51:23 +08:00
NchynandGitHub 55e7a840d2 Update nchyn_grey.html
Fix Background-image layout
2021-03-09 13:25:59 +08:00
qkqpttgfandGitHub dd4dde83f3 undo form urlencode 2021-03-08 13:14:02 +08:00
qkqpttgfandGitHub 2aec731ab1 try fix #% in file name 2021-03-07 23:07:54 +08:00
qkqpttgfandGitHub d42547bdfb try fix #% in file name 2021-03-07 23:07:12 +08:00
qkqpttgfandGitHub 07edb1aadf show each upload js 2021-03-07 22:43:38 +08:00
qkqpttgfandGitHub cee88dba69 GD Can not upload form explorer without token 2021-03-07 22:37:12 +08:00
qkqpttgfandGitHub c06b8c0992 rm not use param 2021-03-07 22:35:33 +08:00
qkqpttgfandGitHub 77198ddf8b rm not use code 2021-03-07 22:31:58 +08:00
qkqpttgfandGitHub 4e008e0b2f create file/folder with /. stop upload 2021-03-07 22:29:23 +08:00
qkqpttgfandGitHub 1af93af86f Rename,Move,Copy,Delete,Encrypt,Edit,Thumb in GD 2021-03-07 17:14:15 +08:00
qkqpttgfandGitHub 6f9235bc33 use urlencode form 2021-03-06 16:05:17 +08:00
qkqpttgfandGitHub 8c5c61508c try to stop when activeLimit 2021-03-06 15:59:18 +08:00
qkqpttgfandGitHub dad086da6b add a prama activeLimit 2021-03-06 15:51:04 +08:00
qkqpttgfandGitHub 86ddf9e388 fix: url 403 soon 2021-03-04 22:08:16 +08:00
qkqpttgfandGitHub e07e036fb6 fix: 非zh-cn的zh语系将默认显示zh-tw 2021-03-04 17:40:48 +08:00
qkqpttgfandGitHub ae14fd6ca8 fix: list all files (include trashed) 2021-03-04 15:56:35 +08:00
qkqpttgfandGitHub cba994cf41 fix guest upload non-name file 2021-03-04 15:15:34 +08:00
qkqpttgfandGitHub 36048cd773 Merge pull request #234 from 186526/patch-21
Update Renexmoe 1.2
2021-03-04 09:24:13 +08:00
186526andGitHub cb69900c32 Update Renexmoe 1.2 2021-03-03 23:03:07 +08:00
qkqpttgfandGitHub 61811b60ac remove / in return_uri 2021-03-02 11:14:11 +08:00
qkqpttgfandGitHub fb6306c316 Update version 2021-03-01 17:53:46 +08:00
qkqpttgfandGitHub 5d524529b4 Create Googledrive.php 2021-03-01 17:46:01 +08:00
root e9ed4dc7f1 export&import config 2021-03-01 04:38:15 -05:00
qkqpttgfandGitHub c234dd62d1 Merge pull request #229 from BingoKingo/patch-1
tfo theme 20210224
2021-02-26 21:46:01 +08:00
qkqpttgfandGitHub 3aaa18ee59 progress in Calculate sha1 2021-02-25 18:33:26 +08:00
qkqpttgfandGitHub 366a477ae2 fix: cache 2021-02-25 18:30:44 +08:00
qkqpttgfandGitHub a05ba3ed44 remove surplus backhome 2021-02-25 18:29:13 +08:00
BingoKingoandGitHub 46b9fb9296 tfo theme 20210224
repush.
2021-02-25 15:07:50 +08:00
qkqpttgfandGitHub 7c23cdfba1 use this->error 2021-02-23 17:40:39 +08:00
qkqpttgfandGitHub c610eb6a85 Merge pull request #226 from qkqpttgf/refer
only designated referrer
2021-02-23 17:27:53 +08:00
root 8254f279ef refer 2021-02-23 17:20:19 +08:00
qkqpttgfandGitHub a9be0e3fbf tfo theme
tfo theme.
2021-02-08 20:24:06 +08:00
BingoKingoandGitHub 57e6c481d3 tfo theme 20210205 2021-02-08 19:44:38 +08:00
qkqpttgfandGitHub d613780312 fix: link in rapid 2021-02-07 19:38:05 +08:00
qkqpttgfandGitHub cce6e32b61 fix: got a wrong link after guest uploaded in Aliyundrive 2021-02-07 19:01:04 +08:00
qkqpttgfandGitHub 2b5bb6d3b5 aliyundrive uploading can split chunk 2021-02-07 11:58:17 +08:00
qkqpttgfandGitHub c09453080c split chunk to upload, token try 3days 2021-02-07 11:55:24 +08:00
qkqpttgfandGitHub 71675b58b7 extend secret 2021-02-06 16:43:02 +08:00
qkqpttgfandGitHub f8e3db2e37 extend secret 2021-02-06 16:42:15 +08:00
qkqpttgfandGitHub ba471ab650 try fix: office file can not preview 2021-02-01 18:17:43 +08:00
qkqpttgfandGitHub c186cee4d3 try fix siit 404 2021-01-28 23:29:40 +08:00
qkqpttgfandGitHub bb9b76a427 try fix upload 2021-01-26 09:19:54 +08:00
qkqpttgfandGitHub 9987651af9 try fix upload 2021-01-26 09:17:47 +08:00
qkqpttgfandGitHub 38bd4e4041 try fix upload 2021-01-26 09:14:58 +08:00
qkqpttgfandGitHub 558d34c9e3 try preview&download aliyundrive 2021-01-25 12:26:10 +08:00
qkqpttgfandGitHub 79b7357b70 description of config.php 2021-01-24 23:25:30 +08:00
qkqpttgfandGitHub 12ff9da6f4 fix: only lower letter readme.md can display. 2021-01-24 17:47:51 +08:00
qkqpttgfandGitHub 0b6adc077c try fix: add Aliyundrive will instead current disk 2021-01-24 16:51:33 +08:00
qkqpttgfandGitHub bdedf7a4b0 fix: only lower letter readme.md can display. 2021-01-24 16:14:17 +08:00
qkqpttgfandGitHub bde862ffb5 Merge pull request #198 from 186526/patch-20
Update renexmoe v1.1.5
2021-01-24 15:54:19 +08:00
186526andGitHub 0521bc08c0 Update renexmoe v1.1.5 2021-01-23 22:48:44 +08:00
qkqpttgfandGitHub 89de647c2f try fix more page not show (just for page<50) 2021-01-23 22:40:07 +08:00
qkqpttgfandGitHub ee6f9c9761 Merge pull request #195 from 186526/patch-18
Update renexmoe to v1.1.4.1-lts
2021-01-23 08:15:37 +08:00
186526andGitHub fbfc683c1b Update renexmoe to v1.1.4.1-lts 2021-01-22 15:03:34 +08:00
qkqpttgfandGitHub 2d18450872 try preview&download aliyundrive 2021-01-20 18:59:55 +08:00
qkqpttgfandGitHub 6b08d8edf2 fix bug: in encrypted but downloadable folder, can list by json 2021-01-19 18:05:58 +08:00
qkqpttgfandGitHub 1251195b8f fix: rename to an exist tag 2021-01-18 16:36:45 +08:00
qkqpttgfandGitHub 71d57052da Update version 2021-01-18 16:06:24 +08:00
root 11e87f9ea8 copy disk, change onedrive/sharepoint. 2021-01-18 15:59:39 +08:00
qkqpttgfandGitHub 85cdc6b211 fix bug: error drive will 500 2021-01-18 15:04:42 +08:00
root 8e3a165d60 try fix: tag with same string replaced in renaming tag 2021-01-17 22:05:49 +08:00
qkqpttgfandGitHub 562cd246c4 ext show 2021-01-17 19:02:13 +08:00
qkqpttgfandGitHub d8c1cd619b ext show 2021-01-17 19:01:47 +08:00
qkqpttgfandGitHub 1b8d29354d ext show 2021-01-17 19:01:07 +08:00
qkqpttgfandGitHub c4fcd55669 try to change onedrive to sharepoint 2021-01-17 19:00:05 +08:00
qkqpttgfandGitHub ff85f901f8 ext show 2021-01-17 18:58:25 +08:00
qkqpttgfandGitHub 4ea8cb5bef try to change onedrive to sharepoint 2021-01-17 18:57:26 +08:00
qkqpttgfandGitHub ec9ba6c20e Update version 2021-01-17 14:55:30 +08:00
qkqpttgfandGitHub 0617d258d5 try fix: some php host show Warning 2021-01-17 14:53:16 +08:00
qkqpttgfandGitHub ecb2aad3bb set empty pass will delete passfile 2021-01-17 13:33:33 +08:00
qkqpttgfandGitHub 49e602e7e6 set empty pass will delete passfile 2021-01-17 13:32:33 +08:00
qkqpttgfandGitHub 96ce1a91d3 try fix: password is '' 2021-01-17 13:13:37 +08:00
qkqpttgfandGitHub fe876dd87c use Basic Auth or not 2021-01-17 11:33:05 +08:00
qkqpttgfandGitHub c36621b400 use Basic Auth or not 2021-01-17 11:31:48 +08:00
qkqpttgfandGitHub 1367dd72fb Update conststr.php 2021-01-16 20:28:30 +08:00
root 34599a6e71 use BasicAuth in encrypted folder. fix: error_log in SCF 2021-01-16 17:12:03 +08:00
qkqpttgfandGitHub 5e49a44ec1 add ar-sa 2021-01-16 16:11:12 +08:00
qkqpttgfandGitHub 01e094d95d return json with content-type 2021-01-16 12:27:41 +08:00
qkqpttgfandGitHub 66238a6d54 fix: del upload cache 2021-01-16 12:18:19 +08:00
qkqpttgfandGitHub be96d3aa8b fix: del upload cache 2021-01-16 12:17:06 +08:00
root b44f15f141 fix bug: access token be 1 2021-01-16 11:28:19 +08:00
qkqpttgfandGitHub 15a7ea192a Merge pull request #187 from 186526/patch-16
Update renexmoe to Version 1.1.3
2021-01-16 08:53:55 +08:00
186526andGitHub 0535fcc709 Update renexmoe to Version 1.1.3 2021-01-15 22:55:02 +08:00
qkqpttgfandGitHub 4d83358ee1 fix: access_token be an Array 2021-01-15 19:27:36 +08:00
qkqpttgfandGitHub 27ec89e172 fix: access_token be an Array 2021-01-15 19:26:39 +08:00
qkqpttgfandGitHub 0b0f80c135 fix: access_token be an Array 2021-01-15 19:26:01 +08:00
qkqpttgfandGitHub d5120aa390 the $drive not new twice 2021-01-15 19:24:14 +08:00
qkqpttgfandGitHub 1102d4234f try fix: sharepoint name is non english 2021-01-15 18:32:32 +08:00
qkqpttgfandGitHub 894121d0c6 try fix: empty array to json, heroku error. 2021-01-15 17:43:00 +08:00
qkqpttgfandGitHub 399fb38fd4 fix: empty files cause 500 error in heroku 2021-01-15 16:28:53 +08:00
qkqpttgfandGitHub 661a6f89fe -DriveId 2021-01-15 12:48:13 +08:00
qkqpttgfandGitHub 0169c5bb9a fix bug 2021-01-15 12:08:20 +08:00
qkqpttgfandGitHub 3f63374740 Update version 2021-01-15 11:21:01 +08:00
qkqpttgfandGitHub 404ee22905 v3 2021-01-15 11:19:03 +08:00
qkqpttgfandGitHub 4c836880a1 now admin not base64 2021-01-15 11:18:42 +08:00
root e8f1fd7175 v3 2021-01-15 11:10:08 +08:00
35 changed files with 7253 additions and 13741 deletions
+955 -1329
View File
File diff suppressed because it is too large Load Diff
+247 -46
View File
@@ -13,11 +13,12 @@ $exts['zip'] = ['zip', 'rar', '7z', 'gz', 'tar'];
$constStr = [ $constStr = [
'languages' => [ 'languages' => [
'en-us' => 'English', 'en-us' => 'English',
'zh-cn' => '简体中文',
'zh-tw' => '繁體中文', 'zh-tw' => '繁體中文',
'zh-cn' => '简体中文',
'ja' => '日本語', 'ja' => '日本語',
'ko-kr' => '한국어', 'ko-kr' => '한국어',
'fa' => 'فارسی', 'fa' => 'فارسی',
'ar-sa' => 'السعودية',
], ],
'Week' => [ 'Week' => [
'en-us' => [ 'en-us' => [
@@ -74,6 +75,15 @@ $constStr = [
5 => 'جمعه', 5 => 'جمعه',
6 => 'شنبه', 6 => 'شنبه',
], ],
'ar-sa' => [
6 => 'بيوم الأحد',
0 => 'الإثنين',
1 => 'الثلاثاء',
2 => 'الأربعاء',
3 => 'الخميس',
4 => 'يوم الجمعة',
5 => 'في. يوم السبت',
],
], ],
'EnvironmentsDescription' => [ 'EnvironmentsDescription' => [
'en-us' => [ 'en-us' => [
@@ -83,12 +93,15 @@ $constStr = [
'customScript' => '<script> in all pages, e.g. http turn to https', 'customScript' => '<script> in all pages, e.g. http turn to https',
'customCss' => '<style> in <head>', 'customCss' => '<style> in <head>',
'customTheme' => 'an url of html', 'customTheme' => 'an url of html',
'referrer' => 'only these domains can refer resourse in this site, format is a1.com|b2.com',
'domain_path' => 'more custom domain, format is a1.com:/dirto/path1|b2.com:/path2', 'domain_path' => 'more custom domain, format is a1.com:/dirto/path1|b2.com:/path2',
'diskname' => 'The disk name you want show.', 'diskname' => 'The disk name you want show.',
'diskDescription' => ' Some tips of this disk, not used in code.',
'disktag' => 'A tag used in store config and url.', 'disktag' => 'A tag used in store config and url.',
'disableShowThumb' => 'if 1, the ShowThumbnail button will not display', 'disableShowThumb' => 'if 1, the ShowThumbnail button will not display',
'disableChangeTheme' => 'if 1, the Theme selection button will not display', 'disableChangeTheme' => 'if 1, the Theme selection button will not display',
'downloadencrypt' => '0 or 1. if 1, the files in encrypt folder can be downloaded without password', 'downloadencrypt' => '0 or 1. if 1, the files in encrypt folder can be downloaded without password',
'dontBasicAuth' => 'if 1, will not popup user/pass windows in encrypted folder, but show the page in theme.',
'background' => 'Set an url as background photo.', 'background' => 'Set an url as background photo.',
'backgroundm' => 'Set an url as background in mobile phone.', 'backgroundm' => 'Set an url as background in mobile phone.',
'theme' => 'Select theme.', 'theme' => 'Select theme.',
@@ -104,18 +117,21 @@ $constStr = [
'zh-cn' => [ 'zh-cn' => [
'admin' => '管理密码,不添加时不显示登录页面且无法登录。', 'admin' => '管理密码,不添加时不显示登录页面且无法登录。',
'adminloginpage' => '如果设置,登录按钮及页面隐藏。管理登录的页面不再是\'?admin\',而是\'?此设置的值\'。', 'adminloginpage' => '如果设置,登录按钮及页面隐藏。管理登录的页面不再是\'?admin\',而是\'?此设置的值\'。',
'autoJumpFirstDisk' => '用于多盘,如果1将会自动跳到第一个盘', 'autoJumpFirstDisk' => '用于多个磁盘,如果1自动跳到第一个盘',
'customScript' => '<script>,在所有页都会存在,例如放一个http跳转https', 'customScript' => '<script>,在所有页都会存在,例如放一个http跳转https',
'customCss' => '<style>,在<head>最后面', 'customCss' => '<style>,在<head>最后面',
'customTheme' => 'html格式的主题的url', 'customTheme' => 'html格式的主题的url',
'referrer' => '只有这些域名能引用本站资源。格式为a1.com|b1.com',
'domain_path' => '使用多个自定义域名时,指定每个域名看到的目录。格式为a1.com:/dirto/path1|b1.com:/path2,比private_path优先。', 'domain_path' => '使用多个自定义域名时,指定每个域名看到的目录。格式为a1.com:/dirto/path1|b1.com:/path2,比private_path优先。',
'diskname' => '这个盘你想显示什么名称。', 'diskname' => '这个盘你想显示什么名称。',
'diskDescription' => '对这个盘的一些描述,随便写,代码不引用这个。',
'disktag' => '一个标签,用于保存配置,多盘时会显示在url中。', 'disktag' => '一个标签,用于保存配置,多盘时会显示在url中。',
'disableShowThumb' => '如果填 1, ‘显示缩略’按钮将被隐藏。', 'disableShowThumb' => '如果填 1, ‘显示缩略’按钮将被隐藏。',
'disableChangeTheme' => '如果 1, 主题选择切换将被隐藏', 'disableChangeTheme' => '如果 1,则不会显示主题选择按钮',
'downloadencrypt' => '0 或 1。如果 1, 那加密目录内的文件可以不需要密码就能下载。', 'downloadencrypt' => '0 或 1。如果 1, 那加密目录内的文件可以不需要密码就能下载。',
'dontBasicAuth' => '如果为 1,加密目录不再弹出用户名密码窗口,只会显示主题自带的页面。',
'background' => '设置一个url作为背景。', 'background' => '设置一个url作为背景。',
'backgroundm' => '设置一个url作为手机用的背景。', 'backgroundm' => '设置一个url作为手机用的背景。',
'theme' => '选择一个主题。', 'theme' => '选择一个主题。',
'timezone' => '设置默认时区。', 'timezone' => '设置默认时区。',
'guestup_path' => '设置游客上传路径(图床路径),不设置这个值时该目录内容会正常列文件出来,设置后只有上传界面,不显示其中文件(登录后显示)。', 'guestup_path' => '设置游客上传路径(图床路径),不设置这个值时该目录内容会正常列文件出来,设置后只有上传界面,不显示其中文件(登录后显示)。',
@@ -133,6 +149,7 @@ $constStr = [
'customScript' => '<script>,在所有頁都會存在,例如放一個http跳轉https', 'customScript' => '<script>,在所有頁都會存在,例如放一個http跳轉https',
'customCss' => '<style>,在<head>最後面', 'customCss' => '<style>,在<head>最後面',
'customTheme' => 'html格式的主題的url', 'customTheme' => 'html格式的主題的url',
'referrer' => '',
'domain_path' => '使用多個自訂域名時,指定每個域名看到的目錄。格式為a1.com:/dirto/path1|b1.com:/path2,比private_path優先。', 'domain_path' => '使用多個自訂域名時,指定每個域名看到的目錄。格式為a1.com:/dirto/path1|b1.com:/path2,比private_path優先。',
'diskname' => '這個盤你想顯示什麼名稱。', 'diskname' => '這個盤你想顯示什麼名稱。',
'disktag' => '一個標籤,用於儲存配置,多盤時會顯示在url中。', 'disktag' => '一個標籤,用於儲存配置,多盤時會顯示在url中。',
@@ -154,13 +171,25 @@ $constStr = [
'ja' => [ 'ja' => [
'admin' => 'パスワードを管理する、追加しない場合、ログインページは表示されず、ログインできません。', 'admin' => 'パスワードを管理する、追加しない場合、ログインページは表示されず、ログインできません。',
'adminloginpage' => '設定すると、ログインボタンとページが非表示になります。ログインを管理するためのページは\'?admin \'ではなく、\'?この設定の値\'。', 'adminloginpage' => '設定すると、ログインボタンとページが非表示になります。ログインを管理するためのページは\'?admin \'ではなく、\'?この設定の値\'。',
'domain_path' => '複数のカスタムドメイン名を使用する場合、各ドメイン名に表示されるディレクトリを指定します。形式はa1.com:/dirto/path1|b1.com:/path2で、private_pathよりも優先されます。', 'autoJumpFirstDisk' => '複数のディスクを使って、1を設定すると、自動的に最初のディスクにジャンプします。',
'diskname' => '', 'customScript' => '<script>は、すべてのページに存在します。例えば、httpを置いてhttpsをジャンプします。',
'disktag' => '', 'customCss' => '<style>は、<head>の一番後ろにあります。',
'downloadencrypt' => '', 'customTheme' => 'htmlフォーマットのテーマのurl',
'background' => '', 'referrer' => '',
'domain_path' => '複数のドメイン名を使用する場合、ドメイン名ごとに見られるディレクトリを指定します。フォーマットはa 1.com:/dirto/path 1.com:/path 2で、prvate_path優先。',
'diskname' => 'このディスクの名前を表示したいですか?',
'disktag' => '一つのラベルは保存配置に使い、複数のディスクはurlに表示されます。',
'disableShowThumb' => '1を記入すると、「表示サムネイル」ボタンが隠れます。',
'disableChangeTheme' => '1を記入すると、テーマ選択の切り替えが隠れます。',
'downloadencrypt' => '0または1です。もし1なら、暗号化されたディレクトリ内のファイルはパスワードなしでダウンロードできます。',
'background' => '背景にurlを設定します。',
'backgroundm' => '携帯電話用の背景としてurlを設定します。',
'theme' => 'テーマを選択します。',
'timezone' => 'プリセットタイムゾーンを設定します。',
'guestup_path' => 'マップベッドのパスを設定します。この値が設定されていない場合、ディレクトリの内容は通常ファイルにリストされ、設定後はアップロードインターフェイスのみが表示されます。', 'guestup_path' => 'マップベッドのパスを設定します。この値が設定されていない場合、ディレクトリの内容は通常ファイルにリストされ、設定後はアップロードインターフェイスのみが表示されます。',
'hideFunctionalityFile' => '0または1です。もし1ならば、いくつかの書類はリストで観光客に見せませんが、その機能は正常です。readme.md',
'passfile' => 'カスタムパスワードファイルの名前は、\'pppppp \'、\'aaaa.txt \'などの場合があります。ディレクトリをリストするときには表示されません。パスワードを知っている場合にのみ、このファイルを表示またはダウンロードできます。 パスワードはこのファイルの内容であり、スペースまたは漢字を使用できます。', 'passfile' => 'カスタムパスワードファイルの名前は、\'pppppp \'、\'aaaa.txt \'などの場合があります。ディレクトリをリストするときには表示されません。パスワードを知っている場合にのみ、このファイルを表示またはダウンロードできます。 パスワードはこのファイルの内容であり、スペースまたは漢字を使用できます。',
'domainforproxy' => '会将https://xxxy-my.sharepoint.comこの値に代えて、目標には自分で反世代を設定する必要があります。に加えて&amp;Originndomain=元のドメイン名',
'public_path' => 'APIのロングリンクアクセスを使用する場合、ネットワークディスクファイルのパスが表示されますが、設定されていない場合はデフォルトでルートディレクトリになり、private_pathの上位にはなりません(publicはprivate以上のものを見ることができません。それ以外は異なります。)。', 'public_path' => 'APIのロングリンクアクセスを使用する場合、ネットワークディスクファイルのパスが表示されますが、設定されていない場合はデフォルトでルートディレクトリになり、private_pathの上位にはなりません(publicはprivate以上のものを見ることができません。それ以外は異なります。)。',
'sitename' => 'ウェブサイト名', 'sitename' => 'ウェブサイト名',
'Onedrive_ver' => 'Onedriveバージョン', 'Onedrive_ver' => 'Onedriveバージョン',
@@ -168,13 +197,25 @@ $constStr = [
'ko-kr' => [ 'ko-kr' => [
'admin' => '비밀번호를 관리하고 로그인 페이지를 표시하지 않으며 추가하지 않으면 로그인 할 수 없습니다.', 'admin' => '비밀번호를 관리하고 로그인 페이지를 표시하지 않으며 추가하지 않으면 로그인 할 수 없습니다.',
'adminloginpage' => '설정하면 로그인 버튼과 페이지가 숨겨집니다. 로그인 관리 페이지는 더 이상 \ ?Admin\'이 아니라 \ ?이 설정의 값 \'입니다.', 'adminloginpage' => '설정하면 로그인 버튼과 페이지가 숨겨집니다. 로그인 관리 페이지는 더 이상 \ ?Admin\'이 아니라 \ ?이 설정의 값 \'입니다.',
'domain_path' => '여러 개의 사용자 정의 도메인 이름을 사용하는 경우 각 도메인 이름에 표시되는 디렉토리를 지정하십시오. 형식은 a1.com:/dirto/path1|b1.com:/path2이며 private_path보다 우선합니다.', 'autoJumpFirstDisk' => '여러 개의 디스크 에 사용 되 며, 1 이 되면 첫 번 째 디스크 로 자동 으로 이동 합 니 다.',
'diskname' => '이 디스크에 어떤 이름을 표시 하시겠습니까?', 'customScript' => '< script > 은 모든 페이지 에 존재 합 니 다. 예 를 들 어 http 을 하나 넣 고 https 로 이동 합 니 다.',
'disktag' => '레이블은 구성을 저장하는 데 사용되며 디스크가 여러 개인 경우 URL에 표시됩니다.', 'customCss' => '< 스타일 >, < 헤드 > 맨 뒤에',
'downloadencrypt' => '', 'customTheme' => 'html 형식의 테마 url',
'background' => 'URL을 배경으로 설정하거나 표시하는.', 'referrer' => '',
'guestup_path' => '방문자의 업로드 경로 (맵 베드 경로)를 설정합니다.이 값을 설정하지 않으면 디렉토리의 내용이 파일로 표시되고 설정 후에는 업로드 인터페이스 만 표시되고 파일은 표시되지 않습니다 (로그인 후 표시).', 'domain_path' => '도 메 인 이름 을 여러 개 사용자 정의 할 때 도 메 인 이름 마다 보 이 는 디 렉 터 리 를 지정 합 니 다.형식 은 a1. com: / dirto / path 1 | b1. com: / path 2, privatepath 우선.',
'passfile' => '사용자 정의 비밀번호 파일의 이름은 \'pppppp\' \'aaaa.txt \'등이 될 수 있으며 디렉토리가 나열되어 있으면 표시되지 않으며 비밀번호를 알고있는 경우에만이 파일을 보거나 다운로드 할 수 있습니다. 암호는이 파일의 내용이며 공백이거나 한국어 일 수 있습니다.', 'diskname' => '이 접시 에 당신 은 어떤 명칭 을 표시 하고 싶 습 니까?',
'disktag' => '디스크가 여러 개인 경우 구성을 저장하는 데 사용되는 레이블이 url에 표시됩니다.',
'disableShowThumb' => '1을 입력하면 “썸네일 표시”버튼이 숨겨집니다.',
'disableChangeTheme' => '1이면 테마 선택 버튼이 표시되지 않습니다.',
'downloadencrypt' => '0 또는 1 1이면 암호화 된 디렉토리의 파일을 암호없이 다운로드 할 수 있습니다.',
'background' => 'URL을 배경으로 설정하십시오.',
'backgroundm' => 'URL을 휴대폰의 배경으로 설정합니다.',
'theme' => '주제를 선택하십시오.',
'timezone' => '기본 시간대를 설정합니다.',
'guestup_path' => '게스트 업로드 경로 (사진 침대 경로)를 설정합니다.이 값을 설정하지 않으면 디렉토리의 내용이 파일로 나열됩니다. 설정 후 업로드 인터페이스 만 표시되지 않습니다 (로그인 후 표시됨).',
'hideFunctionalityFile' => '0 또는 1 1 인 경우 일부 파일이 관광객 용으로 나열되지 않지만 readme.md와 같은 기능은 정상입니다.',
'passfile' => '사용자 지정 암호 파일의 이름은 \ “pppppp \”또는 \ “aaaa.txt \”등이 될 수 있습니다. 디렉터리가 나열 될 때 표시되지 않으며 암호를 알고있는 경우에만 파일을 보거나 다운로드 할 수 있습니다. 암호는이 파일의 내용이며 공백이거나 중국어 일 수 있습니다.',
'domainforproxy' => 'https://xxxxx-my.sharepoint.com을이 값으로 바꾸고 대상에서 안티 생성을 설정해야합니다. & Origindomain = Original domain name 을 추가합니다.',
'public_path' => 'API 긴 링크 액세스를 사용하는 경우 네트워크 디스크 파일의 경로가 표시됩니다. 설정되지 않은 경우 기본적으로 루트 디렉토리로 설정됩니다.', 'public_path' => 'API 긴 링크 액세스를 사용하는 경우 네트워크 디스크 파일의 경로가 표시됩니다. 설정되지 않은 경우 기본적으로 루트 디렉토리로 설정됩니다.',
'sitename' => '웹 사이트 이름', 'sitename' => '웹 사이트 이름',
'Onedrive_ver' => 'Onedrive 버전', 'Onedrive_ver' => 'Onedrive 버전',
@@ -182,6 +223,7 @@ $constStr = [
'fa' => [ 'fa' => [
'admin' => 'رمز عبور ادمین، در صورت خالی بودن دکمه لاگین به نمایش در نمی‌آید', 'admin' => 'رمز عبور ادمین، در صورت خالی بودن دکمه لاگین به نمایش در نمی‌آید',
'adminloginpage' => 'در صورت تنظیم ، دکمه ورود نمایش داده نمی شود و صفحه ورود دیگر \?admin\ نیست بلکه \?{مقدار ورودی شما}\ است.', 'adminloginpage' => 'در صورت تنظیم ، دکمه ورود نمایش داده نمی شود و صفحه ورود دیگر \?admin\ نیست بلکه \?{مقدار ورودی شما}\ است.',
'referrer' => '',
'domain_path' => 'تنظیم دامنه سفارشی، به صورت a1.com:/dirto/path1|b2.com:/path2', 'domain_path' => 'تنظیم دامنه سفارشی، به صورت a1.com:/dirto/path1|b2.com:/path2',
'diskname' => 'نام دیسک که می‌خواهید نشان دهید.', 'diskname' => 'نام دیسک که می‌خواهید نشان دهید.',
'disktag' => 'تگی که در ذخیره پیکربندی و نشانی اینترنتی استفاده می‌شود.', 'disktag' => 'تگی که در ذخیره پیکربندی و نشانی اینترنتی استفاده می‌شود.',
@@ -193,6 +235,32 @@ $constStr = [
'sitename' => 'نام سایت', 'sitename' => 'نام سایت',
'Onedrive_ver' => 'ورژن Onedrive', 'Onedrive_ver' => 'ورژن Onedrive',
], ],
'ar-sa' => [
'admin' => ' إدارة كلمة السر ، لا يمكنك عرض صفحة تسجيل الدخول دون إضافة',
'adminloginpage' => 'إذا كان الإعداد ، زر تسجيل الدخول و الصفحة المخفية إدارة صفحة تسجيل الدخول لم تعد قيمة هذا الإعداد ؟',
'autoJumpFirstDisk' => 'على أقراص متعددة ، إذا كان واحد ، ثم الانتقال تلقائيا إلى القرص الأول',
'customScript' => 'في جميع الصفحات ، على سبيل المثال ، وضع النص المتشعب القفز HTTPS',
'customCss' => '<style>,في الجزء الخلفي من',
'customTheme' => 'أتش تي أم أل شكل عنوان الموضوع',
'referrer' => '',
'domain_path' => 'عند استخدام العديد من أسماء النطاقات المخصصة ، حدد الدليل الذي يرى كل اسم النطاق هذا هو القانون ؛ بات اولا',
'diskname' => 'ما اسم هذا القرص الذي تريد أن تظهر ؟',
'disktag' => 'العلامة التي تستخدم لحفظ التكوين ، يتم عرضها في عناوين المواقع عند تعدد الأقراص',
'disableShowThumb' => 'إذا كنت ملء ، زر عرض الاختصارات سوف تكون مخفية',
'disableChangeTheme' => 'إذا كان واحد ، لا يتم عرض زر اختيار الموضوع',
'downloadencrypt' => 'أو واحد إذا كان واحد ، ثم تشفير الملفات في الدليل يمكن تحميلها بدون كلمة السر',
'background' => 'وضع رابط كخلفية',
'backgroundm' => 'وضع رابط كخلفية على الهاتف',
'theme' => 'اختر موضوع واحد',
'timezone' => 'تعيين المنطقة الزمنية الافتراضية',
'guestup_path' => 'إذا كنت لا تضع هذه القيمة ، محتويات الدليل سوف تظهر بشكل صحيح ، فقط واجهة تحميل بعد الإعداد ، لا تظهر الملفات بعد تسجيل الدخول.',
'hideFunctionalityFile' => 'أو واحد إذا كان واحد ، بعض الملفات لا تظهر في قائمة الزوار ، ولكن وظيفتها هي طبيعية ، مثل قراءة',
'passfile' => 'يمكنك تحديد اسم ملف كلمة السر الخاصة بك ؟ النص انتظر ، لا تظهر في الكتالوج إلا إذا كنت تعرف كلمة السر ، يمكنك عرض أو تحميل هذا الملف كلمة السر هي محتوى هذه الوثيقة ، يمكنك الفضاء ، يمكنك الصينية ؛',
'domainforproxy' => 'سوف لا شيء استبدال هذه القيمة ، تحتاج إلى تعيين جيل معاكس في الهدف الخاص بك إضافة اسم النطاق الأصلي',
'public_path' => 'عند استخدام API وصلة طويلة للوصول إلى عرض مسار الملف على القرص ، إذا لم يتم تعيين الافتراضي هو الجذر ، لا يمكن أن يكون private ش لا يمكن أن نرى أكثر من private publics ، أو لا',
'sitename' => 'اسم الموقع',
'Onedrive_ver' => 'أوندريف',
],
], ],
'SetSecretsFirst' => [ 'SetSecretsFirst' => [
'en-us' => 'Set API in Config first! or reinstall.', 'en-us' => 'Set API in Config first! or reinstall.',
@@ -201,6 +269,7 @@ $constStr = [
'ja' => '最初に環境変数にAPIを設定してください!', 'ja' => '最初に環境変数にAPIを設定してください!',
'ko-kr' => '먼저 환경 변수에서 API를 설정하십시오! 또는 다시 설치하십시오.', 'ko-kr' => '먼저 환경 변수에서 API를 설정하십시오! 또는 다시 설치하십시오.',
'fa' => 'ابتدا API را در پیکربندی تنظیم کنید! یا دوباره نصب کنید.', 'fa' => 'ابتدا API را در پیکربندی تنظیم کنید! یا دوباره نصب کنید.',
'ar-sa' => 'وضع المعهد في بيئة متغيرة أو أعد التحميل',
], ],
'RefreshtoLogin' => [ 'RefreshtoLogin' => [
'en-us' => '<font color="red">Refresh</font> and login.', 'en-us' => '<font color="red">Refresh</font> and login.',
@@ -209,6 +278,7 @@ $constStr = [
'ja' => 'ページを<font color = "red">更新</font>して、再度ログインしてください', 'ja' => 'ページを<font color = "red">更新</font>して、再度ログインしてください',
'ko-kr' => '페이지를 <font color = "red"> 새로 고침 </ font> 하시고 다시 로그인하십시오', 'ko-kr' => '페이지를 <font color = "red"> 새로 고침 </ font> 하시고 다시 로그인하십시오',
'fa' => '<font color="red">رفرش</font> و لاگین.', 'fa' => '<font color="red">رفرش</font> و لاگین.',
'ar-sa' => 'الرجاء إعادة تسجيل الدخول بعد تحديث الصفحة',
], ],
'AdminLogin' => [ 'AdminLogin' => [
'en-us' => 'Admin Login', 'en-us' => 'Admin Login',
@@ -217,6 +287,7 @@ $constStr = [
'ja' => 'ログインを管理する', 'ja' => 'ログインを管理する',
'ko-kr' => '로그인 관리', 'ko-kr' => '로그인 관리',
'fa' => 'ورود ادمین', 'fa' => 'ورود ادمین',
'ar-sa' => 'إدارة تسجيل الدخول',
], ],
'LoginSuccess' => [ 'LoginSuccess' => [
'en-us' => 'Login Success!', 'en-us' => 'Login Success!',
@@ -225,6 +296,7 @@ $constStr = [
'ja' => 'ログイン成功、ジャンプ', 'ja' => 'ログイン成功、ジャンプ',
'ko-kr' => '로그인 성공, 점프', 'ko-kr' => '로그인 성공, 점프',
'fa' => 'ورود با موفقیت انجام شد!', 'fa' => 'ورود با موفقیت انجام شد!',
'ar-sa' => 'تسجيل الدخول بنجاح ، القفز',
], ],
'InputPassword' => [ 'InputPassword' => [
'en-us' => 'Input Password', 'en-us' => 'Input Password',
@@ -233,6 +305,7 @@ $constStr = [
'ja' => 'パスワードを入力してください', 'ja' => 'パスワードを入力してください',
'ko-kr' => '비밀번호 입력', 'ko-kr' => '비밀번호 입력',
'fa' => 'رمز عبور را وارد کنید', 'fa' => 'رمز عبور را وارد کنید',
'ar-sa' => 'أدخل كلمة المرور',
], ],
'Login' => [ 'Login' => [
'en-us' => 'Login', 'en-us' => 'Login',
@@ -241,6 +314,7 @@ $constStr = [
'ja' => 'サインイン', 'ja' => 'サインイン',
'ko-kr' => '로그인', 'ko-kr' => '로그인',
'fa' => 'ورود', 'fa' => 'ورود',
'ar-sa' => 'تسجيل الدخول',
], ],
'Encrypt' => [ 'Encrypt' => [
'en-us' => 'Encrypt', 'en-us' => 'Encrypt',
@@ -249,14 +323,16 @@ $constStr = [
'ja' => '暗号化', 'ja' => '暗号化',
'ko-kr' => '암호화', 'ko-kr' => '암호화',
'fa' => 'رمزگذاری', 'fa' => 'رمزگذاری',
'ar-sa' => 'مشفر',
], ],
'SetpassfileBfEncrypt' => [ 'SetpassfileBfEncrypt' => [
'en-us' => 'Set \'passfile\' in Environments before encrypt', 'en-us' => 'Set \'passfile\' in Environments before encrypt',
'zh-cn' => '先在环境变量设置passfile才能加密', 'zh-cn' => '先设置passfile才能加密',
'zh-tw' => '先在環境變數設定passfile才能加密', 'zh-tw' => '先設定passfile才能加密',
'ja' => '最初に暗号化する環境変数にパスファイルを設定します', 'ja' => '最初に暗号化する変数にパスファイルを設定します',
'ko-kr' => '암호화하기 전에 환경 변수에 패스 파일을 설정하십시오', 'ko-kr' => '암호화하기 전에 환경 변수에 패스 파일을 설정하십시오',
'fa' => 'قبل از رمزگذاری \"pass file \" را در محیط تنظیم کنید', 'fa' => 'قبل از رمزگذاری \"passfile \" را در محیط تنظیم کنید',
'ar-sa' => 'أولا تعيين متغير البيئة passfile لتشفير',
], ],
'updateProgram' => [ 'updateProgram' => [
'en-us' => 'Update Program', 'en-us' => 'Update Program',
@@ -265,6 +341,7 @@ $constStr = [
'ja' => 'ワンクリック更新', 'ja' => 'ワンクリック更新',
'ko-kr' => '원 클릭 업데이트', 'ko-kr' => '원 클릭 업데이트',
'fa' => 'برنامه را به روز کنید', 'fa' => 'برنامه را به روز کنید',
'ar-sa' => 'تحديث',
], ],
'UpdateSuccess' => [ 'UpdateSuccess' => [
'en-us' => 'Program update Success!', 'en-us' => 'Program update Success!',
@@ -273,6 +350,7 @@ $constStr = [
'ja' => 'プログラムのアップグレードに成功しました!', 'ja' => 'プログラムのアップグレードに成功しました!',
'ko-kr' => '프로그램 업그레이드 성공!', 'ko-kr' => '프로그램 업그레이드 성공!',
'fa' => 'موفقیت به روز رسانی برنامه!', 'fa' => 'موفقیت به روز رسانی برنامه!',
'ar-sa' => 'ترقية البرنامج بنجاح',
], ],
'Setup' => [ 'Setup' => [
'en-us' => 'Setup', 'en-us' => 'Setup',
@@ -281,6 +359,7 @@ $constStr = [
'ja' => '設定する', 'ja' => '設定する',
'ko-kr' => '설정', 'ko-kr' => '설정',
'fa' => 'نصب', 'fa' => 'نصب',
'ar-sa' => 'إعداد',
], ],
'Back' => [ 'Back' => [
'en-us' => 'Back', 'en-us' => 'Back',
@@ -289,11 +368,16 @@ $constStr = [
'ja' => 'back', 'ja' => 'back',
'ko-kr' => '돌아 가기', 'ko-kr' => '돌아 가기',
'fa' => 'بازگشت', 'fa' => 'بازگشت',
'ar-sa' => 'رجع',
], ],
'Theme' => [ 'Theme' => [
'en-us' => 'Theme', 'en-us' => 'Theme',
'zh-cn' => '主题', 'zh-cn' => '主题',
'zh-tw' => '主題', 'zh-tw' => '主題',
'ja' => 'テーマ',
'ko-kr' => '주제.',
'fa' => 'عنوان',
'ar-sa' => 'الثيمات',
], ],
'NotNeedUpdate' => [ 'NotNeedUpdate' => [
'en-us' => 'Not Need Update', 'en-us' => 'Not Need Update',
@@ -302,6 +386,7 @@ $constStr = [
'ja' => '更新不要', 'ja' => '更新不要',
'ko-kr' => '업데이트가 필요하지 않습니다', 'ko-kr' => '업데이트가 필요하지 않습니다',
'fa' => 'آپدیت لازم نیست', 'fa' => 'آپدیت لازم نیست',
'ar-sa' => 'لا تحتاج إلى تحديث',
], ],
'PlatformConfig' => [ 'PlatformConfig' => [
'en-us' => 'Platform Config', 'en-us' => 'Platform Config',
@@ -310,6 +395,7 @@ $constStr = [
'ja' => 'プラットフォーム変数', 'ja' => 'プラットフォーム変数',
'ko-kr' => '플랫폼 변수', 'ko-kr' => '플랫폼 변수',
'fa' => 'پیکربندی پلتفرم', 'fa' => 'پیکربندی پلتفرم',
'ar-sa' => 'منصة متغير',
], ],
'DragSort' => [ 'DragSort' => [
'en-us' => 'Drag to Sort Disk', 'en-us' => 'Drag to Sort Disk',
@@ -328,19 +414,30 @@ $constStr = [
'ja' => 'このディスクを削除', 'ja' => 'このディスクを削除',
'ko-kr' => '이 디스크를 삭제', 'ko-kr' => '이 디스크를 삭제',
'fa' => 'پاک کردن این دیسک', 'fa' => 'پاک کردن این دیسک',
'ar-sa' => 'حذف هذا القرص',
],
'CopyDisk' => [
'en-us' => 'Copy this Disk',
'zh-cn' => '复制此盘',
], ],
'RenameDisk' => [ 'RenameDisk' => [
'en-us' => 'Rename Disk Tag', 'en-us' => 'Rename Disk Tag',
'zh-cn' => '改变标签', 'zh-cn' => '改变标签',
'zh-tw' => '修改標籤', 'zh-tw' => '修改標籤',
'ar-sa' => 'تغيير التسمية',
],
'ChangeDrivetype' => [
'en-us' => 'Change',
'zh-cn' => '切换',
], ],
'AddDisk' => [ 'AddDisk' => [
'en-us' => 'Add Onedrive Disk', 'en-us' => 'Add Disk',
'zh-cn' => '添加Onedrive盘', 'zh-cn' => '添加盘',
'zh-tw' => '新增Onedrive盤', 'zh-tw' => '新增盤',
'ja' => 'Onedriveを追加', 'ja' => 'を追加',
'ko-kr' => 'Onedrive 추가', 'ko-kr' => '추가',
'fa' => 'اضافه کردن دیسک Onedrive', 'fa' => 'اضافه کردن دیسک ',
'ar-sa' => 'إضافة قرص',
], ],
'Home' => [ 'Home' => [
'en-us' => 'Home', 'en-us' => 'Home',
@@ -349,16 +446,25 @@ $constStr = [
'ja' => 'ホーム', 'ja' => 'ホーム',
'ko-kr' => '홈', 'ko-kr' => '홈',
'fa' => 'خانه', 'fa' => 'خانه',
'ar-sa' => 'فرونت بيج',
], ],
'Preview' => [ 'Preview' => [
'en-us' => 'Preview', 'en-us' => 'Preview',
'zh-cn' => '预览', 'zh-cn' => '预览',
'zh-tw' => '預覽', 'zh-tw' => '預覽',
'ja' => 'プレビュー',
'ko-kr' => '미리보기',
'fa' => 'پیش‌نمایش',
'ar-sa' => 'معاينة',
], ],
'List' => [ 'List' => [
'en-us' => 'List', 'en-us' => 'List',
'zh-cn' => '列表', 'zh-cn' => '列表',
'zh-tw' => '列表', 'zh-tw' => '列表',
'ja' => 'リスト',
'ko-kr' => '리스트',
'fa' => 'فهرست',
'ar-sa' => 'الليست',
], ],
'NeedUpdate' => [ 'NeedUpdate' => [
'en-us' => 'Program can update<br>Click setup in Operate at top.', 'en-us' => 'Program can update<br>Click setup in Operate at top.',
@@ -367,6 +473,7 @@ $constStr = [
'ja' => 'プログラムをアップグレードできます<br>上記の管理メニューで<br>アップグレードする設定ページに入ります', 'ja' => 'プログラムをアップグレードできます<br>上記の管理メニューで<br>アップグレードする設定ページに入ります',
'ko-kr' => '프로그램을 업그레이드 할 수 있습니다. <br> 위의 관리 메뉴에서 <br> 업그레이드 할 설정 페이지를 입력하십시오.', 'ko-kr' => '프로그램을 업그레이드 할 수 있습니다. <br> 위의 관리 메뉴에서 <br> 업그레이드 할 설정 페이지를 입력하십시오.',
'fa' => 'برنامه می تواند آپدیت شود<br>روی گزینه نصب در بالای صفحه کلیک کنید.', 'fa' => 'برنامه می تواند آپدیت شود<br>روی گزینه نصب در بالای صفحه کلیک کنید.',
'ar-sa' => 'يمكن ترقية البرنامج في القائمة أعلاه إدارة',
], ],
'Operate' => [ 'Operate' => [
'en-us' => 'Operate', 'en-us' => 'Operate',
@@ -375,14 +482,16 @@ $constStr = [
'ja' => '管理', 'ja' => '管理',
'ko-kr' => '관리', 'ko-kr' => '관리',
'fa' => 'مدیریت', 'fa' => 'مدیریت',
'ar-sa' => 'الإدارة',
], ],
'Logout' => [ 'Logout' => [
'en-us' => 'Logout', 'en-us' => 'Logout',
'zh-cn' => '出', 'zh-cn' => '退出',
'zh-tw' => '登出', 'zh-tw' => '登出',
'ja' => 'ログアウトする', 'ja' => 'ログアウトする',
'ko-kr' => '로그 아웃', 'ko-kr' => '로그 아웃',
'fa' => 'خروج', 'fa' => 'خروج',
'ar-sa' => 'انسحب',
], ],
'Create' => [ 'Create' => [
'en-us' => 'Create', 'en-us' => 'Create',
@@ -391,6 +500,7 @@ $constStr = [
'ja' => '新しい', 'ja' => '新しい',
'ko-kr' => '새로운', 'ko-kr' => '새로운',
'fa' => 'ایجاد کردن', 'fa' => 'ایجاد کردن',
'ar-sa' => 'بنيت حديثا',
], ],
'Download' => [ 'Download' => [
'en-us' => 'download', 'en-us' => 'download',
@@ -399,6 +509,7 @@ $constStr = [
'ja' => 'ダウンロードする', 'ja' => 'ダウンロードする',
'ko-kr' => '다운로드', 'ko-kr' => '다운로드',
'fa' => 'دانلود', 'fa' => 'دانلود',
'ar-sa' => 'داون لود',
], ],
'ClicktoEdit' => [ 'ClicktoEdit' => [
'en-us' => 'Click to edit', 'en-us' => 'Click to edit',
@@ -407,6 +518,7 @@ $constStr = [
'ja' => 'クリック後に編集', 'ja' => 'クリック後に編集',
'ko-kr' => '클릭 후 편집', 'ko-kr' => '클릭 후 편집',
'fa' => 'برای ویرایش کلیک کنید', 'fa' => 'برای ویرایش کلیک کنید',
'ar-sa' => 'انقر فوق تحرير',
], ],
'Save' => [ 'Save' => [
'en-us' => 'Save', 'en-us' => 'Save',
@@ -415,6 +527,7 @@ $constStr = [
'ja' => '保存する', 'ja' => '保存する',
'ko-kr' => '저장', 'ko-kr' => '저장',
'fa' => 'ذخیره', 'fa' => 'ذخیره',
'ar-sa' => 'حفظ',
], ],
'FileNotSupport' => [ 'FileNotSupport' => [
'en-us' => 'File not support preview.', 'en-us' => 'File not support preview.',
@@ -423,6 +536,7 @@ $constStr = [
'ja' => 'ファイル形式はプレビューをサポートしていません', 'ja' => 'ファイル形式はプレビューをサポートしていません',
'ko-kr' => '파일 형식은 미리보기를 지원하지 않습니다', 'ko-kr' => '파일 형식은 미리보기를 지원하지 않습니다',
'fa' => 'پیش نمایش برای این فایل پشتیبانی نمی شود.', 'fa' => 'پیش نمایش برای این فایل پشتیبانی نمی شود.',
'ar-sa' => 'معاينة الملف غير معتمد',
], ],
'File' => [ 'File' => [
'en-us' => 'File', 'en-us' => 'File',
@@ -431,6 +545,7 @@ $constStr = [
'ja' => 'ファイル', 'ja' => 'ファイル',
'ko-kr' => '파일', 'ko-kr' => '파일',
'fa' => 'فایل', 'fa' => 'فایل',
'ar-sa' => 'فايل',
], ],
'ShowThumbnails' => [ 'ShowThumbnails' => [
'en-us' => 'Thumbnails', 'en-us' => 'Thumbnails',
@@ -439,11 +554,16 @@ $constStr = [
'ja' => '画像のサムネイル', 'ja' => '画像のサムネイル',
'ko-kr' => '사진 섬네일', 'ko-kr' => '사진 섬네일',
'fa' => 'تصویر بندانگشتی', 'fa' => 'تصویر بندانگشتی',
'ar-sa' => 'تجاهل الصورة',
], ],
'OriginalPic' => [ 'OriginalPic' => [
'en-us' => 'OriginalPic', 'en-us' => 'OriginalPic',
'zh-cn' => '原图', 'zh-cn' => '原图',
'zh-tw' => '原圖', 'zh-tw' => '原圖',
'ja' => '原図',
'ko-kr' => '원 도',
'fa' => 'تصویر اصلی',
'ar-sa' => 'الصورة الأصلية',
], ],
'CopyAllDownloadUrl' => [ 'CopyAllDownloadUrl' => [
'en-us' => 'CopyAllDownloadUrl', 'en-us' => 'CopyAllDownloadUrl',
@@ -452,11 +572,16 @@ $constStr = [
'ja' => 'すべてのダウンロードリンクをコピー', 'ja' => 'すべてのダウンロードリンクをコピー',
'ko-kr' => '모든 다운로드 링크 복사', 'ko-kr' => '모든 다운로드 링크 복사',
'fa' => 'کپی از تمام لینک ها', 'fa' => 'کپی از تمام لینک ها',
'ar-sa' => 'نسخ جميع روابط التحميل',
], ],
'Search' => [ 'Search' => [
'en-us' => 'Search', 'en-us' => 'Search',
'zh-cn' => '搜索', 'zh-cn' => '搜索',
'zh-tw' => '搜尋', 'zh-tw' => '搜尋',
'ja' => '検索',
'ko-kr' => '수색 하 다.',
'fa' => 'جستجو',
'ar-sa' => 'بحث',
], ],
'EditTime' => [ 'EditTime' => [
'en-us' => 'EditTime', 'en-us' => 'EditTime',
@@ -465,6 +590,7 @@ $constStr = [
'ja' => '変更時間', 'ja' => '変更時間',
'ko-kr' => '수정 시간', 'ko-kr' => '수정 시간',
'fa' => 'زمان ویرایش', 'fa' => 'زمان ویرایش',
'ar-sa' => 'تعديل الوقت',
], ],
'Size' => [ 'Size' => [
'en-us' => 'Size', 'en-us' => 'Size',
@@ -473,6 +599,7 @@ $constStr = [
'ja' => 'サイズ ', 'ja' => 'サイズ ',
'ko-kr' => '사이즈', 'ko-kr' => '사이즈',
'fa' => 'سایز', 'fa' => 'سایز',
'ar-sa' => 'مقاس',
], ],
'Rename' => [ 'Rename' => [
'en-us' => 'Rename', 'en-us' => 'Rename',
@@ -481,6 +608,7 @@ $constStr = [
'ja' => '名前を変更', 'ja' => '名前を変更',
'ko-kr' => '이름 바꾸기', 'ko-kr' => '이름 바꾸기',
'fa' => 'تغییر نام', 'fa' => 'تغییر نام',
'ar-sa' => 'إعادة تسمية',
], ],
'Move' => [ 'Move' => [
'en-us' => 'Move', 'en-us' => 'Move',
@@ -489,6 +617,7 @@ $constStr = [
'ja' => '移動する', 'ja' => '移動する',
'ko-kr' => '이동', 'ko-kr' => '이동',
'fa' => 'انتقال', 'fa' => 'انتقال',
'ar-sa' => 'تحرك',
], ],
'Copy' => [ 'Copy' => [
'en-us' => 'Copy', 'en-us' => 'Copy',
@@ -497,6 +626,7 @@ $constStr = [
'ja' => 'コピー', 'ja' => 'コピー',
'ko-kr' => '복사', 'ko-kr' => '복사',
'fa' => 'کپی', 'fa' => 'کپی',
'ar-sa' => 'نسخ',
], ],
'CannotMove' => [ 'CannotMove' => [
'en-us' => 'Can not Move!', 'en-us' => 'Can not Move!',
@@ -505,6 +635,7 @@ $constStr = [
'ja' => '動かない!', 'ja' => '動かない!',
'ko-kr' => '움직일 수 없어!', 'ko-kr' => '움직일 수 없어!',
'fa' => 'نمی‌تواند منتقل شود!', 'fa' => 'نمی‌تواند منتقل شود!',
'ar-sa' => 'لا تتحرك',
], ],
'Delete' => [ 'Delete' => [
'en-us' => 'Delete', 'en-us' => 'Delete',
@@ -513,6 +644,7 @@ $constStr = [
'ja' => '削除する', 'ja' => '削除する',
'ko-kr' => '삭제', 'ko-kr' => '삭제',
'fa' => 'حذف کردن', 'fa' => 'حذف کردن',
'ar-sa' => 'حذف',
], ],
'PrePage' => [ 'PrePage' => [
'en-us' => 'PrePage', 'en-us' => 'PrePage',
@@ -521,6 +653,7 @@ $constStr = [
'ja' => '前へ', 'ja' => '前へ',
'ko-kr' => '이전', 'ko-kr' => '이전',
'fa' => 'صفحه قبل', 'fa' => 'صفحه قبل',
'ar-sa' => 'الصفحة السابقة',
], ],
'NextPage' => [ 'NextPage' => [
'en-us' => 'NextPage', 'en-us' => 'NextPage',
@@ -529,6 +662,7 @@ $constStr = [
'ja' => '次のページ', 'ja' => '次のページ',
'ko-kr' => '다음 페이지', 'ko-kr' => '다음 페이지',
'fa' => 'صفحه بعد', 'fa' => 'صفحه بعد',
'ar-sa' => 'الصفحة التالية',
], ],
'Upload' => [ 'Upload' => [
'en-us' => 'Upload', 'en-us' => 'Upload',
@@ -537,16 +671,25 @@ $constStr = [
'ja' => 'アップロードする', 'ja' => 'アップロードする',
'ko-kr' => '업로드', 'ko-kr' => '업로드',
'fa' => 'آپلود', 'fa' => 'آپلود',
'ar-sa' => 'ابلود',
], ],
'UploadFile' => [ 'UploadFile' => [
'en-us' => 'Upload File(s)', 'en-us' => 'Upload File(s)',
'zh-cn' => '上传文件', 'zh-cn' => '上传文件',
'zh-tw' => '上傳文件', 'zh-tw' => '上傳文件',
'ja' => 'ファイルをアップロード',
'ko-kr' => '문건 을 업로드 하 다',
'fa' => 'بارگذاری پرونده',
'ar-sa' => 'تحميل الملف',
], ],
'UploadFolder' => [ 'UploadFolder' => [
'en-us' => 'Upload Folder', 'en-us' => 'Upload Folder',
'zh-cn' => '上传文件夹', 'zh-cn' => '上传文件夹',
'zh-tw' => '上傳資料夾', 'zh-tw' => '上傳資料夾',
'ja' => 'フォルダをアップロード',
'ko-kr' => '폴 더 업로드',
'fa' => 'بارگذاری پوشه',
'ar-sa' => 'تحميل ملف',
], ],
'FileSelected' => [ 'FileSelected' => [
'en-us' => 'Select File', 'en-us' => 'Select File',
@@ -555,6 +698,7 @@ $constStr = [
'ja' => 'ファイルを選択', 'ja' => 'ファイルを選択',
'ko-kr' => '파일 선택', 'ko-kr' => '파일 선택',
'fa' => 'انتخاب فایل', 'fa' => 'انتخاب فایل',
'ar-sa' => 'اختر ملف',
], ],
'NoFileSelected' => [ 'NoFileSelected' => [
'en-us' => 'Not Select File', 'en-us' => 'Not Select File',
@@ -563,6 +707,7 @@ $constStr = [
'ja' => 'ファイルが選択されていません', 'ja' => 'ファイルが選択されていません',
'ko-kr' => '선택된 파일이 없습니다', 'ko-kr' => '선택된 파일이 없습니다',
'fa' => 'فایل را انتخاب نکنید', 'fa' => 'فایل را انتخاب نکنید',
'ar-sa' => 'لا يوجد ملف محدد',
], ],
'Submit' => [ 'Submit' => [
'en-us' => 'Submit', 'en-us' => 'Submit',
@@ -571,6 +716,7 @@ $constStr = [
'ja' => '確認する', 'ja' => '確認する',
'ko-kr' => '확인', 'ko-kr' => '확인',
'fa' => 'ارسال', 'fa' => 'ارسال',
'ar-sa' => 'أكد',
], ],
'Close' => [ 'Close' => [
'en-us' => 'Close', 'en-us' => 'Close',
@@ -579,6 +725,7 @@ $constStr = [
'ja' => '閉じる', 'ja' => '閉じる',
'ko-kr' => '닫기', 'ko-kr' => '닫기',
'fa' => 'بستن', 'fa' => 'بستن',
'ar-sa' => 'مغلق',
], ],
'InputPasswordUWant' => [ 'InputPasswordUWant' => [
'en-us' => 'Input Password you Want', 'en-us' => 'Input Password you Want',
@@ -587,6 +734,7 @@ $constStr = [
'ja' => '設定するパスワードを入力してください', 'ja' => '設定するパスワードを入力してください',
'ko-kr' => '설정하려는 비밀번호를 입력하십시오', 'ko-kr' => '설정하려는 비밀번호를 입력하십시오',
'fa' => 'پسورد خود را وارد کنید', 'fa' => 'پسورد خود را وارد کنید',
'ar-sa' => 'أدخل كلمة السر التي تريد تعيين',
], ],
'ParentDir' => [ 'ParentDir' => [
'en-us' => 'Parent Dir', 'en-us' => 'Parent Dir',
@@ -595,6 +743,7 @@ $constStr = [
'ja' => '親ディレクトリ', 'ja' => '親ディレクトリ',
'ko-kr' => '부모 디렉토리', 'ko-kr' => '부모 디렉토리',
'fa' => 'مسیر', 'fa' => 'مسیر',
'ar-sa' => 'الدليل السابق',
], ],
'Folder' => [ 'Folder' => [
'en-us' => 'Folder', 'en-us' => 'Folder',
@@ -603,6 +752,7 @@ $constStr = [
'ja' => 'フォルダー', 'ja' => 'フォルダー',
'ko-kr' => '폴더', 'ko-kr' => '폴더',
'fa' => 'پوشه', 'fa' => 'پوشه',
'ar-sa' => 'فولدر',
], ],
'Name' => [ 'Name' => [
'en-us' => 'Name', 'en-us' => 'Name',
@@ -611,6 +761,7 @@ $constStr = [
'ja' => '名前', 'ja' => '名前',
'ko-kr' => '이름', 'ko-kr' => '이름',
'fa' => 'نام', 'fa' => 'نام',
'ar-sa' => 'إسم',
], ],
'Content' => [ 'Content' => [
'en-us' => 'Content', 'en-us' => 'Content',
@@ -619,6 +770,7 @@ $constStr = [
'ja' => '内容', 'ja' => '内容',
'ko-kr' => '내용', 'ko-kr' => '내용',
'fa' => 'محتوا', 'fa' => 'محتوا',
'ar-sa' => 'المحتويات',
], ],
'CancelEdit' => [ 'CancelEdit' => [
'en-us' => 'Cancel Edit', 'en-us' => 'Cancel Edit',
@@ -627,6 +779,7 @@ $constStr = [
'ja' => '編集をキャンセル', 'ja' => '編集をキャンセル',
'ko-kr' => '편집 취소', 'ko-kr' => '편집 취소',
'fa' => 'لغو ویرایش', 'fa' => 'لغو ویرایش',
'ar-sa' => 'إلغاء تحرير',
], ],
'GetFileNameFail' => [ 'GetFileNameFail' => [
'en-us' => 'Fail to Get File Name!', 'en-us' => 'Fail to Get File Name!',
@@ -635,6 +788,7 @@ $constStr = [
'ja' => 'ファイル名を取得できませんでした!', 'ja' => 'ファイル名を取得できませんでした!',
'ko-kr' => '파일 이름을 가져 오지 못했습니다!', 'ko-kr' => '파일 이름을 가져 오지 못했습니다!',
'fa' => 'نام فایل به دست نیامد!', 'fa' => 'نام فایل به دست نیامد!',
'ar-sa' => 'فشل الحصول على اسم الملف',
], ],
'GetUploadLink' => [ 'GetUploadLink' => [
'en-us' => 'Get Upload Link', 'en-us' => 'Get Upload Link',
@@ -643,11 +797,16 @@ $constStr = [
'ja' => 'アップロードリンクを取得', 'ja' => 'アップロードリンクを取得',
'ko-kr' => '업로드 링크 받기', 'ko-kr' => '업로드 링크 받기',
'fa' => 'دریافت لینک آپلود', 'fa' => 'دریافت لینک آپلود',
'ar-sa' => 'الحصول على رابط التحميل',
], ],
'Calculate' => [ 'Calculate' => [
'en-us' => 'Calculate', 'en-us' => 'Calculate',
'zh-cn' => '计算', 'zh-cn' => '计算',
'zh-tw' => '計算', 'zh-tw' => '計算',
'ja' => '計算する',
'ko-kr' => '계산 하 다.',
'fa' => 'محاسبه',
'ar-sa' => 'محسوب',
], ],
'UpFileTooLarge' => [ 'UpFileTooLarge' => [
'en-us' => 'The File is too Large!', 'en-us' => 'The File is too Large!',
@@ -656,6 +815,7 @@ $constStr = [
'ja' => '超えると、アップロードは終了します。', 'ja' => '超えると、アップロードは終了します。',
'ko-kr' => '파일이 너무 커서 업로드가 종료되었습니다.', 'ko-kr' => '파일이 너무 커서 업로드가 종료되었습니다.',
'fa' => 'فایل خیلی بزرگ است!', 'fa' => 'فایل خیلی بزرگ است!',
'ar-sa' => 'الملف كبير جدا ، إنهاء التحميل',
], ],
'UploadStart' => [ 'UploadStart' => [
'en-us' => 'Upload Start', 'en-us' => 'Upload Start',
@@ -664,6 +824,7 @@ $constStr = [
'ja' => 'アップロードを開始', 'ja' => 'アップロードを開始',
'ko-kr' => '업로드 시작', 'ko-kr' => '업로드 시작',
'fa' => 'شروع آپلود', 'fa' => 'شروع آپلود',
'ar-sa' => 'بدء التحميل',
], ],
'UploadStartAt' => [ 'UploadStartAt' => [
'en-us' => 'Start At', 'en-us' => 'Start At',
@@ -672,6 +833,7 @@ $constStr = [
'ja' => 'で開始', 'ja' => 'で開始',
'ko-kr' => '에서 시작', 'ko-kr' => '에서 시작',
'fa' => 'شروع از', 'fa' => 'شروع از',
'ar-sa' => 'تبدأ في',
], ],
'ThisTime' => [ 'ThisTime' => [
'en-us' => 'This Time', 'en-us' => 'This Time',
@@ -680,6 +842,7 @@ $constStr = [
'ja' => '今回は', 'ja' => '今回は',
'ko-kr' => '이번에는', 'ko-kr' => '이번에는',
'fa' => 'این زمان', 'fa' => 'این زمان',
'ar-sa' => 'هذه المرة',
], ],
'LastUpload' => [ 'LastUpload' => [
'en-us' => 'Last time Upload', 'en-us' => 'Last time Upload',
@@ -688,6 +851,7 @@ $constStr = [
'ja' => '上回は', 'ja' => '上回は',
'ko-kr' => '마지막 업로드', 'ko-kr' => '마지막 업로드',
'fa' => 'آخرین زمان آپلود', 'fa' => 'آخرین زمان آپلود',
'ar-sa' => 'آخر تحميل',
], ],
'AverageSpeed' => [ 'AverageSpeed' => [
'en-us' => 'AverageSpeed', 'en-us' => 'AverageSpeed',
@@ -696,6 +860,7 @@ $constStr = [
'ja' => '平均速度', 'ja' => '平均速度',
'ko-kr' => '평균 속도', 'ko-kr' => '평균 속도',
'fa' => 'میانگین سرعت', 'fa' => 'میانگین سرعت',
'ar-sa' => 'متوسط السرعة',
], ],
'CurrentSpeed' => [ 'CurrentSpeed' => [
'en-us' => 'CurrentSpeed', 'en-us' => 'CurrentSpeed',
@@ -704,6 +869,7 @@ $constStr = [
'ja' => 'インスタントスピード', 'ja' => 'インスタントスピード',
'ko-kr' => '즉각적인 속도', 'ko-kr' => '즉각적인 속도',
'fa' => 'سرعت فعلی', 'fa' => 'سرعت فعلی',
'ar-sa' => 'سرعة فورية',
], ],
'Expect' => [ 'Expect' => [
'en-us' => 'Expect', 'en-us' => 'Expect',
@@ -712,6 +878,7 @@ $constStr = [
'ja' => '期待される', 'ja' => '期待される',
'ko-kr' => '예상', 'ko-kr' => '예상',
'fa' => 'انتظار', 'fa' => 'انتظار',
'ar-sa' => 'ومن المتوقع أيضا',
], ],
'EndAt' => [ 'EndAt' => [
'en-us' => 'End At', 'en-us' => 'End At',
@@ -720,6 +887,7 @@ $constStr = [
'ja' => 'で終了', 'ja' => 'で終了',
'ko-kr' => '에 끝남', 'ko-kr' => '에 끝남',
'fa' => 'پایان از', 'fa' => 'پایان از',
'ar-sa' => 'نهاية',
], ],
'UploadErrorUpAgain' => [ 'UploadErrorUpAgain' => [
'en-us' => 'Maybe error, do upload again.', 'en-us' => 'Maybe error, do upload again.',
@@ -728,6 +896,7 @@ $constStr = [
'ja' => '間違っている可能性があります。もう一度アップロードしてください。', 'ja' => '間違っている可能性があります。もう一度アップロードしてください。',
'ko-kr' => '잘못되었을 수 있습니다. 다시 업로드하십시오.', 'ko-kr' => '잘못되었을 수 있습니다. 다시 업로드하십시오.',
'fa' => 'خطا، دوباره آپلود کنید', 'fa' => 'خطا، دوباره آپلود کنید',
'ar-sa' => 'قد تكون خاطئة ، إعادة تحميل',
], ],
'UploadComplete' => [ 'UploadComplete' => [
'en-us' => 'Upload Complete', 'en-us' => 'Upload Complete',
@@ -736,6 +905,7 @@ $constStr = [
'ja' => 'アップロード完了', 'ja' => 'アップロード完了',
'ko-kr' => '업로드 완료', 'ko-kr' => '업로드 완료',
'fa' => 'آپلود با موفقیت انجام شد', 'fa' => 'آپلود با موفقیت انجام شد',
'ar-sa' => 'تحميل كامل',
], ],
'UploadFail23' => [ 'UploadFail23' => [
'en-us' => 'Upload Fail, contain #.', 'en-us' => 'Upload Fail, contain #.',
@@ -744,6 +914,7 @@ $constStr = [
'ja' => 'ディレクトリまたはファイル名に#が含まれています。アップロードに失敗しました。', 'ja' => 'ディレクトリまたはファイル名に#が含まれています。アップロードに失敗しました。',
'ko-kr' => '디렉토리 또는 파일 이름에 #이 포함되어 있습니다. 업로드하지 못했습니다.', 'ko-kr' => '디렉토리 또는 파일 이름에 #이 포함되어 있습니다. 업로드하지 못했습니다.',
'fa' => 'بارگذاری ناموفق، حاوی #.', 'fa' => 'بارگذاری ناموفق، حاوی #.',
'ar-sa' => 'دليل أو اسم الملف يحتوي على تحميل فشلت',
], ],
'defaultSitename' => [ 'defaultSitename' => [
'en-us' => 'OneManager', 'en-us' => 'OneManager',
@@ -755,6 +926,7 @@ $constStr = [
'ja' => 'refresh_tokenを保存しています!', 'ja' => 'refresh_tokenを保存しています!',
'ko-kr' => 'refresh_token 저장 중!', 'ko-kr' => 'refresh_token 저장 중!',
'fa' => 'در حال ذخیره refresh_token!', 'fa' => 'در حال ذخیره refresh_token!',
'ar-sa' => 'حفظ refresh ش توكن',
], ],
'MayinEnv' => [ 'MayinEnv' => [
'en-us' => 'The \'Drive_ver\' may in Config', 'en-us' => 'The \'Drive_ver\' may in Config',
@@ -763,6 +935,7 @@ $constStr = [
'ja' => 'Drive_verは環境変数に書き込まれている必要があります', 'ja' => 'Drive_verは環境変数に書き込まれている必要があります',
'ko-kr' => 'Drive_verが書き込まれている必要があります', 'ko-kr' => 'Drive_verが書き込まれている必要があります',
'fa' => 'The \'Drive_ver\' may in Config', 'fa' => 'The \'Drive_ver\' may in Config',
'ar-sa' => 'درايو يجب أن يكون مكتوب على',
], ],
'Wait' => [ 'Wait' => [
'en-us' => 'Wait', 'en-us' => 'Wait',
@@ -771,6 +944,7 @@ $constStr = [
'ja' => 'ちょっと待って', 'ja' => 'ちょっと待って',
'ko-kr' => '잠깐만', 'ko-kr' => '잠깐만',
'fa' => 'منتظر بمانید', 'fa' => 'منتظر بمانید',
'ar-sa' => 'انتظر لحظة',
], ],
'WaitJumpIndex' => [ 'WaitJumpIndex' => [
'en-us' => 'Wait 5s jump to Home page', 'en-us' => 'Wait 5s jump to Home page',
@@ -779,6 +953,7 @@ $constStr = [
'ja' => '5秒待ってホームページにジャンプします', 'ja' => '5秒待ってホームページにジャンプします',
'ko-kr' => '5 초 동안 홈페이지로 이동', 'ko-kr' => '5 초 동안 홈페이지로 이동',
'fa' => '۵ دقیقه صبر کنید تا به صفحه نخست برگردید', 'fa' => '۵ دقیقه صبر کنید تا به صفحه نخست برگردید',
'ar-sa' => 'انتظر 5S القفز إلى الصفحة الرئيسية',
], ],
'JumptoOffice' => [ 'JumptoOffice' => [
'en-us' => 'Login Office and Get a refresh_token', 'en-us' => 'Login Office and Get a refresh_token',
@@ -787,27 +962,34 @@ $constStr = [
'ja' => 'Officeにジャンプしてログインし、refresh_tokenを取得します', 'ja' => 'Officeにジャンプしてログインし、refresh_tokenを取得します',
'ko-kr' => '사무실로 이동하여 로그인하여 refresh_token을 받으십시오.', 'ko-kr' => '사무실로 이동하여 로그인하여 refresh_token을 받으십시오.',
'fa' => 'وارد Office شوید و یک refresh_token دریافت کنید', 'fa' => 'وارد Office شوید و یک refresh_token دریافت کنید',
'ar-sa' => 'Login Office and Get a refresh_token',
], ],
'OnedriveDiskTag' => [ 'DiskTag' => [
'en-us' => 'Onedrive Disk Tag', 'en-us' => 'Disk Tag',
'zh-cn' => 'Onedrive 标签', 'zh-cn' => '标签',
'zh-tw' => 'Onedrive 標籤', 'zh-tw' => '標籤',
'ja' => 'Onedriveタグ', 'ja' => 'タグ',
'ko-kr' => 'Onedrive 태그', 'ko-kr' => '태그',
'fa' => 'برچسب دیسک Onedrive', 'fa' => 'برچسب دیسک ',
'ar-sa' => 'تاغ',
], ],
'OnedriveDiskName' => [ 'DiskName' => [
'en-us' => 'Onedrive Showed Name', 'en-us' => 'Showed Name',
'zh-cn' => 'Onedrive 显示名称', 'zh-cn' => '显示名称',
'zh-tw' => 'Onedrive 顯示名稱', 'zh-tw' => '顯示名稱',
'ja' => 'Onedrive表示名', 'ja' => '表示名',
'ko-kr' => 'Onedrive 표시 이름', 'ko-kr' => '표시 이름',
'fa' => 'نام نشان داده شده Onedrive', 'fa' => 'نام نشان داده شده ',
'ar-sa' => 'عرض الاسم',
], ],
'DriveVerMS' => [ 'DriveVerMS' => [
'en-us' => 'Onedrive, Onedrive for business', 'en-us' => 'Onedrive, Onedrive for business',
'zh-cn' => '国际版(商业版与个人版)', 'zh-cn' => '国际版(商业版与个人版)',
'zh-tw' => '國際版(商業版與個人版)', 'zh-tw' => '國際版(商業版與個人版)',
'ja' => '国際版(商業版と個人版)',
'ko-kr' => '국제 판 (상업 판 과 개인 판)',
'fa' => 'International Edition (Business Edition and Personal Edition)',
'ar-sa' => 'الأعمال التجارية الدولية الطبعة الطبعة الشخصية',
], ],
'DriveVerCN' => [ 'DriveVerCN' => [
'en-us' => 'Onedrive in China', 'en-us' => 'Onedrive in China',
@@ -816,6 +998,7 @@ $constStr = [
'ja' => '中国のOnedrive', 'ja' => '中国のOnedrive',
'ko-kr' => '중국 Onedrive', 'ko-kr' => '중국 Onedrive',
'fa' => 'Onedrive در چین', 'fa' => 'Onedrive در چین',
'ar-sa' => 'Onedrive النسخة الصينية',
], ],
'DriveVerShareurl' => [ 'DriveVerShareurl' => [
'en-us' => 'A share link of a folder', 'en-us' => 'A share link of a folder',
@@ -824,16 +1007,17 @@ $constStr = [
], ],
'UseShareLink' => [ 'UseShareLink' => [
'en-us' => 'Share a folder in Onedrive (enable EDIT for everyone), input the link url below.', 'en-us' => 'Share a folder in Onedrive (enable EDIT for everyone), input the link url below.',
'zh-cn' => '对一个Onedrive文件夹共享,允许所有人编辑,然后将共享链接填在下方', 'zh-cn' => '<font color="red">只有国际版能用,</font>对一个Onedrive文件夹共享,允许所有人编辑,然后将共享链接填在下方',
'zh-tw' => '對一個Onedrive資料夾共享,允許所有人編輯,然後將共享連結填在下方', 'zh-tw' => '對一個Onedrive資料夾共享,允許所有人編輯,然後將共享連結填在下方',
], ],
'CustomIdSecret' => [ 'CustomIdSecret' => [
'en-us' => 'Use custom client id & secret instead of OneManager default', 'en-us' => 'Use custom client id & secret instead of OneManager default',
'zh-cn' => '自己申请应用ID与机密,不用OneManager默认的', 'zh-cn' => '自己申请应用ID与机密,不用OneManager默认的',
'zh-tw' => '自己申請應用ID與機密,不用OneManager預設的', 'zh-tw' => '自己申請應用ID與機密,不用OneManager預設的',
'ja' => 'アプリケーションIDとシークレットを自分で申請する', 'ja' => 'アプリケーションIDとシークレットを自分で申請する',
'ko-kr' => '응용 프로그램 ID 및 비밀 신청', 'ko-kr' => '응용 프로그램 ID 및 비밀 신청',
'fa' => 'به طور پیش فرض اما از شناسه برنامه و سکرت استفاده کنید', 'fa' => 'به طور پیش فرض اما از شناسه برنامه و سکرت استفاده کنید',
'ar-sa' => 'استخدام التطبيق الخاص بك معرف وسرية ، لا أحد مدير الافتراضية',
], ],
'GetSecretIDandKEY' => [ 'GetSecretIDandKEY' => [
'en-us' => 'Get custom client id & secret', 'en-us' => 'Get custom client id & secret',
@@ -841,6 +1025,7 @@ $constStr = [
'zh-tw' => '申請應用ID與機密', 'zh-tw' => '申請應用ID與機密',
'ja' => 'アプリケーションIDとシークレット', 'ja' => 'アプリケーションIDとシークレット',
'fa' => 'دریافت شناسه برنامه و سکرت', 'fa' => 'دریافت شناسه برنامه و سکرت',
'ar-sa' => 'تطبيق الهوية والسرية',
], ],
'UseSharepointInstead' => [ 'UseSharepointInstead' => [
'en-us' => 'Use space in Sharepoint website instead of Onedrive', 'en-us' => 'Use space in Sharepoint website instead of Onedrive',
@@ -862,6 +1047,7 @@ $constStr = [
'ja' => 'タグは、文字で始まり、文字または数字で終わる必要があります。少なくとも2つ', 'ja' => 'タグは、文字で始まり、文字または数字で終わる必要があります。少なくとも2つ',
'ko-kr' => '태그는 문자로 시작하고 문자 또는 숫자로 끝나야합니다 (2 이상).', 'ko-kr' => '태그는 문자로 시작하고 문자 또는 숫자로 끝나야합니다 (2 이상).',
'fa' => 'برچسب باید با یک حرف شروع شود، با یک حرف یا رقم پایان یابد و تنها می‌تواند حاوی حروف کوچک، ارقام و خط فاصله، حداقل ۲ حرف باشد!', 'fa' => 'برچسب باید با یک حرف شروع شود، با یک حرف یا رقم پایان یابد و تنها می‌تواند حاوی حروف کوچک، ارقام و خط فاصله، حداقل ۲ حرف باشد!',
'ar-sa' => 'التسمية يمكن أن تبدأ فقط مع الحروف ، وتنتهي مع الحروف أو الأرقام ، على الأقل',
], ],
'ClickInstall' => [ 'ClickInstall' => [
'en-us' => 'Click to install the project', 'en-us' => 'Click to install the project',
@@ -870,6 +1056,7 @@ $constStr = [
'ja' => 'クリックしてインストールプロセスを開始します', 'ja' => 'クリックしてインストールプロセスを開始します',
'ko-kr' => '설치 과정을 시작하려면 클릭', 'ko-kr' => '설치 과정을 시작하려면 클릭',
'fa' => 'برای نصب پروژه کلیک کنید', 'fa' => 'برای نصب پروژه کلیک کنید',
'ar-sa' => 'انقر فوق بدء الإعداد',
], ],
'LogintoBind' => [ 'LogintoBind' => [
'en-us' => 'then login and bind your onedrive in setup', 'en-us' => 'then login and bind your onedrive in setup',
@@ -878,6 +1065,7 @@ $constStr = [
'ja' => '次に、ログインして、設定でonedriveをバインドします。', 'ja' => '次に、ログインして、設定でonedriveをバインドします。',
'ko-kr' => '그런 다음 로그인하여 onedrive를 설정에 바인딩하십시오.', 'ko-kr' => '그런 다음 로그인하여 onedrive를 설정에 바인딩하십시오.',
'fa' => 'پس از آن وارد سیستم شوید و تنظیمات خود را در onedrive متصل کنید', 'fa' => 'پس از آن وارد سیستم شوید و تنظیمات خود را در onedrive متصل کنید',
'ar-sa' => 'ثم قم بتسجيل الدخول بعد ربط أحد السائقين في الإعدادات',
], ],
'MakesuerWriteable' => [ 'MakesuerWriteable' => [
'en-us' => 'Plase make sure the config.php is writeable. run writeable.sh.', 'en-us' => 'Plase make sure the config.php is writeable. run writeable.sh.',
@@ -886,6 +1074,7 @@ $constStr = [
'ja' => 'config.phpが書き込み可能であることを確認してください。', 'ja' => 'config.phpが書き込み可能であることを確認してください。',
'ko-kr' => 'config.php가 쓰기 가능한지 확인하십시오.', 'ko-kr' => 'config.php가 쓰기 가능한지 확인하십시오.',
'fa' => 'اطمینان حاصل کنید که config.php قابل نوشتن است. writeable.sh را اجرا کنید.', 'fa' => 'اطمینان حاصل کنید که config.php قابل نوشتن است. writeable.sh را اجرا کنید.',
'ar-sa' => 'أكد بي إتش بي قابل للكتابة',
], ],
'MakesuerRewriteOn' => [ 'MakesuerRewriteOn' => [
'en-us' => 'Plase make sure the RewriteEngine is On.', 'en-us' => 'Plase make sure the RewriteEngine is On.',
@@ -894,16 +1083,25 @@ $constStr = [
'ja' => '書き換え(擬似静的)機能が有効になっていることを確認します。', 'ja' => '書き換え(擬似静的)機能が有効になっていることを確認します。',
'ko-kr' => '다시 쓰기 (의사 정적) 기능이 활성화되어 있는지 확인하십시오.', 'ko-kr' => '다시 쓰기 (의사 정적) 기능이 활성화되어 있는지 확인하십시오.',
'fa' => 'لطفاً مطمئن شوید که RewriteEngine روشن است.', 'fa' => 'لطفاً مطمئن شوید که RewriteEngine روشن است.',
'ar-sa' => 'يؤكد أن الكتابة يمكن أن تكون وظيفة شبه استاتي',
], ],
'CopyUrl' => [ 'CopyUrl' => [
'en-us' => 'Copy URL', 'en-us' => 'Copy URL',
'zh-cn' => '复制链接', 'zh-cn' => '复制链接',
'zh-tw' => '複製連結', 'zh-tw' => '複製連結',
'ja' => 'リンクをコピー',
'ko-kr' => '링크 복사',
'fa' => 'کپی ارتباط',
'ar-sa' => 'نسخ الرابط',
], ],
'Success' => [ 'Success' => [
'en-us' => 'Success', 'en-us' => 'Success',
'zh-cn' => '成功', 'zh-cn' => '成功',
'zh-tw' => '成功', 'zh-tw' => '成功',
'ja' => '成功',
'ko-kr' => '성공 하 다.',
'fa' => 'موفقیت',
'ar-sa' => 'نجح',
], ],
'SetAdminPassword' => [ 'SetAdminPassword' => [
'en-us' => 'Set Admin Password', 'en-us' => 'Set Admin Password',
@@ -917,6 +1115,7 @@ $constStr = [
'ja' => 'リフレッシュ', 'ja' => 'リフレッシュ',
'ko-kr' => '새로 고침', 'ko-kr' => '새로 고침',
'fa' => 'رفرش', 'fa' => 'رفرش',
'ar-sa' => 'منعش',
], ],
'SelectLanguage' => [ 'SelectLanguage' => [
'en-us' => 'Select Language', 'en-us' => 'Select Language',
@@ -925,6 +1124,7 @@ $constStr = [
'ja' => '言語を選択してください', 'ja' => '言語を選択してください',
'ko-kr' => '언어를 선택하십시오', 'ko-kr' => '언어를 선택하십시오',
'fa' => 'زبان را انتخاب کنید', 'fa' => 'زبان را انتخاب کنید',
'ar-sa' => 'اختيار اللغة',
], ],
'RefreshCache' => [ 'RefreshCache' => [
'en-us' => 'RefreshCache', 'en-us' => 'RefreshCache',
@@ -933,6 +1133,7 @@ $constStr = [
'ja' => 'キャッシュを再構築', 'ja' => 'キャッシュを再構築',
'ko-kr' => '캐시 플러시', 'ko-kr' => '캐시 플러시',
'fa' => 'رفرش cache', 'fa' => 'رفرش cache',
'ar-sa' => 'تحديث الكاش',
], ],
'CannotOneKeyUpate' => [ 'CannotOneKeyUpate' => [
'en-us' => 'Can not update by a click! run update.sh', 'en-us' => 'Can not update by a click! run update.sh',
@@ -950,8 +1151,8 @@ $constStr = [
'zh-tw' => '配置儲存在環境變數', 'zh-tw' => '配置儲存在環境變數',
], ],
'ONEMANAGER_CONFIG_SAVE_FILE' => [ 'ONEMANAGER_CONFIG_SAVE_FILE' => [
'en-us' => 'Config save in code file, may cause fee', 'en-us' => 'Config save in code file, may cause fee, please reinstall later',
'zh-cn' => '配置保存在代码文件中,可能产生费用', 'zh-cn' => '配置保存在代码文件中,可能产生费用,切换后,请从头再安装一次。',
'zh-tw' => '配置儲存在程式碼文件中,可能產生費用', 'zh-tw' => '配置儲存在程式碼文件中,可能產生費用',
], ],
]; ];
+835
View File
@@ -0,0 +1,835 @@
<?php
class Aliyundrive {
protected $access_token;
protected $disktag;
function __construct($tag) {
$this->disktag = $tag;
//$this->auth_url = 'https://websv.aliyundrive.com/token/refresh';
$this->auth_url = 'https://auth.aliyundrive.com/v2/account/token';
$this->api_url = 'https://api.aliyundrive.com/v2';
$this->driveId = getConfig('driveId', $tag);
$res = $this->get_access_token(getConfig('refresh_token', $tag));
}
public function isfine()
{
if (!$this->access_token) return false;
else return true;
}
public function show_base_class()
{
return get_class();
//$tmp[0] = get_class();
//$tmp[1] = get_class($this);
//return $tmp;
}
public function ext_show_innerenv()
{
return ['driveId'];
}
public function list_files($path = '/')
{
$files = $this->list_path($path);
return $this->files_format($files);
}
protected function files_format($files)
{
//return $files;
if ($files['type']=='file') {
$tmp['type'] = 'file';
$tmp['id'] = $files['file_id'];
if (isset($files['name'])) $tmp['name'] = $files['name'];
elseif (isset($files['file_name'])) $tmp['name'] = $files['file_name'];
$tmp['time'] = $files['updated_at'];
$tmp['size'] = $files['size'];
$tmp['mime'] = $files['file']['mimeType'];
$tmp['url'] = $files['download_url'];
$tmp['content'] = $files['content'];
if (isset($files['exist'])) $tmp['exist'] = $files['exist'];
if (isset($files['rapid_upload'])) $tmp['rapid_upload'] = $files['rapid_upload'];
} elseif ($files['type']=='folder'||isset($files['items'])) {
$tmp['type'] = 'folder';
$tmp['id'] = $files['file_id'];
if (isset($files['name'])) $tmp['name'] = $files['name'];
elseif (isset($files['file_name'])) $tmp['name'] = $files['file_name'];
$tmp['time'] = $files['updated_at'];
$tmp['size'] = $files['size'];
//$tmp['page'] = $files['folder']['page'];
foreach ($files['items'] as $file) {
$filename = strtolower($file['name']);
if ($file['type']=='file') {
$tmp['list'][$filename]['type'] = 'file';
$tmp['list'][$filename]['url'] = $file['download_url'];
$tmp['list'][$filename]['mime'] = $file['file']['content_type'];
} elseif ($file['type']=='folder') {
$tmp['list'][$filename]['type'] = 'folder';
}
//$tmp['id'] = $file['parent_file_id'];
$tmp['list'][$filename]['id'] = $file['file_id'];
$tmp['list'][$filename]['name'] = $file['name'];
$tmp['list'][$filename]['time'] = $file['updated_at'];
$tmp['list'][$filename]['size'] = $file['size'];
$tmp['childcount']++;
}
} elseif (isset($files['code'])||isset($files['error'])) {
return $files;
}
//error_log1(json_encode($tmp));
return $tmp;
}
protected function list_path($path = '/')
{
global $exts;
while (substr($path, -1)=='/') $path = substr($path, 0, -1);
if ($path == '') $path = '/';
//$files = getcache('path_' . $path, $this->disktag);
//if (!$files) {
if (!($files = getcache('path_' . $path, $this->disktag))) {
if ($path == '/' || $path == '') {
$files = $this->fileList('root');
//error_log1('root_id' . $files['id']);
$files['file_id'] = 'root';
$files['type'] = 'folder';
} else {
$tmp = splitlast($path, '/');
$parent_path = $tmp[0];
$filename = urldecode($tmp[1]);
$parent_folder = $this->list_path($parent_path);
foreach ($parent_folder['items'] as $item) {
if ($item['name']==$filename) {
if ($item['type']=='folder') {
$files = $this->fileList($item['file_id']);
$files['type'] = 'folder';
$files['file_id'] = $item['file_id'];
$files['name'] = $item['name'];
$files['time'] = $item['updated_at'];
$files['size'] = $item['size'];
} else $files = $item;
}
}
//echo $files['name'];
}
if ($files['type']=='file') {
if (in_array(splitlast($files['name'],'.')[1], $exts['txt'])) {
if (!(isset($files['content'])&&$files['content']['stat']==200)) {
$header['Referer'] = 'https://www.aliyundrive.com/';
$header['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36';
$content1 = curl('GET', $files['download_url'], '', $header);
$files['content'] = $content1;
savecache('path_' . $path, $files, $this->disktag);
}
error_log1($files['name'] . ' : ' . json_encode($files['content']) . PHP_EOL);
}
}
if (!$files) {
$files['error']['code'] = 'Not Found';
$files['error']['message'] = $path . ' Not Found';
$files['error']['stat'] = 404;
} elseif (isset($files['stat'])) {
$files['error']['stat'] = $files['stat'];
$files['error']['code'] = 'Error';
$files['error']['message'] = $files['body'];
unset($files['file_id']);
unset($files['type']);
} elseif (isset($files['code'])) {
$files['error']['stat'] = 500;
$files['error']['code'] = $files['code'];
$files['error']['message'] = $files['message'];
unset($files['file_id']);
unset($files['type']);
} else {
savecache('path_' . $path, $files, $this->disktag, 600);
}
}
//error_log1('path:' . $path . ', files:' . substr(json_encode($files), 0, 150));
//error_log1('path:' . $path . ', files:' . json_encode($files));
return $files;
}
protected function fileGet($file_id)
{
$url = $this->api_url . '/file/get';
$header["content-type"] = "application/json; charset=utf-8";
$header['authorization'] = 'Bearer ' . $this->access_token;
$data['drive_id'] = $this->driveId;
$data['file_id'] = $file_id;
$res = curl('POST', $url, json_encode($data), $header);
if ($res['stat']==200) return json_decode($res['body'], true);
else return $res;
}
protected function fileList($parent_file_id)
{
$url = $this->api_url . '/file/list';
$header["content-type"] = "application/json; charset=utf-8";
$header['authorization'] = 'Bearer ' . $this->access_token;
$data['limit'] = 50;
$data['marker'] = NULL;
$data['drive_id'] = $this->driveId;
$data['parent_file_id'] = $parent_file_id;
$data['image_thumbnail_process'] = 'image/resize,w_160/format,jpeg';
$data['image_url_process'] = 'image/resize,w_1920/format,jpeg';
$data['video_thumbnail_process'] = 'video/snapshot,t_0,f_jpg,w_300';
$data['fields'] = '*';
$data['order_by'] = 'updated_at';
$data['order_direction'] = 'DESC';
$res = curl('POST', $url, json_encode($data), $header);
//error_log1($res['stat'] . $res['body']);
if ($res['stat']==200) return json_decode($res['body'], true);
else return $res;
}
public function Rename($file, $newname) {
$url = $this->api_url . '/file/update';
$header["content-type"] = "application/json; charset=utf-8";
$header['authorization'] = 'Bearer ' . $this->access_token;
$data['check_name_mode'] = 'refuse';
$data['drive_id'] = $this->driveId;
$data['file_id'] = $file['id'];
$data['name'] = $newname;
//$data['parent_file_id'] = 'root';
$result = curl('POST', $url, json_encode($data), $header);
//savecache('path_' . $file['path'], json_decode('{}',true), $this->disktag, 1);
//error_log1('decode:' . json_encode($result));
return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']);
//return output($result['body'], $result['stat']);
}
public function Delete($file) {
$url = $this->api_url . '/batch';
$header["content-type"] = "application/json; charset=utf-8";
$header['authorization'] = 'Bearer ' . $this->access_token;
$data['resource'] = 'file';
$data['requests'][0]['url'] = '/file/delete';
$data['requests'][0]['method'] = 'DELETE';
$data['requests'][0]['id'] = $file['id'];
$data['requests'][0]['headers']['Content-Type'] = 'application/json';
$data['requests'][0]['body']['drive_id'] = $this->driveId;
$data['requests'][0]['body']['file_id'] = $file['id'];
$result = curl('POST', $url, json_encode($data), $header);
//savecache('path_' . $file['path'], json_decode('{}',true), $this->disktag, 1);
//error_log1('result:' . json_encode($result));
//return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']);
$res = json_decode($result['body'], true)['responses'][0];
if (isset($res['status'])) return output($res['id'], $res['status']);
else return output($result['body'], $result['stat']);
}
public function Encrypt($folder, $passfilename, $pass) {
$existfile = $this->list_path($folder['path'] . '/' . $passfilename);
if (isset($existfile['type'])) { // 删掉原文件
$this->Delete(['id'=>$existfile['file_id']]);
}
if ($pass==='') {
// 如果为空,上面已经删除了
return output('Success', 200);
}
if (!$folder['id']) {
$res = $this->list_path($folder['path']);
//error_log1('res:' . json_encode($res));
$folder['id'] = $res['file_id'];
}
$tmp = '/tmp/' . $passfilename;
file_put_contents($tmp, $pass);
$result = $this->tmpfileCreate($folder['id'], $tmp, $passfilename);
if ($result['stat']==201) {
//error_log1('1,url:' . $url .' res:' . json_encode($result));
$res = json_decode($result['body'], true);
$url = $res['part_info_list'][0]['upload_url'];
if (!$url) { // 无url,应该算秒传
return output('no up url', 200);
}
$file_id = $res['file_id'];
$upload_id = $res['upload_id'];
$result = curl('PUT', $url, $pass, [], 1);
if ($result['stat']==200) { // 块1传好
$result = $this->fileComplete($file_id, $upload_id, [ $result['returnhead']['ETag'] ]);
return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']);
}
}
//error_log1('2,url:' . $url .' res:' . json_encode($result));
return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']);
}
public function Move($file, $folder) {
if (!$folder['id']) {
$res = $this->list_path($folder['path']);
//error_log1('res:' . json_encode($res));
$folder['id'] = $res['file_id'];
}
$url = $this->api_url . '/batch';
$header["content-type"] = "application/json; charset=utf-8";
$header['authorization'] = 'Bearer ' . $this->access_token;
$data['resource'] = 'file';
$data['requests'][0]['url'] = '/file/move';
$data['requests'][0]['method'] = 'POST';
$data['requests'][0]['id'] = $file['id'];
$data['requests'][0]['headers']['Content-Type'] = 'application/json';
$data['requests'][0]['body']['drive_id'] = $this->driveId;
$data['requests'][0]['body']['file_id'] = $file['id'];
$data['requests'][0]['body']['auto_rename'] = true;
$data['requests'][0]['body']['to_parent_file_id'] = $folder['id'];
$result = curl('POST', $url, json_encode($data), $header);
//savecache('path_' . $file['path'], json_decode('{}',true), $this->disktag, 1);
//error_log1('result:' . json_encode($result));
return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']);
}
public function Copy($file) {
if (!$file['id']) {
$oldfile = $this->list_path($file['path'] . '/' . $file['name']);
//error_log1('res:' . json_encode($res));
//$file['id'] = $res['file_id'];
} else {
$oldfile = $this->fileGet($file['id']);
}
$url = $this->api_url . '/file/create';
$header["content-type"] = "application/json; charset=utf-8";
$header['authorization'] = 'Bearer ' . $this->access_token;
$data['check_name_mode'] = 'auto_rename'; // ignore, auto_rename, refuse.
$data['content_hash'] = $oldfile['content_hash'];
$data['content_hash_name'] = 'sha1';
$data['content_type'] = $oldfile['content_type'];
$data['drive_id'] = $this->driveId;
$data['ignoreError'] = false;
$data['name'] = $oldfile['name'];
$data['parent_file_id'] = $oldfile['parent_file_id'];
$data['part_info_list'][0]['part_number'] = 1;
$data['size'] = $oldfile['size'];
$data['type'] = 'file';
$result = curl('POST', $url, json_encode($data), $header);
if ($result['stat']==201) {
//error_log1('1,url:' . $url .' res:' . json_encode($result));
$res = json_decode($result['body'], true);
$url = $res['part_info_list'][0]['upload_url'];
if (!$url) { // 无url,应该算秒传
return output('no up url', 200);
} else {
return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']);
}
/*$file_id = $res['file_id'];
$upload_id = $res['upload_id'];
$result = curl('PUT', $url, $content, [], 1);
if ($result['stat']==200) { // 块1传好
$etag = $result['returnhead']['ETag'];
$result = $this->fileComplete($file_id, $upload_id, [ $etag ]);
if ($result['stat']!=200) return output($result['body'], $result['stat']);
else return output('success', 0);
}*/
}
//error_log1('2,url:' . $url .' res:' . json_encode($result));
return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']);
}
public function Edit($file, $content) {
$tmp = splitlast($file['path'], '/');
$folderpath = $tmp[0];
$filename = $tmp[1];
$existfile = $this->list_path($file['path']);
if (isset($existfile['type'])) { // 删掉原文件
$this->Delete(['id'=>$existfile['file_id']]);
}
$tmp1 = '/tmp/' . $filename;
file_put_contents($tmp1, $content);
$result = $this->tmpfileCreate($this->list_path($folderpath)['file_id'], $tmp1, $filename);
if ($result['stat']==201) {
//error_log1('1,url:' . $url .' res:' . json_encode($result));
$res = json_decode($result['body'], true);
$url = $res['part_info_list'][0]['upload_url'];
if (!$url) { // 无url,应该算秒传
return output('no up url', 0);
}
$file_id = $res['file_id'];
$upload_id = $res['upload_id'];
$result = curl('PUT', $url, $content, [], 1);
if ($result['stat']==200) { // 块1传好
$result = $this->fileComplete($file_id, $upload_id, [ $result['returnhead']['ETag'] ]);
if ($result['stat']!=200) return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']);
else return output('success', 0);
}
}
//error_log1('2,url:' . $url .' res:' . json_encode($result));
return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']);
}
public function Create($folder, $type, $name, $content = '') {
if (!$folder['id']) {
$res = $this->list_path($folder['path']);
//error_log1('res:' . json_encode($res));
$folder['id'] = $res['file_id'];
}
if ($type=='folder') {
$result = $this->folderCreate($folder['id'], $name);
//error_log1('res:' . json_encode($result));
return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']);
}
if ($type=='file') {
$tmp = '/tmp/' . $name;
file_put_contents($tmp, $content);
$result = $this->tmpfileCreate($folder['id'], $tmp, $name);
if ($result['stat']==201) {
//error_log1('1,url:' . $url .' res:' . json_encode($result));
$res = json_decode($result['body'], true);
if (isset($res['exist'])&&$res['exist']!=false) {
// 已经有
//error_log1('exist:' . json_encode($res));
return output('{"type":"file","name":"' . $name . '", "exist":true}', 200);
}
if (isset($res['rapid_upload'])&&$res['rapid_upload']!=false) {
// 秒传
//error_log1('rapid up:' . json_encode($res));
return output('{"type":"file","name":"' . $name . '", "rapid_upload":true}', 200);
}
$url = $res['part_info_list'][0]['upload_url'];
$file_id = $res['file_id'];
$upload_id = $res['upload_id'];
$result = curl('PUT', $url, $content, [], 1);
//error_log1('2,url:' . $url .' res:' . json_encode($result));
if ($result['stat']==200) { // 块1传好
$result = $this->fileComplete($file_id, $upload_id, [ $result['returnhead']['ETag'] ]);
//error_log1('3,url:' . $url .' res:' . json_encode($result));
return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']);
}
}
//error_log1('4,url:' . $url .' res:' . json_encode($result));
return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']);
}
return output('Type not folder or file.', 500);
}
protected function folderCreate($parentId, $folderName) {
if (strrpos($folderName, '/')) {
$tmp = splitlast($folderName, '/');
$parentId = json_decode($this->folderCreate($parentId, $tmp[0])['body'], true)['file_id'];
$folderName = $tmp[1];
}
$url = $this->api_url . '/file/create';
$header["content-type"] = "application/json; charset=utf-8";
$header['authorization'] = 'Bearer ' . $this->access_token;
$data['check_name_mode'] = 'refuse'; // ignore, auto_rename, refuse.
$data['drive_id'] = $this->driveId;
$data['name'] = $folderName;
$data['parent_file_id'] = $parentId;
$data['type'] = 'folder';
return curl('POST', $url, json_encode($data), $header);
}
protected function fileCreate($parentId, $fileName, $sha1, $size, $part_number) {
$url = $this->api_url . '/file/create';
$header["content-type"] = "application/json; charset=utf-8";
$header['authorization'] = 'Bearer ' . $this->access_token;
$data['check_name_mode'] = 'refuse'; // ignore, auto_rename, refuse.
$data['content_hash'] = $sha1;
$data['content_hash_name'] = 'sha1';
$data['content_type'] = '';
$data['drive_id'] = $this->driveId;
$data['ignoreError'] = false;
$data['name'] = $fileName;
$data['parent_file_id'] = $parentId;
for ($i=0;$i<$part_number;$i++) {
$data['part_info_list'][$i]['part_number'] = $i+1;
}
$data['size'] = (int)$size;
$data['type'] = 'file';
return curl('POST', $url, json_encode($data), $header);
}
protected function tmpfileCreate($parentId, $tmpFilePath, $tofileName = '') {
$sha1 = sha1_file($tmpFilePath);
if ($tofileName == '') $tofileName = splitlast($tmpFilePath, '/')[1];
$url = $this->api_url . '/file/create';
$header["content-type"] = "application/json; charset=utf-8";
$header['authorization'] = 'Bearer ' . $this->access_token;
$data['check_name_mode'] = 'refuse'; // ignore, auto_rename, refuse.
$data['content_hash'] = $sha1;
$data['content_hash_name'] = 'sha1';
$data['content_type'] = 'text/plain'; // now only txt
$data['drive_id'] = $this->driveId;
$data['ignoreError'] = false;
$data['name'] = $tofileName;
$data['parent_file_id'] = $parentId;
$data['part_info_list'][0]['part_number'] = 1; // now only txt
$data['size'] = filesize($tmpFilePath);
$data['type'] = 'file';
return curl('POST', $url, json_encode($data), $header);
}
protected function fileComplete($file_id, $upload_id, $etags) {
$url = $this->api_url . '/file/complete';
$header["content-type"] = "application/json; charset=utf-8";
$header['authorization'] = 'Bearer ' . $this->access_token;
$data['drive_id'] = $this->driveId;
$data['file_id'] = $file_id;
$data['ignoreError'] = false;
$i = 0;
foreach ($etags as $etag) {
$data['part_info_list'][$i]['part_number'] = $i + 1;
$data['part_info_list'][$i]['etag'] = $etag;
$i++;
}
$data['upload_id'] = $upload_id;
return curl('POST', $url, json_encode($data), $header);
}
public function get_thumbnails_url($path = '/')
{
$res = $this->list_path($path);
$thumb_url = $res['thumbnail'];
return $thumb_url;
}
public function bigfileupload($path)
{
if (isset($_POST['uploadid'])) {
// Complete
$result = $this->fileComplete($_POST['fileid'], $_POST['uploadid'], json_decode($_POST['etag'], true));
return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']);
} else {
if ($_POST['upbigfilename']=='') return output('error: no file name', 400);
if (!is_numeric($_POST['filesize'])) return output('error: no file size', 400);
if (!isset($_POST['filesha1'])) return output('error: no file sha1', 400);
$tmp = splitlast($_POST['upbigfilename'], '/');
if ($tmp[1]!='') {
$fileinfo['name'] = $tmp[1];
if ($_SERVER['admin']) $fileinfo['path'] = $tmp[0];
} else {
$fileinfo['name'] = $_POST['upbigfilename'];
}
$fileinfo['size'] = $_POST['filesize'];
$fileinfo['filelastModified'] = $_POST['filelastModified'];
if ($_SERVER['admin']) {
$filename = $fileinfo['name'];
} else {
$tmp1 = splitlast($fileinfo['name'], '.');
if ($tmp1[0]==''||$tmp1[1]=='') $filename = $_POST['filesha1'];
else $filename = $_POST['filesha1'] . '.' . $tmp1[1];
}
$parent = $this->list_path($path . '/' . $fileinfo['path']);
if (isset($parent['file_id'])) {
$parent_file_id = $parent['file_id'];
} else {
$res = $this->folderCreate($this->list_path($path)['file_id'], $fileinfo['path']);
//error_log1($res['body']);
$parent_file_id = json_decode($res['body'], true)['file_id'];
}
$response = $this->fileCreate($parent_file_id, $filename, $_POST['filesha1'], $fileinfo['size'], ceil($fileinfo['size']/$_POST['chunksize']));
$res = json_decode($response['body'], true);
if (isset($res['exist'])) {
// 已经有
//error_log1('exist:' . json_encode($res));
return output(json_encode($this->files_format(json_decode($response['body'], true))), $response['stat']);
//return output('{"type":"file","name":"' . $_POST['upbigfilename'] . '", "exist":true}', 200);
}
if (isset($res['rapid_upload'])&&$res['rapid_upload']!=false) {
// 秒传
//error_log1('rapid up:' . json_encode($res));
return output(json_encode($this->files_format(json_decode($response['body'], true))), $response['stat']);
//return output('{"type":"file","name":"' . $_POST['upbigfilename'] . '", "rapid upload":true}', 200);
}
//if ($response['stat']<500) {
// $responsearry = json_decode($response['body'], true);
// if (isset($responsearry['error'])) return output($response['body'], $response['stat']);
// $fileinfo['uploadUrl'] = $responsearry['uploadUrl'];
// if ($fileinfo['size']>10*1024*1024) $this->MSAPI('PUT', path_format($path . '/' . $cachefilename), json_encode($fileinfo, JSON_PRETTY_PRINT), $this->access_token);
//}
return output($response['body'], $response['stat']);
}
}
public function AddDisk() {
global $constStr;
global $EnvConfigs;
$envs = '';
foreach ($EnvConfigs as $env => $v) if (isCommonEnv($env)) $envs .= '\'' . $env . '\', ';
$url = path_format($_SERVER['PHP_SELF'] . '/');
if (isset($_GET['Finish'])) {
if ($this->access_token == '') {
$refresh_token = getConfig('refresh_token', $this->disktag);
if (!$refresh_token) {
$html = 'No refresh_token config, please AddDisk again or wait minutes.<br>' . $this->disktag;
$title = 'Error';
return message($html, $title, 201);
}
$response = $this->get_access_token($refresh_token);
if (!$response) return message($this->error['body'], 'Error', $this->error['stat']);
}
$tmp = null;
if ($_POST['driveId']!='') {
$tmp['driveId'] = $_POST['driveId'];
} else {
return message('no driveId', 'Error', 201);
}
$response = setConfigResponse( setConfig($tmp, $this->disktag) );
if (api_error($response)) {
$html = api_error_msg($response);
$title = 'Error';
return message($html, $title, 201);
} else {
$str .= '<meta http-equiv="refresh" content="5;URL=' . $url . '">';
return message($str, getconstStr('WaitJumpIndex'), 201);
}
}
if (isset($_GET['SelectDrive'])) {
if ($this->access_token == '') {
if (isset($_POST['refresh_token'])) {
$res = curl('POST', $this->auth_url, json_encode([ 'refresh_token' => $_POST['refresh_token'], 'grant_type' => 'refresh_token' ]), ["content-type"=>"application/json; charset=utf-8"]);
//return output($res['body']);
if ($res['stat']!=200) {
return message($res['body'], $res['stat'], $res['stat']);
}
//var_dump($res['body']);
$result = json_decode($res['body'], true);
$tmp = null;
$tmp['refresh_token'] = $result['refresh_token'];
$tmp['token_expires'] = time()+3*24*60*60;
$tmp['Driver'] = 'Aliyundrive';
//error_log(json_encode($tmp));
$response = setConfigResponse( setConfig($tmp, $this->disktag) );
if (api_error($response)) {
$html = api_error_msg($response);
$title = 'Error';
return message($html, $title, 201);
}
savecache('access_token', $result['access_token'], $this->disktag, $result['expires_in'] - 60);
} else {
$refresh_token = getConfig('refresh_token', $this->disktag);
if (!$refresh_token) {
$html = 'No refresh_token config, please AddDisk again or wait minutes.<br>' . $this->disktag;
$title = 'Error';
return message($html, $title, 201);
}
$response = $this->get_access_token($refresh_token);
if (!$response) return message($this->error['body'], 'Error', $this->error['stat']);
}
}
if (!isset($result['default_drive_id'])) {
$res = curl('POST', $this->auth_url, json_encode([ 'refresh_token' => getConfig('refresh_token', $this->disktag), 'grant_type' => 'refresh_token' ]), ["content-type"=>"application/json; charset=utf-8"]);
//return output($res['body']);
if ($res['stat']!=200) {
return message($res['body'], $res['stat'], $res['stat']);
}
//var_dump($res['body']);
$result = json_decode($res['body'], true);
}
//$tmp = null;
//$tmp['driveId'] = $result['default_drive_id'];
//$tmp['default_sbox_drive_id'] = $result['default_sbox_drive_id'];
$title = 'Select Driver';
$html = '
<div>
<form action="?Finish&disktag=' . $_GET['disktag'] . '&AddDisk=' . get_class($this) . '" method="post" onsubmit="return notnull(this);">
<label><input type="radio" name="driveId" value="' . $result['default_drive_id'] . '"' . ($result['default_drive_id']==$this->driveId?' checked':'') . '>' . '用普通空间 ' . getconstStr(' ') . '</label><br>
<label><input type="radio" name="driveId" value="' . $result['default_sbox_drive_id'] . '"' . ($result['default_sbox_drive_id']==$this->driveId?' checked':'') . '>' . '用虎符文件保险箱 </label><br>
<input type="submit" value="' . getconstStr('Submit') . '">
</form>
</div>
<script>
function notnull(t)
{
if (t.driveId.value==\'\') {
alert(\'Select a Disk\');
return false;
}
return true;
}
</script>
';
return message($html, $title, 201);
}
if (isset($_GET['install0']) && $_POST['disktag_add']!='') {
$_POST['disktag_add'] = preg_replace('/[^0-9a-zA-Z|_]/i', '', $_POST['disktag_add']);
$f = substr($_POST['disktag_add'], 0, 1);
if (strlen($_POST['disktag_add'])==1) $_POST['disktag_add'] .= '_';
if (isCommonEnv($_POST['disktag_add'])) {
return message('Do not input ' . $envs . '<br><button onclick="location.href = location.href;">'.getconstStr('Refresh').'</button>
<script>
var expd = new Date();
expd.setTime(expd.getTime()+1);
var expires = "expires="+expd.toGMTString();
document.cookie=\'disktag=; path=/; \'+expires;
</script>', 'Error', 201);
} elseif (!(('a'<=$f && $f<='z') || ('A'<=$f && $f<='Z'))) {
return message('Please start with letters<br><button onclick="location.href = location.href;">'.getconstStr('Refresh').'</button>
<script>
var expd = new Date();
expd.setTime(expd.getTime()+1);
var expires = "expires="+expd.toGMTString();
document.cookie=\'disktag=; path=/; \'+expires;
</script>', 'Error', 201);
}
$tmp = null;
foreach ($EnvConfigs as $env => $v) if (isInnerEnv($env)) $tmp[$env] = '';
$tmp['Driver'] = 'Aliyundrive';
$tmp['disktag_add'] = $_POST['disktag_add'];
$tmp['diskname'] = $_POST['diskname'];
//error_log(json_encode($tmp));
$response = setConfigResponse( setConfig($tmp, $this->disktag) );
if (api_error($response)) {
$html = api_error_msg($response);
$title = 'Error';
return message($html, $title, 201);
} else {
$title = 'Refresh token';
$html = '
<form action="?SelectDrive&disktag=' . $_GET['disktag'] . '&AddDisk=' . get_class($this) . '" method="post" onsubmit="return notnull(this);">
<div>填入refresh_token:
<input type="text" name="refresh_token" placeholder="自行百度如何获取' . getconstStr(' ') . '" style="width:100%"><br>
</div><br>
<input type="submit" value="' . getconstStr('Submit') . '">
<form>
<script>
function notnull(t)
{
if (t.refresh_token.value==\'\') {
alert(\'Input refresh_token\');
return false;
}
return true;
}
</script>
';
return message($html, $title, 201);
}
}
$html = '
<div>
<form id="form1" action="" method="post" onsubmit="return notnull(this);">
' . getconstStr('DiskTag') . ': (' . getConfig('disktag') . ')
<input type="text" name="disktag_add" placeholder="' . getconstStr('EnvironmentsDescription')['disktag'] . '" style="width:100%"><br>
' . getconstStr('DiskName') . ':
<input type="text" name="diskname" placeholder="' . getconstStr('EnvironmentsDescription')['diskname'] . '" style="width:100%"><br>
<br>
<input type="submit" value="' . getconstStr('Submit') . '">
</form>
</div>
<script>
function notnull(t)
{
if (t.disktag_add.value==\'\') {
alert(\'' . getconstStr('DiskTag') . '\');
return false;
}
envs = [' . $envs . '];
if (envs.indexOf(t.disktag_add.value)>-1) {
alert("Do not input ' . $envs . '");
return false;
}
var reg = /^[a-zA-Z]([_a-zA-Z0-9]{1,20})$/;
if (!reg.test(t.disktag_add.value)) {
alert(\'' . getconstStr('TagFormatAlert') . '\');
return false;
}
document.getElementById("form1").action="?install0&disktag=" + t.disktag_add.value + "&AddDisk=Aliyundrive";
//var expd = new Date();
//expd.setTime(expd.getTime()+(2*60*60*1000));
//var expires = "expires="+expd.toGMTString();
//document.cookie=\'disktag=\'+t.disktag_add.value+\'; path=/; \'+expires;
return true;
}
</script>';
$title = 'Select Account Type';
return message($html, $title, 201);
}
protected function get_access_token($refresh_token) {
if (!$refresh_token) {
$tmp['stat'] = 0;
$tmp['body'] = 'No refresh_token';
$this->error = $tmp;
return false;
}
if (!($this->access_token = getcache('access_token', $this->disktag))) {
$p=0;
$tmp1['refresh_token'] = $refresh_token;
$tmp1['grant_type'] = 'refresh_token';
while ($response['stat']==0&&$p<3) {
$response = curl('POST', $this->auth_url, json_encode($tmp1), ["content-type"=>"application/json; charset=utf-8"]);
$p++;
}
//error_log1(json_encode($response));
if ($response['stat']==200) $ret = json_decode($response['body'], true);
if (!isset($ret['access_token'])) {
error_log1('failed to get [' . $this->disktag . '] access_token. response: ' . $response['stat'] . $response['body']);
//$response['body'] = json_encode(json_decode($response['body']), JSON_PRETTY_PRINT);
$response['body'] .= 'failed to get [' . $this->disktag . '] access_token.';
$this->error = $response;
return false;
}
$tmp = $ret;
$tmp['access_token'] = substr($tmp['access_token'], 0, 10) . '******';
$tmp['refresh_token'] = substr($tmp['refresh_token'], 0, 10) . '******';
error_log1('[' . $this->disktag . '] Get access token:' . json_encode($tmp, JSON_PRETTY_PRINT));
$this->access_token = $ret['access_token'];
savecache('access_token', $this->access_token, $this->disktag, $ret['expires_in'] - 300);
if (time()>getConfig('token_expires', $this->disktag)) setConfig([ 'refresh_token' => $ret['refresh_token'], 'token_expires' => time()+3*24*60*60 ], $this->disktag);
return true;
}
return true;
}
public function getDiskSpace() {
if (!($diskSpace = getcache('diskSpace', $this->disktag))) {
$url = $this->api_url . '/databox/get_personal_info';
$header["content-type"] = "application/json; charset=utf-8";
$header['authorization'] = 'Bearer ' . $this->access_token;
$response = curl('POST', $url, '', $header);
//error_log1(json_encode($response));
$res = json_decode($response['body'], true)['personal_space_info'];
$used = size_format($res['used_size']);
$total = size_format($res['total_size']);
$diskSpace = $used . ' / ' . $total;
savecache('diskSpace', $diskSpace, $this->disktag);
}
return $diskSpace;
}
}
+853
View File
@@ -0,0 +1,853 @@
<?php
class Googledrive {
protected $access_token;
protected $disktag;
function __construct($tag) {
$this->disktag = $tag;
$this->redirect_uri = 'https://scfonedrive.github.io';
if (getConfig('client_id', $tag) && getConfig('client_secret', $tag)) {
$this->client_id = getConfig('client_id', $tag);
$this->client_secret = getConfig('client_secret', $tag);
} else {
$this->client_id = '106151778902-ajieetaab5ondhbvia97n4tr5k0cg8eo.apps.googleusercontent.com';
$this->client_secret = 'LlCV-rQClzYIKCEqiVddh68G';
}
//$this->oauth_url = 'https://www.googleapis.com/oauth2/v4/';
$this->oauth_url = 'https://accounts.google.com/o/oauth2/';
$this->api_url = 'https://www.googleapis.com/drive/v3';
$this->scope = 'https://www.googleapis.com/auth/drive';
$this->client_secret = urlencode($this->client_secret);
$this->scope = urlencode($this->scope);
//$this->DownurlStrName = '@microsoft.graph.downloadUrl';
//$this->ext_api_url = '/me/drive/root';
$this->driveId = getConfig('driveId', $tag);
$res = $this->get_access_token(getConfig('refresh_token', $tag));
}
public function isfine()
{
if (!$this->access_token) return false;
else return true;
}
public function show_base_class()
{
return get_class();
//$tmp[0] = get_class();
//$tmp[1] = get_class($this);
//return $tmp;
}
public function ext_show_innerenv()
{
return ['driveId'];
}
public function list_files($path = '/')
{
$files = $this->list_path($path);
return $this->files_format($files);
}
protected function files_format($files)
{
if (isset($files['files']) || (isset($files['mimeType'])&&$files['mimeType']=='application/vnd.google-apps.folder') ) {
$tmp['type'] = 'folder';
$tmp['id'] = $files['id'];
$tmp['name'] = $files['name'];
$tmp['time'] = $files['modifiedTime'];
$tmp['size'] = $files['size'];
$tmp['childcount'] = $files['folder']['childCount'];
$tmp['page'] = $files['folder']['page'];
foreach ($files['files'] as $file) {
$filename = strtolower($file['name']);
if ($file['mimeType']=='application/vnd.google-apps.folder') {
$tmp['list'][$filename]['type'] = 'folder';
} else {
$tmp['list'][$filename]['type'] = 'file';
//var_dump($file);
//echo $file['name'] . ':' . $this->DownurlStrName . ':' . $file[$this->DownurlStrName] . PHP_EOL;
$tmp['list'][$filename]['url'] = ($file['downUrl']?$file['downUrl']:$file['webContentLink']);
$tmp['list'][$filename]['mime'] = $file['mimeType'];
}
$tmp['list'][$filename]['id'] = $file['id'];
$tmp['list'][$filename]['name'] = $file['name'];
$tmp['list'][$filename]['time'] = $file['modifiedTime'];
$tmp['list'][$filename]['size'] = $file['size'];
}
} elseif (isset($files['mimeType'])) {
$tmp['type'] = 'file';
$tmp['id'] = $files['id'];
$tmp['name'] = $files['name'];
$tmp['time'] = $files['modifiedTime'];
$tmp['size'] = $files['size'];
$tmp['mime'] = $files['mimeType'];
$tmp['url'] = ($files['downUrl']?$files['downUrl']:$files['webContentLink']);
$tmp['content'] = $files['content'];
} else/*if (isset($files['error']))*/ {
return $files;
}
//error_log1(json_encode($tmp));
return $tmp;
}
protected function list_path($path = '/')
{
global $exts;
while (substr($path, -1)=='/') $path = substr($path, 0, -1);
if ($path == '') $path = '/';
if (!($files = getcache('path_' . $path, $this->disktag))) {
//$response = curl('GET', $this->api_url . '/drives', '', ['Authorization' => 'Bearer ' . $this->access_token]);
//$response = curl('GET', $this->api_url . '/files?fields=*,files(id,name,mimeType,size,modifiedTime,parents,webContentLink,thumbnailLink),nextPageToken' . (($this->driveId!='')?'&driveId=' . $this->driveId . '&corpora=teamDrive&includeItemsFromAllDrives=true&supportsAllDrives=true':''), '', ['Authorization' => 'Bearer ' . $this->access_token]);
if ($path == '/' || $path == '') {
$files = $this->fileList();
//error_log1('root_id' . $files['id']);
//$files['id'] = 'root';
//$files['type'] = 'folder';
} else {
$tmp = splitlast($path, '/');
$parent_path = $tmp[0];
$filename = urldecode($tmp[1]);
$parent_folder = $this->list_path($parent_path);
$i = 0;
foreach ($parent_folder['files'] as $item) {
if ($item['name']==$filename) {
if ($item['mimeType']=='application/vnd.google-apps.folder') {
$files = $this->fileList($item['id']);
$files['type'] = 'folder';
$files['id'] = $item['id'];
$files['name'] = $item['name'];
$files['time'] = $item['modifiedTime'];
$files['size'] = $item['size'];
} else {
if (isset($item['id'])&&$item['shared']!==true) $this->permission('create', $item['id']);
//$this->permission('delete', $files['id']);
//if (isset($item['mimeType']) && $item['mimeType']!='application/vnd.google-apps.folder') {
if (in_array(splitlast($item['name'],'.')[1], $exts['txt'])) {
if (!(isset($item['content'])&&$item['content']['stat']==200)) {
//if (!isset($item['downUrl'])) {
$res = curl('GET', $item['webContentLink'], '', [], 1);
$weblink = $res['returnhead']['Location'];
//if ($weblink!==null) $item['downUrl'] = $weblink;
//else error_log1('Cant get link:' . json_encode($res, JSON_PRETTY_PRINT));
//}
if ($res['stat']==302) {
$content1 = curl('GET', $weblink, '', ["User-Agent"=>"qkqpttgf/OneManager 3.0.0", "Accept"=>"*/*"]);
$item['content'] = $content1;
}// else $content1 = $res;
//error_log1($item['name'] . '~' . json_encode($content1, JSON_PRETTY_PRINT) . PHP_EOL);
$parent_folder['files'][$i] = $item;
savecache('path_' . $path, $parent_folder, $this->disktag);
}
}
//}
//error_log1(json_encode($item, JSON_PRETTY_PRINT));
$files = $item;
}
}
$i++;
}
//echo $files['name'];
}
if (!$files) {
$files['error']['code'] = 'Not Found';
$files['error']['message'] = 'Not Found';
$files['error']['stat'] = 404;
} elseif (isset($files['stat'])) {
$files['error']['stat'] = $files['stat'];
$files['error']['code'] = 'Error';
$files['error']['message'] = $files['body'];
} else {
savecache('path_' . $path, $files, $this->disktag, 600);
}
}
//error_log1('path:' . $path . ', files:' . json_encode($files, JSON_PRETTY_PRINT));
//error_log1('path:' . $path . ', files:' . substr(json_encode($files), 0, 150));
return $files;
}
protected function fileList($parent_file_id = '')
{
$url = $this->api_url . '/files';
$url .= '?fields=files(id,name,mimeType,size,modifiedTime,parents,webContentLink,thumbnailLink,shared,permissions,permissionIds),nextPageToken';
//$url .= '?fields=files(*),nextPageToken';
//$url .= '?q=mimeType=\'application/vnd.google-apps.folder\'';
if ($parent_file_id!='') {
$q = $parent_file_id;
} else {
$q = $this->driveId;
}
$q = '\'' . $q . '\' in parents and trashed = false';
$q = urlencode($q);
$url .= '&q=' . $q;
if ($this->driveId!='root') $url .= '&driveId=' . $this->driveId . '&corpora=teamDrive&includeItemsFromAllDrives=true&supportsAllDrives=true';
$header['Authorization'] = 'Bearer ' . $this->access_token;
$res = curl('GET', $url, '', $header);
if ($res['stat']==200) return json_decode($res['body'], true);
else return $res;
}
protected function permission($op, $fileId)
{
$url = $this->api_url . '/files/' . $fileId . '/permissions';
if ($op=='create') {
$method = 'POST';
$header['Content-Type'] = 'application/json';
$tmp['role'] = 'reader';
$tmp['type'] = 'anyone';
$data = json_encode($tmp);
} elseif ($op=='delete') {
$url .= '/anyoneWithLink';
$method = 'DELETE';
$data = '';
} else {
return false;
}
$url .= '?supportsAllDrives=true';
$header['Authorization'] = 'Bearer ' . $this->access_token;
$res = curl($method, $url, $data, $header);
//error_log1('Set Share' . json_encode($res, JSON_PRETTY_PRINT));
return $res;
}
public function Rename($file, $newname) {
$url = $this->api_url . '/files/' . $file['id'] . '?supportsAllDrives=true';
$tmp['name'] = $newname;
$result = $this->GDAPI('PATCH', $url, json_encode($tmp));
return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']);
}
public function Delete($file) {
$url = $this->api_url . '/files/' . $file['id'] . '?supportsAllDrives=true';
$result = $this->GDAPI('DELETE', $url);
return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']);
}
public function Encrypt($folder, $passfilename, $pass) {
$existfile = $this->list_path($folder['path'] . '/' . $passfilename);
if (isset($existfile['name'])) {
if ($pass==='') {
// 如果为空,删除
$this->Delete(['id'=>$existfile['id']]);
return output('Success', 200);
} else {
$result = $this->editFile($existfile['id'], $pass);
}
} else {
if (!$folder['id']) {
$res = $this->list_path($folder['path']);
//error_log1('res:' . json_encode($res));
$folder['id'] = $res['id'];
}
if (!$folder['id']) {
$folder['id'] = $this->driveId;
}
$result = $this->createFile_c($folder['id'], $passfilename, $pass);
}
//error_log1('2,url:' . $url .' res:' . json_encode($result));
return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']);
}
public function Move($file, $folder) {
$nowParentId = $this->list_path($file['path'])['id'];
if (!$nowParentId) {
$nowParentId = $this->driveId;
}
if (!$folder['id']) {
$res = $this->list_path($folder['path']);
//error_log1('res:' . json_encode($res));
$folder['id'] = $res['id'];
}
if (!$folder['id']) {
$folder['id'] = $this->driveId;
}
$url = $this->api_url . '/files/' . $file['id'] . '?removeParents=' . $nowParentId . '&addParents=' . $folder['id'] . '&supportsAllDrives=true';
//$tmp['name'] = $newname;
$result = $this->GDAPI('PATCH', $url);
return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']);
}
public function Copy($file) {
$url = $this->api_url . '/files/' . $file['id'] . '/copy?supportsAllDrives=true';
$namearr = splitlast($file['name'], '.');
date_default_timezone_set('UTC');
if ($namearr[0]!='') {
$newname = $namearr[0] . '_' . date("Ymd\_His");
if ($namearr[1]!='') $newname .= '.' . $namearr[1];
} else {
$newname = '.' . $namearr[1] . '_' . date("Ymd\_His");
}
$tmp['name'] = $newname;
$result = $this->GDAPI('POST', $url, json_encode($tmp));
return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']);
}
public function Edit($file, $content) {
$tmp = splitlast($file['path'], '/');
$folderpath = $tmp[0];
$filename = $tmp[1];
$existfile = $this->list_path($file['path']);
if (isset($existfile['name'])) {
$result = $this->editFile($existfile['id'], $content);
} else {
$result = $this->createFile_c($this->list_path($folderpath)['id'], $filename, $content);
}
//error_log1('edit: ' . json_encode($result, JSON_PRETTY_PRINT));
if ($result['stat']==200) return output('success', 0);
return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']);
}
public function Create($parent, $type, $name, $content = '') {
$filename = spurlencode($name);
$filename = path_format($parent['path'] . '/' . $filename);
$res = $this->list_path($filename);
//error_log1($filename . '查重:' . json_encode($res, JSON_PRETTY_PRINT) . PHP_EOL);
if (isset($res['name'])) {
$tmp['error']['code'] = 'File exist';
$tmp['error']['message'] = $res;
$tmp['error']['stat'] = 409;
return output(json_encode($this->files_format($tmp), JSON_PRETTY_PRINT), $tmp['error']['stat']);
}
if (!$parent['id']) {
$res = $this->list_path($parent['path']);
//error_log1('找ID:' . json_encode($res));
$parent['id'] = $res['id'];
}
if (!$parent['id']) {
$parent['id'] = $this->driveId;
}
if ($type=='file') {
$result = $this->createFile_c($parent['id'], $name, $content);
}
if ($type=='folder') {
$result = $this->createFolder($parent['id'], $name);
}
//error_log1('data:' . $data . ' res:' . json_encode($result, JSON_PRETTY_PRINT));
//savecache('path_' . $path1, json_decode('{}',true), $_SERVER['disktag'], 1);
return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']);
}
public function get_thumbnails_url($path = '/') {
$res = $this->list_path($path);
$thumb_url = $res['thumbnailLink'];
return $thumb_url;
}
public function bigfileupload($path) {
return output('Stop!\nCan not upload form explorer without token.', 403);
// https://developers.google.com/drive/api/v3/manage-uploads#http---multiple-requests
if ($_POST['upbigfilename']=='') return output('error: no file name', 400);
if (!is_numeric($_POST['filesize'])) return output('error: no file size', 400);
if (!$_SERVER['admin']) if (!isset($_POST['filemd5'])) return output('error: no file md5', 400);
$filename = $_POST['upbigfilename'];
$filename = path_format($path . '/' . $filename);
$res = $this->list_path($filename);
//error_log1($filename . '查重:' . json_encode($res, JSON_PRETTY_PRINT) . PHP_EOL);
if (isset($res['name'])) {
$tmp['error']['code'] = 'File exist';
$tmp['error']['message'] = json_encode($res);
$tmp['error']['stat'] = 409;
return output(json_encode($this->files_format($tmp), JSON_PRETTY_PRINT), $tmp['error']['stat']);
}
$tmp = splitlast($_POST['upbigfilename'], '/');
if ($tmp[1]!='') {
$fileinfo['name'] = $tmp[1];
if ($_SERVER['admin']) $fileinfo['path'] = $tmp[0];
} else {
$fileinfo['name'] = $_POST['upbigfilename'];
}
$fileinfo['size'] = $_POST['filesize'];
$fileinfo['filelastModified'] = $_POST['filelastModified'];
if ($_SERVER['admin']) {
$filename = $fileinfo['name'];
} else {
$tmp1 = splitlast($fileinfo['name'], '.');
if ($tmp1[0]==''||$tmp1[1]=='') $filename = $_POST['filemd5'];
else $filename = $_POST['filemd5'] . '.' . $tmp1[1];
}
$parent = $this->list_path($path . '/' . $fileinfo['path']);
if (isset($parent['id'])) {
$parent_file_id = $parent['id'];
} else {
$res = $this->createFolder($this->list_path($path)['id'], $fileinfo['path']);
//error_log1($res['body']);
$parent_file_id = json_decode($res['body'], true)['id'];
}
$url = 'https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable';
$res = $this->list_path($path);
//error_log1('找ID:' . json_encode($res));
$parentId = $res['id'];
if (!$parentId) {
$parentId = $this->driveId;
}
$tmp['name'] = $_POST['upbigfilename'];
$tmp['parents'][0] = $parentId;
$header['Authorization'] = 'Bearer ' . $this->access_token;
$header['Content-Type'] = 'application/json; charset=UTF-8';
//$header['Content-Length'] = '';
//$header['X-Upload-Content-Type'] = '';
//$header['X-Upload-Content-Length'] = $_POST['filesize'];
$response = curl('POST', $url, json_encode($tmp), $header, 1);
return output($response['returnhead']['Location'], $response['stat']);
}
protected function editFile($id, $content) {
$url = 'https://www.googleapis.com/upload/drive/v3/files/' . $id . '?uploadType=multipart&supportsAllDrives=true';
$boundary = md5($id . date());
$header['Content-Type'] = 'multipart/related; boundary=' . $boundary;
$header['Authorization'] = 'Bearer ' . $this->access_token;
$data = '--' . $boundary . "\r\n";
$data .= 'Content-Type: application/json; charset=UTF-8' . "\r\n";
$data .= "\r\n";
$data .= "\r\n";
$data .= "\r\n";
$data .= '--' . $boundary . "\r\n";
$data .= 'Content-Type: text/plain' . "\r\n";
$data .= "\r\n";
$data .= $content . "\r\n";
$data .= '--' . $boundary . "--";
$result = curl('PATCH', $url, $data, $header);
//error_log1('url: ' . $url . ' data: ' . $data . ' result: ' . json_encode($result, JSON_PRETTY_PRINT));
return $result;
}
protected function createFile_c($parentId, $name, $content) {
while (substr($name, 0, 1)=='/') $name = substr($name, 1);
while (substr($name, -1)=='/') $name = substr($name, 0, -1);
if (strpos($name, '/')>0) {
$p = splitlast($name, '/');
$res = $this->createFolder($parentId, $p[0]);
$parentId = json_decode($res['body'], true)['id'];
$name = $p[1];
}
$url = 'https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart&supportsAllDrives=true';
$tmp['name'] = $name;
$tmp['parents'][0] = $parentId;
$boundary = md5($name . date());
$header['Content-Type'] = 'multipart/related; boundary=' . $boundary;
$header['Authorization'] = 'Bearer ' . $this->access_token;
$data = '--' . $boundary . "\r\n";
$data .= 'Content-Type: application/json; charset=UTF-8' . "\r\n";
$data .= "\r\n";
$data .= json_encode($tmp, JSON_PRETTY_PRINT) . "\r\n";
$data .= "\r\n";
$data .= '--' . $boundary . "\r\n";
$data .= 'Content-Type: text/plain' . "\r\n";
$data .= "\r\n";
$data .= $content . "\r\n";
$data .= '--' . $boundary . "--";
$result = curl('POST', $url, $data, $header);
return $result;
}
protected function createFolder($parentId, $name) {
while (substr($name, 0, 1)=='/') $name = substr($name, 1);
while (substr($name, -1)=='/') $name = substr($name, 0, -1);
if (strpos($name, '/')>0) {
$p = splitlast($name, '/');
$res = $this->createFolder($parentId, $p[0]);
$parentId = json_decode($res['body'], true)['id'];
$name = $p[1];
}
$url = $this->api_url . '/files?&supportsAllDrives=true';
$tmp['name'] = $name;
$tmp['parents'][0] = $parentId;
$tmp['mimeType'] = 'application/vnd.google-apps.folder';
$data = json_encode($tmp);
$header['Content-Type'] = 'application/json; charset=UTF-8';
$header['Authorization'] = 'Bearer ' . $this->access_token;
$result = curl('POST', $url, $data, $header);
return $result;
}
public function AddDisk() {
global $constStr;
global $EnvConfigs;
$envs = '';
foreach ($EnvConfigs as $env => $v) if (isCommonEnv($env)) $envs .= '\'' . $env . '\', ';
$url = path_format($_SERVER['PHP_SELF'] . '/');
if (isset($_GET['Finish'])) {
if ($this->access_token == '') {
$refresh_token = getConfig('refresh_token', $this->disktag);
if (!$refresh_token) {
$html = 'No refresh_token config, please AddDisk again or wait minutes.<br>' . $this->disktag;
$title = 'Error';
return message($html, $title, 201);
}
$response = $this->get_access_token($refresh_token);
if (!$response) return message($this->error['body'], 'Error', $this->error['stat']);
}
$tmp = null;
if ($_POST['DriveType']=='Googledrive') {
$tmp['driveId'] = 'root';
} else {
// 直接是id
$tmp['driveId'] = $_POST['DriveType'];
}
$response = setConfigResponse( setConfig($tmp, $this->disktag) );
if (api_error($response)) {
$html = api_error_msg($response);
$title = 'Error';
return message($html, $title, 201);
} else {
$str .= '<meta http-equiv="refresh" content="5;URL=' . $url . '">';
return message($str, getconstStr('WaitJumpIndex'), 201);
}
}
if (isset($_GET['SelectDrive'])) {
if ($this->access_token == '') {
$refresh_token = getConfig('refresh_token', $this->disktag);
if (!$refresh_token) {
$html = 'No refresh_token config, please AddDisk again or wait minutes.<br>' . $this->disktag;
$title = 'Error';
return message($html, $title, 201);
}
$response = $this->get_access_token($refresh_token);
if (!$response) return message($this->error['body'], 'Error', $this->error['stat']);
}
$api = $this->api_url . '/drives';
$arr = curl('GET', $api, '', [ 'Authorization' => 'Bearer ' . $this->access_token ]);
//if (!($arr['stat']==200||$arr['stat']==403||$arr['stat']==400||$arr['stat']==404))
if ($arr['stat']!=200) return message($arr['stat'] . json_encode(json_decode($arr['body']), JSON_PRETTY_PRINT), 'Get followedSites', $arr['stat']);
error_log1($arr['body']);
$drives = json_decode($arr['body'], true)['drives'];
$title = 'Select Driver';
$html = '
<div>
<form action="?Finish&disktag=' . $_GET['disktag'] . '&AddDisk=' . get_class($this) . '" method="post" onsubmit="return notnull(this);">
<label><input type="radio" name="DriveType" value="Googledrive" checked>' . 'Use Googledrive ' . getconstStr(' ') . '</label><br>';
if ($drives[0]!='') foreach ($drives as $k => $v) {
$html .= '
<label>
<input type="radio" name="DriveType" value="' . $v['id'] . '" onclick="document.getElementById(\'sharepointSiteUrl\').value=\'' . $v['webUrl'] . '\';">' . 'Use Google share drive: <br><div style="width:100%;margin:0px 35px">: ' . $v['name'] . '<br>siteid: ' . $v['id'] . '</div>
</label>';
}
$html .= '
<input type="submit" value="' . getconstStr('Submit') . '">
</form>
</div>
<script>
function notnull(t)
{
if (t.DriveType.value==\'\') {
alert(\'Select a Disk\');
return false;
}
if (t.DriveType.value==\'Custom\') {
if (t.sharepointSite.value==\'\') {
alert(\'sharepoint Site Address\');
return false;
}
}
return true;
}
</script>
';
return message($html, $title, 201);
}
if (isset($_GET['install2']) && isset($_GET['code'])) {
$data['client_id'] = $this->client_id;
$data['client_secret'] = $this->client_secret;
$data['grant_type'] = 'authorization_code';
$data['redirect_uri'] = $this->redirect_uri;
$data['code'] = $_GET['code'];
$api = $this->oauth_url . 'token';
//$api = 'https://www.googleapis.com/oauth2/v4/token';
$tmp = curl('POST',
$api,
json_encode($data)
);
if ($tmp['stat']==200) $ret = json_decode($tmp['body'], true);
if (isset($ret['refresh_token'])) {
$refresh_token = $ret['refresh_token'];
$str = '
refresh_token :<br>';
$str .= '
<textarea readonly style="width: 95%">' . $refresh_token . '</textarea><br><br>
' . getconstStr('SavingToken') . '
<script>
var texta=document.getElementsByTagName(\'textarea\');
for(i=0;i<texta.length;i++) {
texta[i].style.height = texta[i].scrollHeight + \'px\';
}
</script>';
$tmptoken['refresh_token'] = $refresh_token;
//$tmptoken['token_expires'] = time()+7*24*60*60;
$response = setConfigResponse( setConfig($tmptoken, $this->disktag) );
if (api_error($response)) {
$html = api_error_msg($response);
$title = 'Error';
return message($html, $title, 201);
} else {
savecache('access_token', $ret['access_token'], $this->disktag, $ret['expires_in'] - 60);
$str .= '
<meta http-equiv="refresh" content="3;URL=' . $url . '?AddDisk=' . get_class($this) . '&disktag=' . $_GET['disktag'] . '&SelectDrive">';
return message($str, getconstStr('Wait') . ' 3s', 201);
}
}
return message('<pre>' . $tmp['body'] . '</pre>', $tmp['stat']);
//return message('<pre>' . json_encode($ret, JSON_PRETTY_PRINT) . '</pre>', 500);
}
if (isset($_GET['install1'])) {
if (get_class($this)=='Googledrive') {
return message('
<a href="" id="a1">' . getconstStr('JumptoOffice') . '</a>
<script>
url=location.protocol + "//" + location.host + "' . $url . '?install2&disktag=' . $_GET['disktag'] . '&AddDisk=' . get_class($this) . '";
url="' . $this->oauth_url . 'auth?scope=' . $this->scope . '&response_type=code&client_id=' . $this->client_id . '&redirect_uri=' . $this->redirect_uri . '&access_type=offline&state=' . '"+encodeURIComponent(url);
document.getElementById(\'a1\').href=url;
//window.open(url,"_blank");
location.href = url;
</script>
', getconstStr('Wait') . ' 1s', 201);
} else {
return message('Something error, retry after a few seconds.', 'Retry', 201);
}
}
if (isset($_GET['install0'])) {
if ($_POST['disktag_add']!='') {
$_POST['disktag_add'] = preg_replace('/[^0-9a-zA-Z|_]/i', '', $_POST['disktag_add']);
$f = substr($_POST['disktag_add'], 0, 1);
if (strlen($_POST['disktag_add'])==1) $_POST['disktag_add'] .= '_';
if (isCommonEnv($_POST['disktag_add'])) {
return message('Do not input ' . $envs . '<br><button onclick="location.href = location.href;">'.getconstStr('Refresh').'</button>', 'Error', 201);
} elseif (!(('a'<=$f && $f<='z') || ('A'<=$f && $f<='Z'))) {
return message('Please start with letters<br><button onclick="location.href = location.href;">'.getconstStr('Refresh').'</button>
<script>
var expd = new Date();
expd.setTime(expd.getTime()+1);
var expires = "expires="+expd.toGMTString();
document.cookie=\'disktag=; path=/; \'+expires;
</script>', 'Error', 201);
}
$tmp = null;
// clear envs
foreach ($EnvConfigs as $env => $v) if (isInnerEnv($env)) $tmp[$env] = '';
//$this->disktag = $_POST['disktag_add'];
$tmp['disktag_add'] = $_POST['disktag_add'];
$tmp['diskname'] = $_POST['diskname'];
$tmp['Driver'] = 'Googledrive';
if ($_POST['NT_Drive_custom']=='on') {
$tmp['client_id'] = $_POST['NT_client_id'];
$tmp['client_secret'] = $_POST['NT_client_secret'];
}
$response = setConfigResponse( setConfig($tmp, $this->disktag) );
if (api_error($response)) {
$html = api_error_msg($response);
$title = 'Error';
} else {
$title = getconstStr('MayinEnv');
$html = getconstStr('Wait') . ' 3s<meta http-equiv="refresh" content="3;URL=' . $url . '?install1&disktag=' . $_GET['disktag'] . '&AddDisk=Googledrive">';
}
return message($html, $title, 201);
}
}
$html = '
<div>
<form id="form1" action="" method="post" onsubmit="return notnull(this);">
' . getconstStr('DiskTag') . ': (' . getConfig('disktag') . ')
<input type="text" name="disktag_add" placeholder="' . getconstStr('EnvironmentsDescription')['disktag'] . '" style="width:100%"><br>
' . getconstStr('DiskName') . ':
<input type="text" name="diskname" placeholder="' . getconstStr('EnvironmentsDescription')['diskname'] . '" style="width:100%"><br>
<br>
<div>
<label><input type="checkbox" name="NT_Drive_custom" onclick="document.getElementById(\'NT_secret\').style.display=(this.checked?\'\':\'none\');">' . getconstStr('CustomIdSecret') . '</label><br>
<div id="NT_secret" style="display:none;margin:10px 35px">
<a href="https://console.cloud.google.com/apis" target="_blank">' . getconstStr('GetSecretIDandKEY') . '</a><br>
return_uri(Reply URL):<br>https://scfonedrive.github.io<br>
client_id:<input type="text" name="NT_client_id" style="width:100%" placeholder="123456789-abcdefghijklmno.apps.googleusercontent.com"><br>
client_secret:<input type="text" name="NT_client_secret" style="width:100%"><br>
</div>
</div>
<br>';
if ($_SERVER['language']=='zh-cn') $html .= '你要理解 scfonedrive.github.io 是github上的静态网站,<br><font color="red">除非github真的挂掉</font>了,<br>不然,稍后你如果连不上,请检查你的运营商或其它“你懂的”问题!<br>';
$html .='
<input type="submit" value="' . getconstStr('Submit') . '">
</form>
</div>
<script>
function notnull(t)
{
if (t.disktag_add.value==\'\') {
alert(\'' . getconstStr('DiskTag') . '\');
return false;
}
envs = [' . $envs . '];
if (envs.indexOf(t.disktag_add.value)>-1) {
alert("Do not input ' . $envs . '");
return false;
}
var reg = /^[a-zA-Z]([_a-zA-Z0-9]{1,20})$/;
if (!reg.test(t.disktag_add.value)) {
alert(\'' . getconstStr('TagFormatAlert') . '\');
return false;
}
if (t.NT_Drive_custom.checked==true) {
if (t.NT_client_secret.value==\'\'||t.NT_client_id.value==\'\') {
alert(\'client_id & client_secret\');
return false;
}
}
document.getElementById("form1").action="?install0&disktag=" + t.disktag_add.value + "&AddDisk=Googledrive";
return true;
}
</script>';
$title = 'Select Account Type';
return message($html, $title, 201);
}
protected function get_access_token($refresh_token) {
if (!$refresh_token) {
$tmp['stat'] = 0;
$tmp['body'] = 'No refresh_token';
$this->error = $tmp;
return false;
}
if (!($this->access_token = getcache('access_token', $this->disktag))) {
$p=0;
$data['client_id'] = $this->client_id;
$data['client_secret'] = $this->client_secret;
$data['grant_type'] = 'refresh_token';
//$data['redirect_uri'] = $this->redirect_uri;
$data['refresh_token'] = $refresh_token;
while ($response['stat']==0&&$p<3) {
//$response = curl('POST', 'https://www.googleapis.com/oauth2/v4/token', json_encode($data));
$response = curl('POST', $this->oauth_url . 'token', json_encode($data));
$p++;
}
if ($response['stat']==200) $ret = json_decode($response['body'], true);
if (!isset($ret['access_token'])) {
error_log1($this->oauth_url . 'token' . '?client_id=' . $this->client_id . '&client_secret=' . $this->client_secret . '&grant_type=refresh_token&refresh_token=' . substr($refresh_token, 0, 20) . '******' . substr($refresh_token, -20));
error_log1('failed to get [' . $this->disktag . '] access_token. response: ' . $response['body']);
$response['body'] = json_encode(json_decode($response['body']), JSON_PRETTY_PRINT);
$response['body'] .= '\nfailed to get [' . $this->disktag . '] access_token.';
$this->error = $response;
return false;
//throw new Exception($response['stat'].', failed to get ['.$this->disktag.'] access_token.'.$response['body']);
}
$tmp = $ret;
$tmp['access_token'] = substr($tmp['access_token'], 0, 10) . '******';
//$tmp['refresh_token'] = substr($tmp['refresh_token'], 0, 10) . '******';
error_log1('[' . $this->disktag . '] Get access token:' . json_encode($tmp, JSON_PRETTY_PRINT));
$this->access_token = $ret['access_token'];
savecache('access_token', $this->access_token, $this->disktag, $ret['expires_in'] - 300);
//if (time()>getConfig('token_expires', $this->disktag)) setConfig([ 'refresh_token' => $ret['refresh_token'], 'token_expires' => time()+7*24*60*60 ], $this->disktag);
return true;
}
return true;
}
public function getDiskSpace() {
if ($this->driveId!='root') return '0 / 0';
if (!($diskSpace = getcache('diskSpace', $this->disktag))) {
$url = $this->api_url . '/about?fields=storageQuota';
$response = $this->GDAPI('GET', $url);
if ($response['stat']==200) {
$res = json_decode($response['body'], true)['storageQuota'];
$used = size_format($res['usage']);
$total = size_format($res['limit']);
$diskSpace = $used . ' / ' . $total;
savecache('diskSpace', $diskSpace, $this->disktag);
} else return json_encode($response);
}
return $diskSpace;
}
protected function GDAPI($method, $url, $data = '')
{
/*if (substr($path,0,7) == 'http://' or substr($path,0,8) == 'https://') {
$url = $path;
} else {
$url = $this->api_url;
if ($path=='' or $path=='/') {
$url .= '/';
} else {
$url .= ':' . $path;
if (substr($url,-1)=='/') $url=substr($url,0,-1);
}
if ($method=='PUT') {
if ($path=='' or $path=='/') {
$url .= 'content';
} else {
$url .= ':/content';
}
$headers['Content-Type'] = 'text/plain';
} elseif ($method=='PATCH') {
$headers['Content-Type'] = 'application/json';
} elseif ($method=='POST') {
$headers['Content-Type'] = 'application/json';
} elseif ($method=='DELETE') {
$headers['Content-Type'] = 'application/json';
} else {
if ($path=='' or $path=='/') {
$url .= $method;
} else {
$url .= ':/' . $method;
}
$method='POST';
$headers['Content-Type'] = 'application/json';
}
}*/
$headers['Authorization'] = 'Bearer ' . $this->access_token;
if (!isset($headers['Accept'])) $headers['Accept'] = '*/*';
$headers['Content-Type'] = 'application/json';
//if (!isset($headers['Referer'])) $headers['Referer'] = $url;*
$sendHeaders = array();
foreach ($headers as $headerName => $headerVal) {
$sendHeaders[] = $headerName . ': ' . $headerVal;
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
//curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $sendHeaders);
$response['body'] = curl_exec($ch);
$response['stat'] = curl_getinfo($ch, CURLINFO_HTTP_CODE);
//$response['Location'] = curl_getinfo($ch);
curl_close($ch);
/*error_log1($response['stat'].'
' . $response['body'].'
' . $url.'
' . $data);*/
return $response;
}
}
+1007
View File
File diff suppressed because it is too large Load Diff
+26
View File
@@ -0,0 +1,26 @@
<?php
if (!class_exists('Onedrive')) require 'Onedrive.php';
class OnedriveCN extends Onedrive {
function __construct($tag) {
$this->disktag = $tag;
$this->redirect_uri = 'https://scfonedrive.github.io';
if (getConfig('client_id', $tag) && getConfig('client_secret', $tag)) {
$this->client_id = getConfig('client_id', $tag);
$this->client_secret = getConfig('client_secret', $tag);
} else {
$this->client_id = '31f3bed5-b9d9-4173-86a4-72c73d278617';
$this->client_secret = 'P5-ZNtFK-tT90J.We_-DcsuB8uV7AfjL8Y';
}
$this->oauth_url = 'https://login.partner.microsoftonline.cn/common/oauth2/v2.0/';
$this->api_url = 'https://microsoftgraph.chinacloudapi.cn/v1.0';
$this->scope = 'https://microsoftgraph.chinacloudapi.cn/Files.ReadWrite.All https://microsoftgraph.chinacloudapi.cn/Sites.ReadWrite.All offline_access';
$res = $this->get_access_token(getConfig('refresh_token', $tag));
$this->client_secret = urlencode($this->client_secret);
$this->scope = urlencode($this->scope);
$this->DownurlStrName = '@microsoft.graph.downloadUrl';
$this->ext_api_url = '/me/drive/root';
}
}
+67
View File
@@ -0,0 +1,67 @@
<?php
if (!class_exists('Onedrive')) require 'Onedrive.php';
class Sharelink extends Onedrive {
function __construct($tag) {
$this->disktag = $tag;
$this->redirect_uri = 'https://scfonedrive.github.io';
$this->api_url = getConfig('shareapiurl', $tag);
$res = $this->get_access_token(1);
//$this->ext_api_url = '/me/drive/root';
$this->DownurlStrName = '@content.downloadUrl';
}
public function ext_show_innerenv()
{
return [ 'shareurl' ];
}
protected function get_access_token($refresh_token) {
if (!($this->access_token = getcache('access_token', $this->disktag))) {
$shareurl = getConfig('shareurl', $this->disktag);
if (!($this->sharecookie = getcache('sharecookie', $this->disktag))) {
$res = curl('GET', $shareurl, '', [], 1);
error_log1(json_encode($res, JSON_PRETTY_PRINT));
if (isset($res['returnhead']['Set-Cookie'])) $this->sharecookie = $res['returnhead']['Set-Cookie'];
if (isset($res['returnhead']['set-cookie'])) $this->sharecookie = $res['returnhead']['set-cookie'];
if ($this->sharecookie=='') {
$this->error = $res;
return false;
}
savecache('sharecookie', $this->sharecookie, $this->disktag);
}
$tmp1 = splitlast($shareurl, '/')[0];
$account = splitlast($tmp1, '/')[1];
$domain = splitlast($shareurl, '/:')[0];
$response = curl('POST',
$domain . "/personal/" . $account . "/_api/web/GetListUsingPath(DecodedUrl=@a1)/RenderListDataAsStream?@a1='" . urlencode("/personal/" . $account . "/Documents") . "'&RootFolder=" . urlencode("/personal/" . $account . "/Documents/") . "&TryNewExperienceSingle=TRUE",
'{"parameters":{"__metadata":{"type":"SP.RenderListDataParameters"},"RenderOptions":136967,"AllowMultipleValueFilterForTaxonomyFields":true,"AddRequiredFields":true}}',
[ 'Accept' => 'application/json;odata=verbose', 'Content-Type' => 'application/json;odata=verbose', 'origin' => $domain, 'Cookie' => $this->sharecookie ]
);
if ($response['stat']==200) $ret = json_decode($response['body'], true);
$this->access_token = splitlast($ret['ListSchema']['.driveAccessToken'],'=')[1];
$this->api_url = $ret['ListSchema']['.driveUrl'].'/root';
if (!$this->access_token) {
error_log1($domain . "/personal/" . $account . "/_api/web/GetListUsingPath(DecodedUrl=@a1)/RenderListDataAsStream?@a1='" . urlencode("/personal/" . $account . "/Documents") . "'&RootFolder=" . urlencode("/personal/" . $account . "/Documents/") . "&TryNewExperienceSingle=TRUE");
error_log1('failed to get share access_token. response' . json_encode($ret));
//$response['body'] = json_encode(json_decode($response['body']), JSON_PRETTY_PRINT);
$response['body'] .= '<br>' .json_decode($response['body'], true)['error']['message']['value'];
$response['body'] .= '<br>failed to get shareurl access_token.';
$this->error = $response;
return false;
//throw new Exception($response['stat'].', failed to get share access_token.'.$response['body']);
}
//$tmp = $ret;
//$tmp['access_token'] = '******';
//error_log1('['.$this->disktag.'] Get access token:'.json_encode($tmp, JSON_PRETTY_PRINT));
savecache('access_token', $this->access_token, $this->disktag);
$tmp1 = null;
if (getConfig('shareapiurl', $this->disktag)!=$this->api_url) $tmp1['shareapiurl'] = $this->api_url;
//if (getConfig('sharecookie', $this->disktag)!=$this->sharecookie) $tmp1['sharecookie'] = $this->sharecookie;
if (!!$tmp1) setConfig($tmp1, $this->disktag);
return true;
}
return true;
}
}
+31
View File
@@ -0,0 +1,31 @@
<?php
if (!class_exists('Onedrive')) require 'Onedrive.php';
class Sharepoint extends Onedrive {
function __construct($tag) {
$this->disktag = $tag;
$this->redirect_uri = 'https://scfonedrive.github.io';
if (getConfig('client_id', $tag) && getConfig('client_secret', $tag)) {
$this->client_id = getConfig('client_id', $tag);
$this->client_secret = getConfig('client_secret', $tag);
} else {
$this->client_id = '734ef928-d74c-4555-8d1b-d942fa0a1a41';
$this->client_secret = '_I5gOpmG5vTC2Ts_K._wCW4nN1km~4Pk52';
}
$this->oauth_url = 'https://login.microsoftonline.com/common/oauth2/v2.0/';
$this->api_url = 'https://graph.microsoft.com/v1.0';
$this->scope = 'https://graph.microsoft.com/Files.ReadWrite.All https://graph.microsoft.com/Sites.ReadWrite.All offline_access';
$res = $this->get_access_token(getConfig('refresh_token', $tag));
$this->client_secret = urlencode($this->client_secret);
$this->scope = urlencode($this->scope);
$this->DownurlStrName = '@microsoft.graph.downloadUrl';
$this->ext_api_url = '/sites/' . getConfig('siteid', $tag) . '/drive/root';
}
public function ext_show_innerenv()
{
return [ 'sharepointSite', 'siteid' ];
}
}
+31
View File
@@ -0,0 +1,31 @@
<?php
if (!class_exists('Onedrive')) require 'Onedrive.php';
class SharepointCN extends Onedrive {
function __construct($tag) {
$this->disktag = $tag;
$this->redirect_uri = 'https://scfonedrive.github.io';
if (getConfig('client_id', $tag) && getConfig('client_secret', $tag)) {
$this->client_id = getConfig('client_id', $tag);
$this->client_secret = getConfig('client_secret', $tag);
} else {
$this->client_id = '31f3bed5-b9d9-4173-86a4-72c73d278617';
$this->client_secret = 'P5-ZNtFK-tT90J.We_-DcsuB8uV7AfjL8Y';
}
$this->oauth_url = 'https://login.partner.microsoftonline.cn/common/oauth2/v2.0/';
$this->api_url = 'https://microsoftgraph.chinacloudapi.cn/v1.0';
$this->scope = 'https://microsoftgraph.chinacloudapi.cn/Files.ReadWrite.All https://microsoftgraph.chinacloudapi.cn/Sites.ReadWrite.All offline_access';
$res = $this->get_access_token(getConfig('refresh_token', $tag));
$this->client_secret = urlencode($this->client_secret);
$this->scope = urlencode($this->scope);
$this->DownurlStrName = '@microsoft.graph.downloadUrl';
$this->ext_api_url = '/sites/' . getConfig('siteid', $tag) . '/drive/root';
}
public function ext_show_innerenv()
{
return [ 'sharepointSite', 'siteid' ];
}
}
+2 -28
View File
@@ -1,5 +1,6 @@
<?php <?php
error_reporting(E_ALL & ~E_NOTICE); //error_reporting(E_ALL & ~E_NOTICE);
error_reporting(0);
include 'vendor/autoload.php'; include 'vendor/autoload.php';
include 'conststr.php'; include 'conststr.php';
include 'common.php'; include 'common.php';
@@ -15,8 +16,6 @@ if (isset($_SERVER['USER'])&&$_SERVER['USER']==='qcloud') {
//else include 'platform/HuaweiFG_env.php'; //else include 'platform/HuaweiFG_env.php';
echo 'FG' . PHP_EOL; echo 'FG' . PHP_EOL;
} elseif ($_SERVER['BCE_CFC_RUNTIME_NAME']=='php7') { } elseif ($_SERVER['BCE_CFC_RUNTIME_NAME']=='php7') {
//set_include_path(get_include_path() . PATH_SEPARATOR . '/opt/php');
//include 'BaiduBce.phar';
include 'platform/BaiduCFC.php'; include 'platform/BaiduCFC.php';
} elseif (isset($_SERVER['HEROKU_APP_DIR'])&&$_SERVER['HEROKU_APP_DIR']==='/app') { } elseif (isset($_SERVER['HEROKU_APP_DIR'])&&$_SERVER['HEROKU_APP_DIR']==='/app') {
include 'platform/Heroku.php'; include 'platform/Heroku.php';
@@ -136,28 +135,3 @@ function handler($event, $context)
} }
} }
// used by Aliyun FC
function myErrorHandler($errno, $errstr, $errfile, $errline) {
if (!(error_reporting() & $errno)) {
return false;
}
switch ($errno) {
case E_USER_ERROR:
$errInfo = array(
"errorMessage" => $errstr,
"errorType" => \ServerlessFC\friendly_error_type($errno),
"stackTrace" => array(
"file" => $errfile,
"line" => $errline,
),
);
throw new \ErrorException($errstr, 0, $errno, $errfile, $errline);
break;
default: // E_USER_WARNING | E_USER_NOTICE
break;
}
return true;
}
+56 -15
View File
@@ -28,7 +28,6 @@ function GetGlobalVariable($event)
$pos = strpos($cookievalues,"="); $pos = strpos($cookievalues,"=");
$_COOKIE[urldecode(substr($cookievalues,0,$pos))]=urldecode(substr($cookievalues,$pos+1)); $_COOKIE[urldecode(substr($cookievalues,0,$pos))]=urldecode(substr($cookievalues,$pos+1));
} }
$_SERVER['FC_SERVER_PATH'] = '/var/fc/runtime/php7.2';
} }
function GetPathSetting($event, $context) function GetPathSetting($event, $context)
@@ -52,22 +51,31 @@ function GetPathSetting($event, $context)
$_SERVER['PHP_SELF'] = path_format($_SERVER['base_path'] . $path); $_SERVER['PHP_SELF'] = path_format($_SERVER['base_path'] . $path);
$_SERVER['REMOTE_ADDR'] = $event['clientIP']; $_SERVER['REMOTE_ADDR'] = $event['clientIP'];
$_SERVER['HTTP_X_REQUESTED_WITH'] = $event['headers']['X-Requested-With'][0]; $_SERVER['HTTP_X_REQUESTED_WITH'] = $event['headers']['X-Requested-With'][0];
if (isset($event['headers']['Authorization'])) {
$basicAuth = splitfirst(base64_decode(splitfirst($event['headers']['Authorization'][0], 'Basic ')[1]), ':');
$_SERVER['PHP_AUTH_USER'] = $basicAuth[0];
$_SERVER['PHP_AUTH_PW'] = $basicAuth[1];
}
$_SERVER['HTTP_HOST'] = $event['headers']['Host'][0];
$_SERVER['REQUEST_SCHEME'] = $event['headers']['X-Forwarded-Proto'][0];
$_SERVER['host'] = $_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['HTTP_HOST'];
//if ($_SERVER['HTTP_REFERER']!='')
$_SERVER['referhost'] = explode('/', $event['headers']['Referer'][0])[2];
$_SERVER['FC_SERVER_PATH'] = '/var/fc/runtime/php7.2';
return $path; return $path;
} }
function getConfig($str, $disktag = '') function getConfig($str, $disktag = '')
{ {
global $InnerEnv; if (isInnerEnv($str)) {
global $Base64Env;
if (in_array($str, $InnerEnv)) {
if ($disktag=='') $disktag = $_SERVER['disktag']; if ($disktag=='') $disktag = $_SERVER['disktag'];
$env = json_decode(getenv($disktag), true); $env = json_decode(getenv($disktag), true);
if (isset($env[$str])) { if (isset($env[$str])) {
if (in_array($str, $Base64Env)) return base64y_decode($env[$str]); if (isBase64Env($str)) return base64y_decode($env[$str]);
else return $env[$str]; else return $env[$str];
} }
} else { } else {
if (in_array($str, $Base64Env)) return base64y_decode(getenv($str)); if (isBase64Env($str)) return base64y_decode(getenv($str));
else return getenv($str); else return getenv($str);
} }
return ''; return '';
@@ -75,8 +83,6 @@ function getConfig($str, $disktag = '')
function setConfig($arr, $disktag = '') function setConfig($arr, $disktag = '')
{ {
global $InnerEnv;
global $Base64Env;
if ($disktag=='') $disktag = $_SERVER['disktag']; if ($disktag=='') $disktag = $_SERVER['disktag'];
$disktags = explode("|", getConfig('disktag')); $disktags = explode("|", getConfig('disktag'));
$diskconfig = json_decode(getenv($disktag), true); $diskconfig = json_decode(getenv($disktag), true);
@@ -84,8 +90,11 @@ function setConfig($arr, $disktag = '')
$indisk = 0; $indisk = 0;
$operatedisk = 0; $operatedisk = 0;
foreach ($arr as $k => $v) { foreach ($arr as $k => $v) {
if (in_array($k, $InnerEnv)) { if (isCommonEnv($k)) {
if (in_array($k, $Base64Env)) $diskconfig[$k] = base64y_encode($v); if (isBase64Env($k)) $tmp[$k] = base64y_encode($v);
else $tmp[$k] = $v;
} elseif (isInnerEnv($k)) {
if (isBase64Env($k)) $diskconfig[$k] = base64y_encode($v);
else $diskconfig[$k] = $v; else $diskconfig[$k] = $v;
$indisk = 1; $indisk = 1;
} elseif ($k=='disktag_add') { } elseif ($k=='disktag_add') {
@@ -95,11 +104,15 @@ function setConfig($arr, $disktag = '')
$disktags = array_diff($disktags, [ $v ]); $disktags = array_diff($disktags, [ $v ]);
$tmp[$v] = ''; $tmp[$v] = '';
$operatedisk = 1; $operatedisk = 1;
} elseif ($k=='disktag_copy') {
$newtag = $v . '_' . date("Ymd_His");
$tmp[$newtag] = getConfig($v);
array_push($disktags, $newtag);
$operatedisk = 1;
} elseif ($k=='disktag_rename' || $k=='disktag_newname') { } elseif ($k=='disktag_rename' || $k=='disktag_newname') {
if ($arr['disktag_rename']!=$arr['disktag_newname']) $operatedisk = 1; if ($arr['disktag_rename']!=$arr['disktag_newname']) $operatedisk = 1;
} else { } else {
if (in_array($k, $Base64Env)) $tmp[$k] = base64y_encode($v); $tmp[$k] = json_encode($v);
else $tmp[$k] = $v;
} }
} }
if ($indisk) { if ($indisk) {
@@ -109,7 +122,12 @@ function setConfig($arr, $disktag = '')
} }
if ($operatedisk) { if ($operatedisk) {
if (isset($arr['disktag_newname']) && $arr['disktag_newname']!='') { if (isset($arr['disktag_newname']) && $arr['disktag_newname']!='') {
$tmp['disktag'] = str_replace($arr['disktag_rename'], $arr['disktag_newname'], getConfig('disktag')); $tags = [];
foreach ($disktags as $tag) {
if ($tag==$arr['disktag_rename']) array_push($tags, $arr['disktag_newname']);
else array_push($tags, $tag);
}
$tmp['disktag'] = implode('|', $tags);
$tmp[$arr['disktag_newname']] = getConfig($arr['disktag_rename']); $tmp[$arr['disktag_newname']] = getConfig($arr['disktag_rename']);
$tmp[$arr['disktag_rename']] = ''; $tmp[$arr['disktag_rename']] = '';
} else { } else {
@@ -245,7 +263,7 @@ language:<br>';
return message($html, $title, 201); return message($html, $title, 201);
} }
$html .= '<a href="?install0">'.getconstStr('ClickInstall').'</a>, '.getconstStr('LogintoBind'); $html .= '<a href="?install0">'.getconstStr('ClickInstall').'</a>, '.getconstStr('LogintoBind');
$title = 'Error'; $title = 'Install';
return message($html, $title, 201); return message($html, $title, 201);
} }
@@ -321,7 +339,8 @@ function updateEnvironment($Envs, $accountId, $region, $service_name, $function_
$tmp_env[$key1] = $value1; $tmp_env[$key1] = $value1;
} }
$tmp_env = array_filter($tmp_env, 'array_value_isnot_null'); // remove null. 清除空值 $tmp_env = array_filter($tmp_env, 'array_value_isnot_null'); // remove null. 清除空值
ksort($tmp_env); //ksort($tmp_env);
sortConfig($tmp_env);
$tmpdata['environmentVariables'] = $tmp_env; $tmpdata['environmentVariables'] = $tmp_env;
return FCAPI2016($config, 'PUT', json_encode($tmpdata)); return FCAPI2016($config, 'PUT', json_encode($tmpdata));
@@ -457,3 +476,25 @@ function addFileToZip($zip, $rootpath, $path = '')
} }
@closedir($path); @closedir($path);
} }
function myErrorHandler($errno, $errstr, $errfile, $errline) {
if (!(error_reporting() & $errno)) {
return false;
}
switch ($errno) {
case E_USER_ERROR:
$errInfo = array(
"errorMessage" => $errstr,
"errorType" => \ServerlessFC\friendly_error_type($errno),
"stackTrace" => array(
"file" => $errfile,
"line" => $errline,
),
);
throw new \ErrorException($errstr, 0, $errno, $errfile, $errline);
break;
default: // E_USER_WARNING | E_USER_NOTICE
break;
}
return true;
}
+36 -17
View File
@@ -26,9 +26,6 @@ function GetGlobalVariable($event)
$pos = strpos($cookievalues,"="); $pos = strpos($cookievalues,"=");
$_COOKIE[urldecode(substr($cookievalues,0,$pos))]=urldecode(substr($cookievalues,$pos+1)); $_COOKIE[urldecode(substr($cookievalues,0,$pos))]=urldecode(substr($cookievalues,$pos+1));
} }
$_SERVER['HTTP_USER_AGENT'] = $event['headers']['User-Agent'];
$_SERVER['HTTP_TRANSLATE'] = $event['headers']['translate'];//'f'
$_SERVER['BCE_CFC_RUNTIME_NAME'] = 'php7';
} }
function GetPathSetting($event, $context) function GetPathSetting($event, $context)
@@ -42,22 +39,33 @@ function GetPathSetting($event, $context)
$_SERVER['PHP_SELF'] = path_format($_SERVER['base_path'] . $path); $_SERVER['PHP_SELF'] = path_format($_SERVER['base_path'] . $path);
$_SERVER['REMOTE_ADDR'] = $event['requestContext']['sourceIp']; $_SERVER['REMOTE_ADDR'] = $event['requestContext']['sourceIp'];
$_SERVER['HTTP_X_REQUESTED_WITH'] = $event['headers']['X-Requested-With']; $_SERVER['HTTP_X_REQUESTED_WITH'] = $event['headers']['X-Requested-With'];
$_SERVER['HTTP_USER_AGENT'] = $event['headers']['User-Agent'];
if (isset($event['headers']['authorization'])) {
$basicAuth = splitfirst(base64_decode(splitfirst($event['headers']['authorization'], 'Basic ')[1]), ':');
$_SERVER['PHP_AUTH_USER'] = $basicAuth[0];
$_SERVER['PHP_AUTH_PW'] = $basicAuth[1];
}
$_SERVER['HTTP_HOST'] = $event['headers']['Host'];
$_SERVER['REQUEST_SCHEME'] = $event['headers']['X-Forwarded-Proto'];
$_SERVER['host'] = $_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['HTTP_HOST'];
//if ($_SERVER['HTTP_REFERER']!='')
$_SERVER['referhost'] = explode('/', $event['headers']['Referer'])[2];
$_SERVER['HTTP_TRANSLATE'] = $event['headers']['translate'];//'f'
$_SERVER['BCE_CFC_RUNTIME_NAME'] = 'php7';
return $path; return $path;
} }
function getConfig($str, $disktag = '') function getConfig($str, $disktag = '')
{ {
global $InnerEnv; if (isInnerEnv($str)) {
global $Base64Env;
if (in_array($str, $InnerEnv)) {
if ($disktag=='') $disktag = $_SERVER['disktag']; if ($disktag=='') $disktag = $_SERVER['disktag'];
$env = json_decode(getenv($disktag), true); $env = json_decode(getenv($disktag), true);
if (isset($env[$str])) { if (isset($env[$str])) {
if (in_array($str, $Base64Env)) return base64y_decode($env[$str]); if (isBase64Env($str)) return base64y_decode($env[$str]);
else return $env[$str]; else return $env[$str];
} }
} else { } else {
if (in_array($str, $Base64Env)) return base64y_decode(getenv($str)); if (isBase64Env($str)) return base64y_decode(getenv($str));
else return getenv($str); else return getenv($str);
} }
return ''; return '';
@@ -65,8 +73,6 @@ function getConfig($str, $disktag = '')
function setConfig($arr, $disktag = '') function setConfig($arr, $disktag = '')
{ {
global $InnerEnv;
global $Base64Env;
if ($disktag=='') $disktag = $_SERVER['disktag']; if ($disktag=='') $disktag = $_SERVER['disktag'];
$disktags = explode("|",getConfig('disktag')); $disktags = explode("|",getConfig('disktag'));
$diskconfig = json_decode(getenv($disktag), true); $diskconfig = json_decode(getenv($disktag), true);
@@ -74,8 +80,11 @@ function setConfig($arr, $disktag = '')
$indisk = 0; $indisk = 0;
$operatedisk = 0; $operatedisk = 0;
foreach ($arr as $k => $v) { foreach ($arr as $k => $v) {
if (in_array($k, $InnerEnv)) { if (isCommonEnv($k)) {
if (in_array($k, $Base64Env)) $diskconfig[$k] = base64y_encode($v); if (isBase64Env($k)) $tmp[$k] = base64y_encode($v);
else $tmp[$k] = $v;
} elseif (isInnerEnv($k)) {
if (isBase64Env($k)) $diskconfig[$k] = base64y_encode($v);
else $diskconfig[$k] = $v; else $diskconfig[$k] = $v;
$indisk = 1; $indisk = 1;
} elseif ($k=='disktag_add') { } elseif ($k=='disktag_add') {
@@ -85,11 +94,15 @@ function setConfig($arr, $disktag = '')
$disktags = array_diff($disktags, [ $v ]); $disktags = array_diff($disktags, [ $v ]);
$tmp[$v] = ''; $tmp[$v] = '';
$operatedisk = 1; $operatedisk = 1;
} elseif ($k=='disktag_copy') {
$newtag = $v . '_' . date("Ymd_His");
$tmp[$newtag] = getConfig($v);
array_push($disktags, $newtag);
$operatedisk = 1;
} elseif ($k=='disktag_rename' || $k=='disktag_newname') { } elseif ($k=='disktag_rename' || $k=='disktag_newname') {
if ($arr['disktag_rename']!=$arr['disktag_newname']) $operatedisk = 1; if ($arr['disktag_rename']!=$arr['disktag_newname']) $operatedisk = 1;
} else { } else {
if (in_array($k, $Base64Env)) $tmp[$k] = base64y_encode($v); $tmp[$k] = json_encode($v);
else $tmp[$k] = $v;
} }
} }
if ($indisk) { if ($indisk) {
@@ -99,7 +112,12 @@ function setConfig($arr, $disktag = '')
} }
if ($operatedisk) { if ($operatedisk) {
if (isset($arr['disktag_newname']) && $arr['disktag_newname']!='') { if (isset($arr['disktag_newname']) && $arr['disktag_newname']!='') {
$tmp['disktag'] = str_replace($arr['disktag_rename'], $arr['disktag_newname'], getConfig('disktag')); $tags = [];
foreach ($disktags as $tag) {
if ($tag==$arr['disktag_rename']) array_push($tags, $arr['disktag_newname']);
else array_push($tags, $tag);
}
$tmp['disktag'] = implode('|', $tags);
$tmp[$arr['disktag_newname']] = getConfig($arr['disktag_rename']); $tmp[$arr['disktag_newname']] = getConfig($arr['disktag_rename']);
$tmp[$arr['disktag_rename']] = ''; $tmp[$arr['disktag_rename']] = '';
} else { } else {
@@ -232,7 +250,7 @@ language:<br>';
return message($html, $title, 201); return message($html, $title, 201);
} }
$html .= '<a href="?install0">'.getconstStr('ClickInstall').'</a>, '.getconstStr('LogintoBind'); $html .= '<a href="?install0">'.getconstStr('ClickInstall').'</a>, '.getconstStr('LogintoBind');
$title = 'Error'; $title = 'Install';
return message($html, $title, 201); return message($html, $title, 201);
} }
@@ -302,7 +320,8 @@ function updateEnvironment($Envs, $SecretId, $SecretKey)
$tmp_env[$key1] = $value1; $tmp_env[$key1] = $value1;
} }
$tmp_env = array_filter($tmp_env, 'array_value_isnot_null'); // remove null. 清除空值 $tmp_env = array_filter($tmp_env, 'array_value_isnot_null'); // remove null. 清除空值
ksort($tmp_env); //ksort($tmp_env);
sortConfig($tmp_env);
$tmp['Environment']['Variables'] = $tmp_env; $tmp['Environment']['Variables'] = $tmp_env;
$data = json_encode($tmp); $data = json_encode($tmp);
+78 -33
View File
@@ -2,8 +2,35 @@
function getpath() function getpath()
{ {
if (getConfig('function_name') && getConfig('APIKey')) {
$APIKey = getConfig('APIKey');
$res = HerokuAPI('GET', 'https://api.heroku.com/apps/' . getConfig('function_name'), '', $APIKey);
$response = json_decode($res['body'], true);
if (isset($response['build_stack'])) {
$tmp['HerokuappId'] = $response['id'];
$tmp['function_name'] = null;
} else {
error_log1('Something error' . 'Get Heroku app id: ' . json_encode($res, JSON_PRETTY_PRINT));
//return message('Get Heroku app id: ' . json_encode($res, JSON_PRETTY_PRINT), 'Something error', 500);
}
$response = json_decode(setHerokuConfig($tmp, $tmp['HerokuappId'], $APIKey)['body'], true);
$title = 'Change function_name to HerokuappId';
if (api_error($response)) {
$html = api_error_msg($response);
$stat = 500;
error_log1('Change function_name to HerokuappId' . $html);
} else {
$html = getconstStr('Wait') . ' 5s, jump to index.
<meta http-equiv="refresh" content="5;URL=/">';
$stat = 201;
}
//return message($html, $title, $stat);
}
$_SERVER['firstacceptlanguage'] = strtolower(splitfirst(splitfirst($_SERVER['HTTP_ACCEPT_LANGUAGE'],';')[0],',')[0]); $_SERVER['firstacceptlanguage'] = strtolower(splitfirst(splitfirst($_SERVER['HTTP_ACCEPT_LANGUAGE'],';')[0],',')[0]);
$_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR']; $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
$_SERVER['REQUEST_SCHEME'] = $_SERVER['HTTP_X_FORWARDED_PROTO'];
$_SERVER['host'] = $_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['HTTP_HOST'];
$_SERVER['referhost'] = explode('/', $_SERVER['HTTP_REFERER'])[2];
$_SERVER['base_path'] = path_format(substr($_SERVER['SCRIPT_NAME'], 0, -10) . '/'); $_SERVER['base_path'] = path_format(substr($_SERVER['SCRIPT_NAME'], 0, -10) . '/');
$p = strpos($_SERVER['REQUEST_URI'],'?'); $p = strpos($_SERVER['REQUEST_URI'],'?');
if ($p>0) $path = substr($_SERVER['REQUEST_URI'], 0, $p); if ($p>0) $path = substr($_SERVER['REQUEST_URI'], 0, $p);
@@ -15,14 +42,14 @@ function getpath()
function getGET() function getGET()
{ {
//error_log('POST' . json_encode($_POST)); //error_log1('POST' . json_encode($_POST));
if (!$_POST) { if (!$_POST) {
if (!!$HTTP_RAW_POST_DATA) { if (!!$HTTP_RAW_POST_DATA) {
$tmpdata = $HTTP_RAW_POST_DATA; $tmpdata = $HTTP_RAW_POST_DATA;
//error_log('RAW' . $tmpdata); //error_log1('RAW' . $tmpdata);
} else { } else {
$tmpdata = file_get_contents('php://input'); $tmpdata = file_get_contents('php://input');
//error_log('PHPINPUT' . $tmpdata); //error_log1('PHPINPUT' . $tmpdata);
} }
if (!!$tmpdata) { if (!!$tmpdata) {
$postbody = explode("&", $tmpdata); $postbody = explode("&", $tmpdata);
@@ -30,7 +57,7 @@ function getGET()
$pos = strpos($postvalues,"="); $pos = strpos($postvalues,"=");
$_POST[urldecode(substr($postvalues,0,$pos))]=urldecode(substr($postvalues,$pos+1)); $_POST[urldecode(substr($postvalues,0,$pos))]=urldecode(substr($postvalues,$pos+1));
} }
//error_log('POSTformPHPINPUT' . json_encode($_POST)); //error_log1('POSTformPHPINPUT' . json_encode($_POST));
} }
} }
$p = strpos($_SERVER['REQUEST_URI'],'?'); $p = strpos($_SERVER['REQUEST_URI'],'?');
@@ -58,17 +85,15 @@ function getGET()
function getConfig($str, $disktag = '') function getConfig($str, $disktag = '')
{ {
global $InnerEnv; if (isInnerEnv($str)) {
global $Base64Env;
if (in_array($str, $InnerEnv)) {
if ($disktag=='') $disktag = $_SERVER['disktag']; if ($disktag=='') $disktag = $_SERVER['disktag'];
$env = json_decode(getenv($disktag), true); $env = json_decode(getenv($disktag), true);
if (isset($env[$str])) { if (isset($env[$str])) {
if (in_array($str, $Base64Env)) return base64y_decode($env[$str]); if (isBase64Env($str)) return base64y_decode($env[$str]);
else return $env[$str]; else return $env[$str];
} }
} else { } else {
if (in_array($str, $Base64Env)) return base64y_decode(getenv($str)); if (isBase64Env($str)) return base64y_decode(getenv($str));
else return getenv($str); else return getenv($str);
} }
return ''; return '';
@@ -76,8 +101,6 @@ function getConfig($str, $disktag = '')
function setConfig($arr, $disktag = '') function setConfig($arr, $disktag = '')
{ {
global $InnerEnv;
global $Base64Env;
if ($disktag=='') $disktag = $_SERVER['disktag']; if ($disktag=='') $disktag = $_SERVER['disktag'];
$disktags = explode("|",getConfig('disktag')); $disktags = explode("|",getConfig('disktag'));
$diskconfig = json_decode(getenv($disktag), true); $diskconfig = json_decode(getenv($disktag), true);
@@ -85,8 +108,11 @@ function setConfig($arr, $disktag = '')
$indisk = 0; $indisk = 0;
$operatedisk = 0; $operatedisk = 0;
foreach ($arr as $k => $v) { foreach ($arr as $k => $v) {
if (in_array($k, $InnerEnv)) { if (isCommonEnv($k)) {
if (in_array($k, $Base64Env)) $diskconfig[$k] = base64y_encode($v); if (isBase64Env($k)) $tmp[$k] = base64y_encode($v);
else $tmp[$k] = $v;
} elseif (isInnerEnv($k)) {
if (isBase64Env($k)) $diskconfig[$k] = base64y_encode($v);
else $diskconfig[$k] = $v; else $diskconfig[$k] = $v;
$indisk = 1; $indisk = 1;
} elseif ($k=='disktag_add') { } elseif ($k=='disktag_add') {
@@ -96,11 +122,15 @@ function setConfig($arr, $disktag = '')
$disktags = array_diff($disktags, [ $v ]); $disktags = array_diff($disktags, [ $v ]);
$tmp[$v] = ''; $tmp[$v] = '';
$operatedisk = 1; $operatedisk = 1;
} elseif ($k=='disktag_copy') {
$newtag = $v . '_' . date("Ymd_His");
$tmp[$newtag] = getConfig($v);
array_push($disktags, $newtag);
$operatedisk = 1;
} elseif ($k=='disktag_rename' || $k=='disktag_newname') { } elseif ($k=='disktag_rename' || $k=='disktag_newname') {
if ($arr['disktag_rename']!=$arr['disktag_newname']) $operatedisk = 1; if ($arr['disktag_rename']!=$arr['disktag_newname']) $operatedisk = 1;
} else { } else {
if (in_array($k, $Base64Env)) $tmp[$k] = base64y_encode($v); $tmp[$k] = json_encode($v);
else $tmp[$k] = $v;
} }
} }
if ($indisk) { if ($indisk) {
@@ -110,7 +140,12 @@ function setConfig($arr, $disktag = '')
} }
if ($operatedisk) { if ($operatedisk) {
if (isset($arr['disktag_newname']) && $arr['disktag_newname']!='') { if (isset($arr['disktag_newname']) && $arr['disktag_newname']!='') {
$tmp['disktag'] = str_replace($arr['disktag_rename'], $arr['disktag_newname'], getConfig('disktag')); $tags = [];
foreach ($disktags as $tag) {
if ($tag==$arr['disktag_rename']) array_push($tags, $arr['disktag_newname']);
else array_push($tags, $tag);
}
$tmp['disktag'] = implode('|', $tags);
$tmp[$arr['disktag_newname']] = getConfig($arr['disktag_rename']); $tmp[$arr['disktag_newname']] = getConfig($arr['disktag_rename']);
$tmp[$arr['disktag_rename']] = null; $tmp[$arr['disktag_rename']] = null;
} else { } else {
@@ -121,9 +156,9 @@ function setConfig($arr, $disktag = '')
} }
} }
foreach ($tmp as $key => $val) if ($val=='') $tmp[$key]=null; foreach ($tmp as $key => $val) if ($val=='') $tmp[$key]=null;
// echo '正式设置:'.json_encode($tmp,JSON_PRETTY_PRINT).'
//'; return setHerokuConfig($tmp, getConfig('HerokuappId'), getConfig('APIKey'));
return setHerokuConfig($tmp, getConfig('function_name'), getConfig('APIKey')); error_log1(json_encode($arr, JSON_PRETTY_PRINT) . ' => tmp' . json_encode($tmp, JSON_PRETTY_PRINT));
} }
function install() function install()
@@ -139,15 +174,25 @@ function install()
$APIKey = $_POST['APIKey']; $APIKey = $_POST['APIKey'];
$tmp['APIKey'] = $APIKey; $tmp['APIKey'] = $APIKey;
} }
$HerokuappId = getConfig('HerokuappId');
if ($HerokuappId=='') {
$function_name = getConfig('function_name'); $function_name = getConfig('function_name');
if ($function_name=='') { if ($function_name=='') {
$tmp1 = substr($_SERVER['HTTP_HOST'], 0, strrpos($_SERVER['HTTP_HOST'], '.')); $tmp1 = substr($_SERVER['HTTP_HOST'], 0, strrpos($_SERVER['HTTP_HOST'], '.'));
$maindomain = substr($tmp1, strrpos($tmp1, '.')+1); $maindomain = substr($tmp1, strrpos($tmp1, '.')+1);
if ($maindomain=='herokuapp') $function_name = substr($tmp1, 0, strrpos($tmp1, '.')); if ($maindomain=='herokuapp') $function_name = substr($tmp1, 0, strrpos($tmp1, '.'));
else $function_name = 'visit from xxxx.herokuapp.com'; else return message('Please visit from xxxx.herokuapp.com', '', 500);
$tmp['function_name'] = $function_name; $res = HerokuAPI('GET', 'https://api.heroku.com/apps/' . $function_name, '', $APIKey);
$response = json_decode($res['body'], true);
if (isset($response['build_stack'])) {
$HerokuappId = $response['id'];
} else {
return message('Get Heroku app id: ' . json_encode($res, JSON_PRETTY_PRINT), 'Something error', 500);
} }
$response = json_decode(setHerokuConfig($tmp, $function_name, $APIKey)['body'], true); }
}
$tmp['HerokuappId'] = $HerokuappId;
$response = json_decode(setHerokuConfig($tmp, $HerokuappId, $APIKey)['body'], true);
if (api_error($response)) { if (api_error($response)) {
$html = api_error_msg($response); $html = api_error_msg($response);
$title = 'Error'; $title = 'Error';
@@ -155,7 +200,7 @@ function install()
return output('Jump return output('Jump
<script> <script>
var expd = new Date(); var expd = new Date();
expd.setTime(expd.getTime()+(2*60*60*1000)); expd.setTime(expd.getTime()+1000);
var expires = "expires="+expd.toGMTString(); var expires = "expires="+expd.toGMTString();
document.cookie=\'language=; path=/; \'+expires; document.cookie=\'language=; path=/; \'+expires;
</script> </script>
@@ -214,7 +259,7 @@ language:<br>';
return message($html, $title, 201); return message($html, $title, 201);
} }
$html .= '<a href="?install0">'.getconstStr('ClickInstall').'</a>, '.getconstStr('LogintoBind'); $html .= '<a href="?install0">'.getconstStr('ClickInstall').'</a>, '.getconstStr('LogintoBind');
$title = 'Error'; $title = 'Install';
return message($html, $title, 201); return message($html, $title, 201);
} }
@@ -231,7 +276,7 @@ function HerokuAPI($method, $url, $data = '', $apikey)
foreach ($headers as $headerName => $headerVal) { foreach ($headers as $headerName => $headerVal) {
$sendHeaders[] = $headerName . ': ' . $headerVal; $sendHeaders[] = $headerName . ': ' . $headerVal;
} }
error_log($method . $url . $data . $apikey); error_log1($method . $url . $data . $apikey);
$ch = curl_init(); $ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST,$method); curl_setopt($ch, CURLOPT_CUSTOMREQUEST,$method);
@@ -246,28 +291,28 @@ function HerokuAPI($method, $url, $data = '', $apikey)
$response['body'] = curl_exec($ch); $response['body'] = curl_exec($ch);
$response['stat'] = curl_getinfo($ch,CURLINFO_HTTP_CODE); $response['stat'] = curl_getinfo($ch,CURLINFO_HTTP_CODE);
curl_close($ch); curl_close($ch);
error_log($response['stat'].' error_log1($response['stat'].'
'.$response['body'].' '.$response['body'].'
'); ');
return $response; return $response;
} }
function getHerokuConfig($function_name, $apikey) function getHerokuConfig($HerokuappId, $apikey)
{ {
return HerokuAPI('GET', 'https://api.heroku.com/apps/' . $function_name . '/config-vars', '', $apikey); return HerokuAPI('GET', 'https://api.heroku.com/apps/' . $HerokuappId . '/config-vars', '', $apikey);
} }
function setHerokuConfig($env, $function_name, $apikey) function setHerokuConfig($env, $HerokuappId, $apikey)
{ {
$data = json_encode($env); $data = json_encode($env);
return HerokuAPI('PATCH', 'https://api.heroku.com/apps/' . $function_name . '/config-vars', $data, $apikey); if (substr($data, 0, 1)=='{') return HerokuAPI('PATCH', 'https://api.heroku.com/apps/' . $HerokuappId . '/config-vars', $data, $apikey);
} }
function updateHerokuapp($function_name, $apikey, $source) function updateHerokuapp($HerokuappId, $apikey, $source)
{ {
$tmp['source_blob']['url'] = $source; $tmp['source_blob']['url'] = $source;
$data = json_encode($tmp); $data = json_encode($tmp);
return HerokuAPI('POST', 'https://api.heroku.com/apps/' . $function_name . '/builds', $data, $apikey); return HerokuAPI('POST', 'https://api.heroku.com/apps/' . $HerokuappId . '/builds', $data, $apikey);
} }
function api_error($response) function api_error($response)
@@ -287,7 +332,7 @@ function OnekeyUpate($auth = 'qkqpttgf', $project = 'OneManager-php', $branch =
{ {
//'https://github.com/qkqpttgf/OneManager-php/tarball/master/'; //'https://github.com/qkqpttgf/OneManager-php/tarball/master/';
$source = 'https://github.com/' . $auth . '/' . $project . '/tarball/' . urlencode($branch) . '/'; $source = 'https://github.com/' . $auth . '/' . $project . '/tarball/' . urlencode($branch) . '/';
return updateHerokuapp(getConfig('function_name'), getConfig('APIKey'), $source); return updateHerokuapp(getConfig('HerokuappId'), getConfig('APIKey'), $source);
} }
function setConfigResponse($response) function setConfigResponse($response)
+35 -17
View File
@@ -39,9 +39,6 @@ function GetGlobalVariable($event)
$pos = strpos($cookievalues,"="); $pos = strpos($cookievalues,"=");
$_COOKIE[urldecode(substr($cookievalues,0,$pos))]=urldecode(substr($cookievalues,$pos+1)); $_COOKIE[urldecode(substr($cookievalues,0,$pos))]=urldecode(substr($cookievalues,$pos+1));
} }
$_SERVER['HTTP_USER_AGENT'] = $event['headers']['user-agent'];
$_SERVER['HTTP_TRANSLATE'] = $event['headers']['translate'];//'f'
$_SERVER['_APP_SHARE_DIR'] = '/var/share/CFF/processrouter';
} }
function GetPathSetting($event, $context) function GetPathSetting($event, $context)
@@ -64,23 +61,33 @@ function GetPathSetting($event, $context)
$_SERVER['PHP_SELF'] = path_format($_SERVER['base_path'] . $path); $_SERVER['PHP_SELF'] = path_format($_SERVER['base_path'] . $path);
$_SERVER['REMOTE_ADDR'] = $event['headers']['x-real-ip']; $_SERVER['REMOTE_ADDR'] = $event['headers']['x-real-ip'];
$_SERVER['HTTP_X_REQUESTED_WITH'] = $event['headers']['x-requested-with']; $_SERVER['HTTP_X_REQUESTED_WITH'] = $event['headers']['x-requested-with'];
$_SERVER['HTTP_USER_AGENT'] = $event['headers']['user-agent'];
if (isset($event['headers']['authorization'])) {
$basicAuth = splitfirst(base64_decode(splitfirst($event['headers']['authorization'], 'Basic ')[1]), ':');
$_SERVER['PHP_AUTH_USER'] = $basicAuth[0];
$_SERVER['PHP_AUTH_PW'] = $basicAuth[1];
}
$_SERVER['REQUEST_SCHEME'] = $event['headers']['x-forwarded-proto'];
$_SERVER['host'] = $_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['HTTP_HOST'];
//if ($_SERVER['HTTP_REFERER']!='')
$_SERVER['referhost'] = explode('/', $event['headers']['referer'])[2];
$_SERVER['HTTP_TRANSLATE'] = $event['headers']['translate'];//'f'
$_SERVER['_APP_SHARE_DIR'] = '/var/share/CFF/processrouter';
return $path; return $path;
} }
function getConfig($str, $disktag = '') function getConfig($str, $disktag = '')
{ {
global $InnerEnv;
global $Base64Env;
global $contextUserData; global $contextUserData;
if (in_array($str, $InnerEnv)) { if (isInnerEnv($str)) {
if ($disktag=='') $disktag = $_SERVER['disktag']; if ($disktag=='') $disktag = $_SERVER['disktag'];
$env = json_decode($contextUserData->getUserData($disktag), true); $env = json_decode($contextUserData->getUserData($disktag), true);
if (isset($env[$str])) { if (isset($env[$str])) {
if (in_array($str, $Base64Env)) return base64y_decode($env[$str]); if (isBase64Env($str)) return base64y_decode($env[$str]);
else return $env[$str]; else return $env[$str];
} }
} else { } else {
if (in_array($str, $Base64Env)) return base64y_decode($contextUserData->getUserData($str)); if (isBase64Env($str)) return base64y_decode($contextUserData->getUserData($str));
else return $contextUserData->getUserData($str); else return $contextUserData->getUserData($str);
} }
return ''; return '';
@@ -88,8 +95,6 @@ function getConfig($str, $disktag = '')
function setConfig($arr, $disktag = '') function setConfig($arr, $disktag = '')
{ {
global $InnerEnv;
global $Base64Env;
global $contextUserData; global $contextUserData;
if ($disktag=='') $disktag = $_SERVER['disktag']; if ($disktag=='') $disktag = $_SERVER['disktag'];
$disktags = explode("|",getConfig('disktag')); $disktags = explode("|",getConfig('disktag'));
@@ -98,8 +103,11 @@ function setConfig($arr, $disktag = '')
$indisk = 0; $indisk = 0;
$operatedisk = 0; $operatedisk = 0;
foreach ($arr as $k => $v) { foreach ($arr as $k => $v) {
if (in_array($k, $InnerEnv)) { if (isCommonEnv($k)) {
if (in_array($k, $Base64Env)) $diskconfig[$k] = base64y_encode($v); if (isBase64Env($k)) $tmp[$k] = base64y_encode($v);
else $tmp[$k] = $v;
} elseif (isInnerEnv($k)) {
if (isBase64Env($k)) $diskconfig[$k] = base64y_encode($v);
else $diskconfig[$k] = $v; else $diskconfig[$k] = $v;
$indisk = 1; $indisk = 1;
} elseif ($k=='disktag_add') { } elseif ($k=='disktag_add') {
@@ -109,11 +117,15 @@ function setConfig($arr, $disktag = '')
$disktags = array_diff($disktags, [ $v ]); $disktags = array_diff($disktags, [ $v ]);
$tmp[$v] = ''; $tmp[$v] = '';
$operatedisk = 1; $operatedisk = 1;
} elseif ($k=='disktag_copy') {
$newtag = $v . '_' . date("Ymd_His");
$tmp[$newtag] = getConfig($v);
array_push($disktags, $newtag);
$operatedisk = 1;
} elseif ($k=='disktag_rename' || $k=='disktag_newname') { } elseif ($k=='disktag_rename' || $k=='disktag_newname') {
if ($arr['disktag_rename']!=$arr['disktag_newname']) $operatedisk = 1; if ($arr['disktag_rename']!=$arr['disktag_newname']) $operatedisk = 1;
} else { } else {
if (in_array($k, $Base64Env)) $tmp[$k] = base64y_encode($v); $tmp[$k] = json_encode($v);
else $tmp[$k] = $v;
} }
} }
if ($indisk) { if ($indisk) {
@@ -123,7 +135,12 @@ function setConfig($arr, $disktag = '')
} }
if ($operatedisk) { if ($operatedisk) {
if (isset($arr['disktag_newname']) && $arr['disktag_newname']!='') { if (isset($arr['disktag_newname']) && $arr['disktag_newname']!='') {
$tmp['disktag'] = str_replace($arr['disktag_rename'], $arr['disktag_newname'], getConfig('disktag')); $tags = [];
foreach ($disktags as $tag) {
if ($tag==$arr['disktag_rename']) array_push($tags, $arr['disktag_newname']);
else array_push($tags, $tag);
}
$tmp['disktag'] = implode('|', $tags);
$tmp[$arr['disktag_newname']] = getConfig($arr['disktag_rename']); $tmp[$arr['disktag_newname']] = getConfig($arr['disktag_rename']);
$tmp[$arr['disktag_rename']] = ''; $tmp[$arr['disktag_rename']] = '';
} else { } else {
@@ -278,7 +295,7 @@ language:<br>';
return message($html, $title, 201); return message($html, $title, 201);
} }
$html .= '<a href="?install0">'.getconstStr('ClickInstall').'</a>, '.getconstStr('LogintoBind'); $html .= '<a href="?install0">'.getconstStr('ClickInstall').'</a>, '.getconstStr('LogintoBind');
$title = 'Error'; $title = 'Install';
return message($html, $title, 201); return message($html, $title, 201);
} }
@@ -357,7 +374,8 @@ function updateEnvironment($Envs, $HW_urn, $HW_key, $HW_secret)
$tmp_env[$key1] = $value1; $tmp_env[$key1] = $value1;
} }
$tmp_env = array_filter($tmp_env, 'array_value_isnot_null'); // remove null. 清除空值 $tmp_env = array_filter($tmp_env, 'array_value_isnot_null'); // remove null. 清除空值
ksort($tmp_env); //ksort($tmp_env);
sortConfig($tmp_env);
$tmpdata['handler'] = 'index.handler'; $tmpdata['handler'] = 'index.handler';
$tmpdata['memory_size'] = $contextUserData->getMemorySize()+1-1; $tmpdata['memory_size'] = $contextUserData->getMemorySize()+1-1;
+53 -30
View File
@@ -39,9 +39,6 @@ function GetGlobalVariable($event)
$pos = strpos($cookievalues,"="); $pos = strpos($cookievalues,"=");
$_COOKIE[urldecode(substr($cookievalues,0,$pos))]=urldecode(substr($cookievalues,$pos+1)); $_COOKIE[urldecode(substr($cookievalues,0,$pos))]=urldecode(substr($cookievalues,$pos+1));
} }
$_SERVER['HTTP_USER_AGENT'] = $event['headers']['user-agent'];
$_SERVER['HTTP_TRANSLATE'] = $event['headers']['translate'];//'f'
$_SERVER['_APP_SHARE_DIR'] = '/var/share/CFF/processrouter';
} }
function GetPathSetting($event, $context) function GetPathSetting($event, $context)
@@ -64,28 +61,40 @@ function GetPathSetting($event, $context)
$_SERVER['PHP_SELF'] = path_format($_SERVER['base_path'] . $path); $_SERVER['PHP_SELF'] = path_format($_SERVER['base_path'] . $path);
$_SERVER['REMOTE_ADDR'] = $event['headers']['x-real-ip']; $_SERVER['REMOTE_ADDR'] = $event['headers']['x-real-ip'];
$_SERVER['HTTP_X_REQUESTED_WITH'] = $event['headers']['x-requested-with']; $_SERVER['HTTP_X_REQUESTED_WITH'] = $event['headers']['x-requested-with'];
$_SERVER['HTTP_USER_AGENT'] = $event['headers']['user-agent'];
if (isset($event['headers']['authorization'])) {
$basicAuth = splitfirst(base64_decode(splitfirst($event['headers']['authorization'], 'Basic ')[1]), ':');
$_SERVER['PHP_AUTH_USER'] = $basicAuth[0];
$_SERVER['PHP_AUTH_PW'] = $basicAuth[1];
}
$_SERVER['REQUEST_SCHEME'] = $event['headers']['x-forwarded-proto'];
$_SERVER['host'] = $_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['HTTP_HOST'];
//if ($_SERVER['HTTP_REFERER']!='')
$_SERVER['referhost'] = explode('/', $event['headers']['referer'])[2];
$_SERVER['HTTP_TRANSLATE'] = $event['headers']['translate'];//'f'
$_SERVER['_APP_SHARE_DIR'] = '/var/share/CFF/processrouter';
return $path; return $path;
} }
function getConfig($str, $disktag = '') function getConfig($str, $disktag = '')
{ {
global $InnerEnv;
global $Base64Env; global $slash;
//include 'config.php'; $projectPath = splitlast(__DIR__, $slash)[0];
$s = file_get_contents(__DIR__ . '/../config.php'); $configPath = $projectPath . $slash . '.data' . $slash . 'config.php';
//$configs = substr($s, 18, -2); $s = file_get_contents($configPath);
$configs = '{' . splitlast(splitfirst($s, '{')[1], '}')[0] . '}'; $configs = '{' . splitlast(splitfirst($s, '{')[1], '}')[0] . '}';
if ($configs!='') { if ($configs!='') {
$envs = json_decode($configs, true); $envs = json_decode($configs, true);
if (in_array($str, $InnerEnv)) { if (isInnerEnv($str)) {
if ($disktag=='') $disktag = $_SERVER['disktag']; if ($disktag=='') $disktag = $_SERVER['disktag'];
if (isset($envs[$disktag][$str])) { if (isset($envs[$disktag][$str])) {
if (in_array($str, $Base64Env)) return base64y_decode($envs[$disktag][$str]); if (isBase64Env($str)) return base64y_decode($envs[$disktag][$str]);
else return $envs[$disktag][$str]; else return $envs[$disktag][$str];
} }
} else { } else {
if (isset($envs[$str])) { if (isset($envs[$str])) {
if (in_array($str, $Base64Env)) return base64y_decode($envs[$str]); if (isBase64Env($str)) return base64y_decode($envs[$str]);
else return $envs[$str]; else return $envs[$str];
} }
} }
@@ -95,20 +104,23 @@ function getConfig($str, $disktag = '')
function setConfig($arr, $disktag = '') function setConfig($arr, $disktag = '')
{ {
global $InnerEnv;
global $Base64Env;
if ($disktag=='') $disktag = $_SERVER['disktag']; if ($disktag=='') $disktag = $_SERVER['disktag'];
//include 'config.php'; global $slash;
$s = file_get_contents(__DIR__ . '/../config.php'); $projectPath = splitlast(__DIR__, $slash)[0];
//$configs = substr($s, 18, -2); $configPath = $projectPath . $slash . '.data' . $slash . 'config.php';
$s = file_get_contents($configPath);
$configs = '{' . splitlast(splitfirst($s, '{')[1], '}')[0] . '}'; $configs = '{' . splitlast(splitfirst($s, '{')[1], '}')[0] . '}';
if ($configs!='') $envs = json_decode($configs, true); if ($configs!='') $envs = json_decode($configs, true);
$disktags = explode("|",getConfig('disktag')); $disktags = explode("|",getConfig('disktag'));
$indisk = 0; $indisk = 0;
$operatedisk = 0; $operatedisk = 0;
foreach ($arr as $k => $v) { foreach ($arr as $k => $v) {
if (in_array($k, $InnerEnv)) { if (isCommonEnv($k)) {
if (in_array($k, $Base64Env)) $envs[$disktag][$k] = base64y_encode($v); if (isBase64Env($k)) $envs[$k] = base64y_encode($v);
else $envs[$k] = $v;
} elseif (isInnerEnv($k)) {
if (isBase64Env($k)) $envs[$disktag][$k] = base64y_encode($v);
else $envs[$disktag][$k] = $v; else $envs[$disktag][$k] = $v;
$indisk = 1; $indisk = 1;
} elseif ($k=='disktag_add') { } elseif ($k=='disktag_add') {
@@ -118,11 +130,15 @@ function setConfig($arr, $disktag = '')
$disktags = array_diff($disktags, [ $v ]); $disktags = array_diff($disktags, [ $v ]);
$envs[$v] = ''; $envs[$v] = '';
$operatedisk = 1; $operatedisk = 1;
} elseif ($k=='disktag_copy') {
$newtag = $v . '_' . date("Ymd_His");
$envs[$newtag] = $envs[$v];
array_push($disktags, $newtag);
$operatedisk = 1;
} elseif ($k=='disktag_rename' || $k=='disktag_newname') { } elseif ($k=='disktag_rename' || $k=='disktag_newname') {
if ($arr['disktag_rename']!=$arr['disktag_newname']) $operatedisk = 1; if ($arr['disktag_rename']!=$arr['disktag_newname']) $operatedisk = 1;
} else { } else {
if (in_array($k, $Base64Env)) $envs[$k] = base64y_encode($v); $envs[$k] = $v;
else $envs[$k] = $v;
} }
} }
if ($indisk) { if ($indisk) {
@@ -133,7 +149,12 @@ function setConfig($arr, $disktag = '')
} }
if ($operatedisk) { if ($operatedisk) {
if (isset($arr['disktag_newname']) && $arr['disktag_newname']!='') { if (isset($arr['disktag_newname']) && $arr['disktag_newname']!='') {
$envs['disktag'] = str_replace($arr['disktag_rename'], $arr['disktag_newname'], getConfig('disktag')); $tags = [];
foreach ($disktags as $tag) {
if ($tag==$arr['disktag_rename']) array_push($tags, $arr['disktag_newname']);
else array_push($tags, $tag);
}
$envs['disktag'] = implode('|', $tags);
$envs[$arr['disktag_newname']] = $envs[$arr['disktag_rename']]; $envs[$arr['disktag_newname']] = $envs[$arr['disktag_rename']];
$envs[$arr['disktag_rename']] = ''; $envs[$arr['disktag_rename']] = '';
} else { } else {
@@ -144,7 +165,7 @@ function setConfig($arr, $disktag = '')
} }
} }
$envs = array_filter($envs, 'array_value_isnot_null'); $envs = array_filter($envs, 'array_value_isnot_null');
ksort($envs); //ksort($envs);
$response = updateEnvironment($envs, getConfig('HW_urn'), getConfig('HW_key'), getConfig('HW_secret')); $response = updateEnvironment($envs, getConfig('HW_urn'), getConfig('HW_key'), getConfig('HW_secret'));
return $response; return $response;
} }
@@ -288,7 +309,7 @@ language:<br>';
return message($html, $title, 201); return message($html, $title, 201);
} }
$html .= '<a href="?install0">'.getconstStr('ClickInstall').'</a>, '.getconstStr('LogintoBind'); $html .= '<a href="?install0">'.getconstStr('ClickInstall').'</a>, '.getconstStr('LogintoBind');
$title = 'Error'; $title = 'Install';
return message($html, $title, 201); return message($html, $title, 201);
} }
@@ -377,9 +398,8 @@ function copyFolder($from, $to)
function updateEnvironment($Envs, $HW_urn, $HW_key, $HW_secret) function updateEnvironment($Envs, $HW_urn, $HW_key, $HW_secret)
{ {
sortConfig($Envs);
//echo json_encode($Envs,JSON_PRETTY_PRINT); //echo json_encode($Envs,JSON_PRETTY_PRINT);
global $contextUserData;
$source = '/tmp/code.zip'; $source = '/tmp/code.zip';
$outPath = '/tmp/code/'; $outPath = '/tmp/code/';
$oldcode = '/tmp/oldcode.zip'; $oldcode = '/tmp/oldcode.zip';
@@ -392,7 +412,7 @@ function updateEnvironment($Envs, $HW_urn, $HW_key, $HW_secret)
// 将配置写入 // 将配置写入
$prestr = '<?php $configs = \'' . PHP_EOL; $prestr = '<?php $configs = \'' . PHP_EOL;
$aftstr = PHP_EOL . '\';'; $aftstr = PHP_EOL . '\';';
file_put_contents($outPath . 'config.php', $prestr . json_encode($Envs, JSON_PRETTY_PRINT) . $aftstr); file_put_contents($outPath . '.data/config.php', $prestr . json_encode($Envs, JSON_PRETTY_PRINT) . $aftstr);
// 将目录中文件打包成zip // 将目录中文件打包成zip
//$zip=new ZipArchive(); //$zip=new ZipArchive();
@@ -407,6 +427,7 @@ function updateEnvironment($Envs, $HW_urn, $HW_key, $HW_secret)
function SetbaseConfig($Envs, $HW_urn, $HW_key, $HW_secret) function SetbaseConfig($Envs, $HW_urn, $HW_key, $HW_secret)
{ {
global $slash;
//echo json_encode($Envs,JSON_PRETTY_PRINT); //echo json_encode($Envs,JSON_PRETTY_PRINT);
if ($Envs['ONEMANAGER_CONFIG_SAVE'] == 'file') $envs = Array( 'ONEMANAGER_CONFIG_SAVE' => 'file' ); if ($Envs['ONEMANAGER_CONFIG_SAVE'] == 'file') $envs = Array( 'ONEMANAGER_CONFIG_SAVE' => 'file' );
else { else {
@@ -448,15 +469,17 @@ function SetbaseConfig($Envs, $HW_urn, $HW_key, $HW_secret)
if (api_error(setConfigResponse($response))) { if (api_error(setConfigResponse($response))) {
return $response; return $response;
} }
$s = file_get_contents(__DIR__ . '/../config.php');
//$configs = substr($s, 18, -2); $projectPath = splitlast(__DIR__, $slash)[0];
$configPath = $projectPath . $slash . '.data' . $slash . 'config.php';
$s = file_get_contents($configPath);
$configs = '{' . splitlast(splitfirst($s, '{')[1], '}')[0] . '}'; $configs = '{' . splitlast(splitfirst($s, '{')[1], '}')[0] . '}';
if ($configs!='') $tmp_env = json_decode($configs, true); if ($configs!='') $tmp_env = json_decode($configs, true);
foreach ($Envs as $k => $v) { foreach ($Envs as $k => $v) {
$tmp_env[$k] = $v; $tmp_env[$k] = $v;
} }
$tmp_env = array_filter($tmp_env, 'array_value_isnot_null'); $tmp_env = array_filter($tmp_env, 'array_value_isnot_null');
ksort($tmp_env); //ksort($tmp_env);
$response = updateEnvironment($tmp_env, $HW_urn, $HW_key, $HW_secret); $response = updateEnvironment($tmp_env, $HW_urn, $HW_key, $HW_secret);
return $response; return $response;
} }
@@ -538,7 +561,7 @@ function OnekeyUpate($auth = 'qkqpttgf', $project = 'OneManager-php', $branch =
} }
// 放入配置文件 // 放入配置文件
file_put_contents($outPath . '/config.php', file_get_contents(__DIR__.'/../config.php')); file_put_contents($outPath . '/.data/config.php', file_get_contents(__DIR__ . '/../.data/config.php'));
// 将目录中文件打包成zip // 将目录中文件打包成zip
//$zip=new ZipArchive(); //$zip=new ZipArchive();
+36 -24
View File
@@ -4,6 +4,9 @@ function getpath()
{ {
$_SERVER['firstacceptlanguage'] = strtolower(splitfirst(splitfirst($_SERVER['HTTP_ACCEPT_LANGUAGE'],';')[0],',')[0]); $_SERVER['firstacceptlanguage'] = strtolower(splitfirst(splitfirst($_SERVER['HTTP_ACCEPT_LANGUAGE'],';')[0],',')[0]);
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR']; if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
$_SERVER['host'] = $_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['HTTP_HOST'];
//if ($_SERVER['HTTP_REFERER']!='')
$_SERVER['referhost'] = explode('/', $_SERVER['HTTP_REFERER'])[2];
if (isset($_SERVER['DOCUMENT_ROOT'])&&$_SERVER['DOCUMENT_ROOT']==='/app') $_SERVER['base_path'] = '/'; if (isset($_SERVER['DOCUMENT_ROOT'])&&$_SERVER['DOCUMENT_ROOT']==='/app') $_SERVER['base_path'] = '/';
else $_SERVER['base_path'] = path_format(substr($_SERVER['SCRIPT_NAME'], 0, -10) . '/'); else $_SERVER['base_path'] = path_format(substr($_SERVER['SCRIPT_NAME'], 0, -10) . '/');
if (isset($_SERVER['UNENCODED_URL'])) $_SERVER['REQUEST_URI'] = $_SERVER['UNENCODED_URL']; if (isset($_SERVER['UNENCODED_URL'])) $_SERVER['REQUEST_URI'] = $_SERVER['UNENCODED_URL'];
@@ -58,27 +61,22 @@ function getGET()
function getConfig($str, $disktag = '') function getConfig($str, $disktag = '')
{ {
global $InnerEnv; global $slash;
global $Base64Env;
$slash = '/';
if (strpos(__DIR__, ':')) $slash = '\\';
$projectPath = splitlast(__DIR__, $slash)[0]; $projectPath = splitlast(__DIR__, $slash)[0];
$configPath = $projectPath . $slash . '.data' . $slash . 'config.php'; $configPath = $projectPath . $slash . '.data' . $slash . 'config.php';
$s = file_get_contents($configPath); $s = file_get_contents($configPath);
//$configs = substr($s, 18, -2);
$configs = '{' . splitlast(splitfirst($s, '{')[1], '}')[0] . '}'; $configs = '{' . splitlast(splitfirst($s, '{')[1], '}')[0] . '}';
if ($configs!='') { if ($configs!='') {
$envs = json_decode($configs, true); $envs = json_decode($configs, true);
if (in_array($str, $InnerEnv)) { if (isInnerEnv($str)) {
if ($disktag=='') $disktag = $_SERVER['disktag']; if ($disktag=='') $disktag = $_SERVER['disktag'];
if (isset($envs[$disktag][$str])) { if (isset($envs[$disktag][$str])) {
if (in_array($str, $Base64Env)) return base64y_decode($envs[$disktag][$str]); if (isBase64Env($str)) return base64y_decode($envs[$disktag][$str]);
else return $envs[$disktag][$str]; else return $envs[$disktag][$str];
} }
} else { } else {
if (isset($envs[$str])) { if (isset($envs[$str])) {
if (in_array($str, $Base64Env)) return base64y_decode($envs[$str]); if (isBase64Env($str)) return base64y_decode($envs[$str]);
else return $envs[$str]; else return $envs[$str];
} }
} }
@@ -88,23 +86,22 @@ function getConfig($str, $disktag = '')
function setConfig($arr, $disktag = '') function setConfig($arr, $disktag = '')
{ {
global $InnerEnv; global $slash;
global $Base64Env;
if ($disktag=='') $disktag = $_SERVER['disktag']; if ($disktag=='') $disktag = $_SERVER['disktag'];
$slash = '/';
if (strpos(__DIR__, ':')) $slash = '\\';
$projectPath = splitlast(__DIR__, $slash)[0]; $projectPath = splitlast(__DIR__, $slash)[0];
$configPath = $projectPath . $slash . '.data' . $slash . 'config.php'; $configPath = $projectPath . $slash . '.data' . $slash . 'config.php';
$s = file_get_contents($configPath); $s = file_get_contents($configPath);
//$configs = substr($s, 18, -2);
$configs = '{' . splitlast(splitfirst($s, '{')[1], '}')[0] . '}'; $configs = '{' . splitlast(splitfirst($s, '{')[1], '}')[0] . '}';
if ($configs!='') $envs = json_decode($configs, true); if ($configs!='') $envs = json_decode($configs, true);
$disktags = explode("|", getConfig('disktag')); $disktags = explode("|", getConfig('disktag'));
$indisk = 0; $indisk = 0;
$operatedisk = 0; $operatedisk = 0;
foreach ($arr as $k => $v) { foreach ($arr as $k => $v) {
if (in_array($k, $InnerEnv)) { if (isCommonEnv($k)) {
if (in_array($k, $Base64Env)) $envs[$disktag][$k] = base64y_encode($v); if (isBase64Env($k)) $envs[$k] = base64y_encode($v);
else $envs[$k] = $v;
} elseif (isInnerEnv($k)) {
if (isBase64Env($k)) $envs[$disktag][$k] = base64y_encode($v);
else $envs[$disktag][$k] = $v; else $envs[$disktag][$k] = $v;
$indisk = 1; $indisk = 1;
} elseif ($k=='disktag_add') { } elseif ($k=='disktag_add') {
@@ -114,11 +111,20 @@ function setConfig($arr, $disktag = '')
$disktags = array_diff($disktags, [ $v ]); $disktags = array_diff($disktags, [ $v ]);
$envs[$v] = ''; $envs[$v] = '';
$operatedisk = 1; $operatedisk = 1;
} elseif ($k=='disktag_copy') {
$newtag = $v . '_' . date("Ymd_His");
$envs[$newtag] = $envs[$v];
array_push($disktags, $newtag);
$operatedisk = 1;
} elseif ($k=='disktag_rename' || $k=='disktag_newname') { } elseif ($k=='disktag_rename' || $k=='disktag_newname') {
if ($arr['disktag_rename']!=$arr['disktag_newname']) $operatedisk = 1; if ($arr['disktag_rename']!=$arr['disktag_newname']) $operatedisk = 1;
} else { } else {
if (in_array($k, $Base64Env)) $envs[$k] = base64y_encode($v); //$tmpdisk = json_decode($v, true);
else $envs[$k] = $v; //var_dump($tmpdisk);
//error_log(json_encode($tmpdisk));
//if ($tmpdisk===null)
$envs[$k] = $v;
//else $envs[$k] = $tmpdisk;
} }
} }
if ($indisk) { if ($indisk) {
@@ -129,7 +135,12 @@ function setConfig($arr, $disktag = '')
} }
if ($operatedisk) { if ($operatedisk) {
if (isset($arr['disktag_newname']) && $arr['disktag_newname']!='') { if (isset($arr['disktag_newname']) && $arr['disktag_newname']!='') {
$envs['disktag'] = str_replace($arr['disktag_rename'], $arr['disktag_newname'], getConfig('disktag')); $tags = [];
foreach ($disktags as $tag) {
if ($tag==$arr['disktag_rename']) array_push($tags, $arr['disktag_newname']);
else array_push($tags, $tag);
}
$envs['disktag'] = implode('|', $tags);
$envs[$arr['disktag_newname']] = $envs[$arr['disktag_rename']]; $envs[$arr['disktag_newname']] = $envs[$arr['disktag_rename']];
unset($envs[$arr['disktag_rename']]); unset($envs[$arr['disktag_rename']]);
} else { } else {
@@ -140,7 +151,8 @@ function setConfig($arr, $disktag = '')
} }
} }
$envs = array_filter($envs, 'array_value_isnot_null'); $envs = array_filter($envs, 'array_value_isnot_null');
ksort($envs); //ksort($envs);
sortConfig($envs);
//echo '<pre>'. json_encode($envs, JSON_PRETTY_PRINT).'</pre>'; //echo '<pre>'. json_encode($envs, JSON_PRETTY_PRINT).'</pre>';
$prestr = '<?php $configs = \'' . PHP_EOL; $prestr = '<?php $configs = \'' . PHP_EOL;
@@ -260,7 +272,7 @@ language:<br>';
return message($html, $title, 201); return message($html, $title, 201);
} }
$html .= '<a href="?install0">'.getconstStr('ClickInstall').'</a>, '.getconstStr('LogintoBind'); $html .= '<a href="?install0">'.getconstStr('ClickInstall').'</a>, '.getconstStr('LogintoBind');
$title = 'Error'; $title = 'Install';
return message($html, $title, 201); return message($html, $title, 201);
} }
@@ -305,8 +317,8 @@ function OnekeyUpate($auth = 'qkqpttgf', $project = 'OneManager-php', $branch =
$githubfile = file_get_contents($url); $githubfile = file_get_contents($url);
if (!$githubfile) return 0; if (!$githubfile) return 0;
file_put_contents($tarfile, $githubfile); file_put_contents($tarfile, $githubfile);
if (splitfirst(PHP_VERSION, '.')[0] == '7') { if (splitfirst(PHP_VERSION, '.')[0] > '5') {
$phar = new PharData($tarfile); // need php7 $phar = new PharData($tarfile); // need php5.3, 7, 8
$phar->extractTo($projectPath, null, true);//路径 要解压的文件 是否覆盖 $phar->extractTo($projectPath, null, true);//路径 要解压的文件 是否覆盖
} else { } else {
ob_start(); ob_start();
@@ -324,7 +336,7 @@ function OnekeyUpate($auth = 'qkqpttgf', $project = 'OneManager-php', $branch =
break; break;
} }
} }
//error_log($outPath); //error_log1($outPath);
if ($outPath=='') return 0; if ($outPath=='') return 0;
//unlink($outPath.'/config.php'); //unlink($outPath.'/config.php');
+35 -18
View File
@@ -23,9 +23,6 @@ function GetGlobalVariable($event)
$pos = strpos($cookievalues,"="); $pos = strpos($cookievalues,"=");
$_COOKIE[urldecode(substr($cookievalues,0,$pos))]=urldecode(substr($cookievalues,$pos+1)); $_COOKIE[urldecode(substr($cookievalues,0,$pos))]=urldecode(substr($cookievalues,$pos+1));
} }
$_SERVER['HTTP_USER_AGENT'] = $event['headers']['user-agent'];
$_SERVER['HTTP_TRANSLATE']==$event['headers']['translate'];//'f'
$_SERVER['USER'] = 'qcloud';
} }
function GetPathSetting($event, $context) function GetPathSetting($event, $context)
@@ -33,7 +30,7 @@ function GetPathSetting($event, $context)
$_SERVER['firstacceptlanguage'] = strtolower(splitfirst(splitfirst($event['headers']['accept-language'],';')[0],',')[0]); $_SERVER['firstacceptlanguage'] = strtolower(splitfirst(splitfirst($event['headers']['accept-language'],';')[0],',')[0]);
$_SERVER['function_name'] = $context['function_name']; $_SERVER['function_name'] = $context['function_name'];
$_SERVER['namespace'] = $context['namespace']; $_SERVER['namespace'] = $context['namespace'];
$_SERVER['Region'] = getenv('TENCENTCLOUD_REGION'); $_SERVER['Region'] = $context['tencentcloud_region'];
$host_name = $event['headers']['host']; $host_name = $event['headers']['host'];
$_SERVER['HTTP_HOST'] = $host_name; $_SERVER['HTTP_HOST'] = $host_name;
$serviceId = $event['requestContext']['serviceId']; $serviceId = $event['requestContext']['serviceId'];
@@ -49,22 +46,31 @@ function GetPathSetting($event, $context)
$_SERVER['PHP_SELF'] = path_format($_SERVER['base_path'] . $path); $_SERVER['PHP_SELF'] = path_format($_SERVER['base_path'] . $path);
$_SERVER['REMOTE_ADDR'] = $event['requestContext']['sourceIp']; $_SERVER['REMOTE_ADDR'] = $event['requestContext']['sourceIp'];
$_SERVER['HTTP_X_REQUESTED_WITH'] = $event['headers']['x-requested-with']; $_SERVER['HTTP_X_REQUESTED_WITH'] = $event['headers']['x-requested-with'];
$_SERVER['HTTP_USER_AGENT'] = $event['headers']['user-agent'];
if (isset($event['headers']['authorization'])) {
$basicAuth = splitfirst(base64_decode(splitfirst($event['headers']['authorization'], 'Basic ')[1]), ':');
$_SERVER['PHP_AUTH_USER'] = $basicAuth[0];
$_SERVER['PHP_AUTH_PW'] = $basicAuth[1];
}
$_SERVER['REQUEST_SCHEME'] = $event['headers']['x-forwarded-proto'];
$_SERVER['host'] = $_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['HTTP_HOST'];
$_SERVER['referhost'] = explode('/', $event['headers']['referer'])[2];
$_SERVER['HTTP_TRANSLATE']==$event['headers']['translate'];//'f'
$_SERVER['USER'] = 'qcloud';
return $path; return $path;
} }
function getConfig($str, $disktag = '') function getConfig($str, $disktag = '')
{ {
global $InnerEnv; if (isInnerEnv($str)) {
global $Base64Env;
if (in_array($str, $InnerEnv)) {
if ($disktag=='') $disktag = $_SERVER['disktag']; if ($disktag=='') $disktag = $_SERVER['disktag'];
$env = json_decode(getenv($disktag), true); $env = json_decode(getenv($disktag), true);
if (isset($env[$str])) { if (isset($env[$str])) {
if (in_array($str, $Base64Env)) return base64y_decode($env[$str]); if (isBase64Env($str)) return base64y_decode($env[$str]);
else return $env[$str]; else return $env[$str];
} }
} else { } else {
if (in_array($str, $Base64Env)) return base64y_decode(getenv($str)); if (isBase64Env($str)) return base64y_decode(getenv($str));
else return getenv($str); else return getenv($str);
} }
return ''; return '';
@@ -72,8 +78,6 @@ function getConfig($str, $disktag = '')
function setConfig($arr, $disktag = '') function setConfig($arr, $disktag = '')
{ {
global $InnerEnv;
global $Base64Env;
if ($disktag=='') $disktag = $_SERVER['disktag']; if ($disktag=='') $disktag = $_SERVER['disktag'];
$disktags = explode("|",getConfig('disktag')); $disktags = explode("|",getConfig('disktag'));
$diskconfig = json_decode(getenv($disktag), true); $diskconfig = json_decode(getenv($disktag), true);
@@ -81,8 +85,11 @@ function setConfig($arr, $disktag = '')
$indisk = 0; $indisk = 0;
$operatedisk = 0; $operatedisk = 0;
foreach ($arr as $k => $v) { foreach ($arr as $k => $v) {
if (in_array($k, $InnerEnv)) { if (isCommonEnv($k)) {
if (in_array($k, $Base64Env)) $diskconfig[$k] = base64y_encode($v); if (isBase64Env($k)) $tmp[$k] = base64y_encode($v);
else $tmp[$k] = $v;
} elseif (isInnerEnv($k)) {
if (isBase64Env($k)) $diskconfig[$k] = base64y_encode($v);
else $diskconfig[$k] = $v; else $diskconfig[$k] = $v;
$indisk = 1; $indisk = 1;
} elseif ($k=='disktag_add') { } elseif ($k=='disktag_add') {
@@ -92,11 +99,15 @@ function setConfig($arr, $disktag = '')
$disktags = array_diff($disktags, [ $v ]); $disktags = array_diff($disktags, [ $v ]);
$tmp[$v] = ''; $tmp[$v] = '';
$operatedisk = 1; $operatedisk = 1;
} elseif ($k=='disktag_copy') {
$newtag = $v . '_' . date("Ymd_His");
$tmp[$newtag] = getConfig($v);
array_push($disktags, $newtag);
$operatedisk = 1;
} elseif ($k=='disktag_rename' || $k=='disktag_newname') { } elseif ($k=='disktag_rename' || $k=='disktag_newname') {
if ($arr['disktag_rename']!=$arr['disktag_newname']) $operatedisk = 1; if ($arr['disktag_rename']!=$arr['disktag_newname']) $operatedisk = 1;
} else { } else {
if (in_array($k, $Base64Env)) $tmp[$k] = base64y_encode($v); $tmp[$k] = json_encode($v);
else $tmp[$k] = $v;
} }
} }
if ($indisk) { if ($indisk) {
@@ -106,7 +117,12 @@ function setConfig($arr, $disktag = '')
} }
if ($operatedisk) { if ($operatedisk) {
if (isset($arr['disktag_newname']) && $arr['disktag_newname']!='') { if (isset($arr['disktag_newname']) && $arr['disktag_newname']!='') {
$tmp['disktag'] = str_replace($arr['disktag_rename'], $arr['disktag_newname'], getConfig('disktag')); $tags = [];
foreach ($disktags as $tag) {
if ($tag==$arr['disktag_rename']) array_push($tags, $arr['disktag_newname']);
else array_push($tags, $tag);
}
$tmp['disktag'] = implode('|', $tags);
$tmp[$arr['disktag_newname']] = getConfig($arr['disktag_rename']); $tmp[$arr['disktag_newname']] = getConfig($arr['disktag_rename']);
$tmp[$arr['disktag_rename']] = ''; $tmp[$arr['disktag_rename']] = '';
} else { } else {
@@ -256,7 +272,7 @@ language:<br>';
return message($html, $title, 201); return message($html, $title, 201);
} }
$html .= '<a href="?install0">'.getconstStr('ClickInstall').'</a>, '.getconstStr('LogintoBind'); $html .= '<a href="?install0">'.getconstStr('ClickInstall').'</a>, '.getconstStr('LogintoBind');
$title = 'Error'; $title = 'Install';
return message($html, $title, 201); return message($html, $title, 201);
} }
@@ -324,7 +340,8 @@ function updateEnvironment($Envs, $function_name, $Region, $Namespace, $SecretId
} }
$tmp_env = array_filter($tmp_env, 'array_value_isnot_null'); // remove null. 清除空值 $tmp_env = array_filter($tmp_env, 'array_value_isnot_null'); // remove null. 清除空值
//$tmp_env['Region'] = $Region; //$tmp_env['Region'] = $Region;
ksort($tmp_env); //ksort($tmp_env);
sortConfig($tmp_env);
$i = 0; $i = 0;
foreach ($tmp_env as $key1 => $value1) { foreach ($tmp_env as $key1 => $value1) {
+43 -26
View File
@@ -23,9 +23,6 @@ function GetGlobalVariable($event)
$pos = strpos($cookievalues,"="); $pos = strpos($cookievalues,"=");
$_COOKIE[urldecode(substr($cookievalues,0,$pos))]=urldecode(substr($cookievalues,$pos+1)); $_COOKIE[urldecode(substr($cookievalues,0,$pos))]=urldecode(substr($cookievalues,$pos+1));
} }
$_SERVER['HTTP_USER_AGENT'] = $event['headers']['user-agent'];
$_SERVER['HTTP_TRANSLATE']==$event['headers']['translate'];//'f'
$_SERVER['USER'] = 'qcloud';
} }
function GetPathSetting($event, $context) function GetPathSetting($event, $context)
@@ -33,7 +30,7 @@ function GetPathSetting($event, $context)
$_SERVER['firstacceptlanguage'] = strtolower(splitfirst(splitfirst($event['headers']['accept-language'],';')[0],',')[0]); $_SERVER['firstacceptlanguage'] = strtolower(splitfirst(splitfirst($event['headers']['accept-language'],';')[0],',')[0]);
$_SERVER['function_name'] = $context['function_name']; $_SERVER['function_name'] = $context['function_name'];
$_SERVER['namespace'] = $context['namespace']; $_SERVER['namespace'] = $context['namespace'];
$_SERVER['Region'] = getenv('TENCENTCLOUD_REGION'); $_SERVER['Region'] = $context['tencentcloud_region'];
$host_name = $event['headers']['host']; $host_name = $event['headers']['host'];
$_SERVER['HTTP_HOST'] = $host_name; $_SERVER['HTTP_HOST'] = $host_name;
$serviceId = $event['requestContext']['serviceId']; $serviceId = $event['requestContext']['serviceId'];
@@ -49,28 +46,37 @@ function GetPathSetting($event, $context)
$_SERVER['PHP_SELF'] = path_format($_SERVER['base_path'] . $path); $_SERVER['PHP_SELF'] = path_format($_SERVER['base_path'] . $path);
$_SERVER['REMOTE_ADDR'] = $event['requestContext']['sourceIp']; $_SERVER['REMOTE_ADDR'] = $event['requestContext']['sourceIp'];
$_SERVER['HTTP_X_REQUESTED_WITH'] = $event['headers']['x-requested-with']; $_SERVER['HTTP_X_REQUESTED_WITH'] = $event['headers']['x-requested-with'];
$_SERVER['HTTP_USER_AGENT'] = $event['headers']['user-agent'];
if (isset($event['headers']['authorization'])) {
$basicAuth = splitfirst(base64_decode(splitfirst($event['headers']['authorization'], 'Basic ')[1]), ':');
$_SERVER['PHP_AUTH_USER'] = $basicAuth[0];
$_SERVER['PHP_AUTH_PW'] = $basicAuth[1];
}
$_SERVER['REQUEST_SCHEME'] = $event['headers']['x-forwarded-proto'];
$_SERVER['host'] = $_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['HTTP_HOST'];
$_SERVER['referhost'] = explode('/', $event['headers']['referer'])[2];
$_SERVER['HTTP_TRANSLATE']==$event['headers']['translate'];//'f'
$_SERVER['USER'] = 'qcloud';
return $path; return $path;
} }
function getConfig($str, $disktag = '') function getConfig($str, $disktag = '')
{ {
global $InnerEnv;
global $Base64Env;
//include 'config.php'; //include 'config.php';
$s = file_get_contents('config.php'); $s = file_get_contents('.data/config.php');
//$configs = substr($s, 18, -2); //$configs = substr($s, 18, -2);
$configs = '{' . splitlast(splitfirst($s, '{')[1], '}')[0] . '}'; $configs = '{' . splitlast(splitfirst($s, '{')[1], '}')[0] . '}';
if ($configs!='') { if ($configs!='') {
$envs = json_decode($configs, true); $envs = json_decode($configs, true);
if (in_array($str, $InnerEnv)) { if (isInnerEnv($str)) {
if ($disktag=='') $disktag = $_SERVER['disktag']; if ($disktag=='') $disktag = $_SERVER['disktag'];
if (isset($envs[$disktag][$str])) { if (isset($envs[$disktag][$str])) {
if (in_array($str, $Base64Env)) return base64y_decode($envs[$disktag][$str]); if (isBase64Env($str)) return base64y_decode($envs[$disktag][$str]);
else return $envs[$disktag][$str]; else return $envs[$disktag][$str];
} }
} else { } else {
if (isset($envs[$str])) { if (isset($envs[$str])) {
if (in_array($str, $Base64Env)) return base64y_decode($envs[$str]); if (isBase64Env($str)) return base64y_decode($envs[$str]);
else return $envs[$str]; else return $envs[$str];
} }
} }
@@ -80,11 +86,9 @@ function getConfig($str, $disktag = '')
function setConfig($arr, $disktag = '') function setConfig($arr, $disktag = '')
{ {
global $InnerEnv;
global $Base64Env;
if ($disktag=='') $disktag = $_SERVER['disktag']; if ($disktag=='') $disktag = $_SERVER['disktag'];
//include 'config.php'; //include 'config.php';
$s = file_get_contents('config.php'); $s = file_get_contents('.data/config.php');
//$configs = substr($s, 18, -2); //$configs = substr($s, 18, -2);
$configs = '{' . splitlast(splitfirst($s, '{')[1], '}')[0] . '}'; $configs = '{' . splitlast(splitfirst($s, '{')[1], '}')[0] . '}';
if ($configs!='') $envs = json_decode($configs, true); if ($configs!='') $envs = json_decode($configs, true);
@@ -92,8 +96,11 @@ function setConfig($arr, $disktag = '')
$indisk = 0; $indisk = 0;
$operatedisk = 0; $operatedisk = 0;
foreach ($arr as $k => $v) { foreach ($arr as $k => $v) {
if (in_array($k, $InnerEnv)) { if (isCommonEnv($k)) {
if (in_array($k, $Base64Env)) $envs[$disktag][$k] = base64y_encode($v); if (isBase64Env($k)) $envs[$k] = base64y_encode($v);
else $envs[$k] = $v;
} elseif (isInnerEnv($k)) {
if (isBase64Env($k)) $envs[$disktag][$k] = base64y_encode($v);
else $envs[$disktag][$k] = $v; else $envs[$disktag][$k] = $v;
$indisk = 1; $indisk = 1;
} elseif ($k=='disktag_add') { } elseif ($k=='disktag_add') {
@@ -103,11 +110,15 @@ function setConfig($arr, $disktag = '')
$disktags = array_diff($disktags, [ $v ]); $disktags = array_diff($disktags, [ $v ]);
$envs[$v] = ''; $envs[$v] = '';
$operatedisk = 1; $operatedisk = 1;
} elseif ($k=='disktag_copy') {
$newtag = $v . '_' . date("Ymd_His");
$envs[$newtag] = $envs[$v];
array_push($disktags, $newtag);
$operatedisk = 1;
} elseif ($k=='disktag_rename' || $k=='disktag_newname') { } elseif ($k=='disktag_rename' || $k=='disktag_newname') {
if ($arr['disktag_rename']!=$arr['disktag_newname']) $operatedisk = 1; if ($arr['disktag_rename']!=$arr['disktag_newname']) $operatedisk = 1;
} else { } else {
if (in_array($k, $Base64Env)) $envs[$k] = base64y_encode($v); $envs[$k] = $v;
else $envs[$k] = $v;
} }
} }
if ($indisk) { if ($indisk) {
@@ -118,7 +129,12 @@ function setConfig($arr, $disktag = '')
} }
if ($operatedisk) { if ($operatedisk) {
if (isset($arr['disktag_newname']) && $arr['disktag_newname']!='') { if (isset($arr['disktag_newname']) && $arr['disktag_newname']!='') {
$envs['disktag'] = str_replace($arr['disktag_rename'], $arr['disktag_newname'], getConfig('disktag')); $tags = [];
foreach ($disktags as $tag) {
if ($tag==$arr['disktag_rename']) array_push($tags, $arr['disktag_newname']);
else array_push($tags, $tag);
}
$envs['disktag'] = implode('|', $tags);
$envs[$arr['disktag_newname']] = $envs[$arr['disktag_rename']]; $envs[$arr['disktag_newname']] = $envs[$arr['disktag_rename']];
$envs[$arr['disktag_rename']] = ''; $envs[$arr['disktag_rename']] = '';
} else { } else {
@@ -129,7 +145,7 @@ function setConfig($arr, $disktag = '')
} }
} }
$envs = array_filter($envs, 'array_value_isnot_null'); $envs = array_filter($envs, 'array_value_isnot_null');
ksort($envs); //ksort($envs);
$response = updateEnvironment($envs, $_SERVER['function_name'], $_SERVER['Region'], $_SERVER['namespace'], getConfig('SecretId'), getConfig('SecretKey')); $response = updateEnvironment($envs, $_SERVER['function_name'], $_SERVER['Region'], $_SERVER['namespace'], getConfig('SecretId'), getConfig('SecretKey'));
WaitSCFStat($_SERVER['function_name'], $_SERVER['Region'], $_SERVER['namespace'], getConfig('SecretId'), getConfig('SecretKey')); WaitSCFStat($_SERVER['function_name'], $_SERVER['Region'], $_SERVER['namespace'], getConfig('SecretId'), getConfig('SecretKey'));
return $response; return $response;
@@ -268,7 +284,7 @@ language:<br>';
return message($html, $title, 201); return message($html, $title, 201);
} }
$html .= '<a href="?install0">'.getconstStr('ClickInstall').'</a>, '.getconstStr('LogintoBind'); $html .= '<a href="?install0">'.getconstStr('ClickInstall').'</a>, '.getconstStr('LogintoBind');
$title = 'Error'; $title = 'Install';
return message($html, $title, 201); return message($html, $title, 201);
} }
@@ -366,6 +382,7 @@ function copyFolder($from, $to)
function updateEnvironment($Envs, $function_name, $Region, $Namespace, $SecretId, $SecretKey) function updateEnvironment($Envs, $function_name, $Region, $Namespace, $SecretId, $SecretKey)
{ {
sortConfig($Envs);
// 获取当前代码并解压 // 获取当前代码并解压
//$codeurl = json_decode(getfunctioncodeurl($function_name, $Region, $Namespace, $SecretId, $SecretKey), true)['Response']['Url']; //$codeurl = json_decode(getfunctioncodeurl($function_name, $Region, $Namespace, $SecretId, $SecretKey), true)['Response']['Url'];
//$codezip = '/tmp/oldcode.zip'; //$codezip = '/tmp/oldcode.zip';
@@ -382,7 +399,7 @@ function updateEnvironment($Envs, $function_name, $Region, $Namespace, $SecretId
// 将配置写入 // 将配置写入
$prestr = '<?php $configs = \'' . PHP_EOL; $prestr = '<?php $configs = \'' . PHP_EOL;
$aftstr = PHP_EOL . '\';'; $aftstr = PHP_EOL . '\';';
file_put_contents($outPath . 'config.php', $prestr . json_encode($Envs, JSON_PRETTY_PRINT) . $aftstr); file_put_contents($outPath . '.data/config.php', $prestr . json_encode($Envs, JSON_PRETTY_PRINT) . $aftstr);
// 将目录中文件打包成zip // 将目录中文件打包成zip
$source = '/tmp/code.zip'; $source = '/tmp/code.zip';
@@ -395,7 +412,7 @@ function updateEnvironment($Envs, $function_name, $Region, $Namespace, $SecretId
return updateProgram($function_name, $Region, $namespace, $SecretId, $SecretKey, $source); return updateProgram($function_name, $Region, $namespace, $SecretId, $SecretKey, $source);
$tmp1['Response']['Error']['Message'] = $codeurl; $tmp1['Response']['Error']['Message'] = $codeurl;
error_log($tmp1['Response']['Error']['Message']); error_log1($tmp1['Response']['Error']['Message']);
return json_encode($tmp1); return json_encode($tmp1);
} }
@@ -451,7 +468,7 @@ function SetbaseConfig($Envs, $function_name, $Region, $Namespace, $SecretId, $S
} }
WaitSCFStat($function_name, $Region, $Namespace, $SecretId, $SecretKey); WaitSCFStat($function_name, $Region, $Namespace, $SecretId, $SecretKey);
$s = file_get_contents('config.php'); $s = file_get_contents('.data/config.php');
//$configs = substr($s, 18, -2); //$configs = substr($s, 18, -2);
$configs = '{' . splitlast(splitfirst($s, '{')[1], '}')[0] . '}'; $configs = '{' . splitlast(splitfirst($s, '{')[1], '}')[0] . '}';
if ($configs!='') $envs = json_decode($configs, true); if ($configs!='') $envs = json_decode($configs, true);
@@ -459,7 +476,7 @@ function SetbaseConfig($Envs, $function_name, $Region, $Namespace, $SecretId, $S
$envs[$k] = $v; $envs[$k] = $v;
} }
$envs = array_filter($envs, 'array_value_isnot_null'); $envs = array_filter($envs, 'array_value_isnot_null');
ksort($envs); //ksort($envs);
$response = updateEnvironment($envs, $function_name, $Region, $Namespace, $SecretId, $SecretKey); $response = updateEnvironment($envs, $function_name, $Region, $Namespace, $SecretId, $SecretKey);
return $response; return $response;
} }
@@ -538,7 +555,7 @@ function updateProgram($function_name, $Region, $Namespace, $SecretId, $SecretKe
// .' -H "X-TC-Version: '.$version.'"' // .' -H "X-TC-Version: '.$version.'"'
// .' -H "X-TC-Region: '.$region.'"' // .' -H "X-TC-Region: '.$region.'"'
// ." -d '".$payload."'"; // ." -d '".$payload."'";
//error_log( $curl.PHP_EOL ); //error_log1( $curl.PHP_EOL );
//return '{"response": {"Error": {"Message":"' . $curl . '"}}}'; //return '{"response": {"Error": {"Message":"' . $curl . '"}}}';
$headers['Authorization'] = $authorization; $headers['Authorization'] = $authorization;
$headers['Content-Type'] = 'application/json; charset=utf-8'; $headers['Content-Type'] = 'application/json; charset=utf-8';
@@ -593,7 +610,7 @@ function OnekeyUpate($auth = 'qkqpttgf', $project = 'OneManager-php', $branch =
} }
} }
// 放入配置文件 // 放入配置文件
file_put_contents($outPath . '/config.php', file_get_contents(__DIR__.'/../config.php')); file_put_contents($outPath . '/.data/config.php', file_get_contents(__DIR__ . '/../.data/config.php'));
// 将目录中文件打包成zip // 将目录中文件打包成zip
//$zip=new ZipArchive(); //$zip=new ZipArchive();
+2 -3
View File
@@ -40,8 +40,8 @@ How to Install:
开启伪静态(重写)功能,规则在.htaccess文件中,ngnix从里面复制,我们的目的是不管访问什么都让index.php来处理。 开启伪静态(重写)功能,规则在.htaccess文件中,ngnix从里面复制,我们的目的是不管访问什么都让index.php来处理。
3.Upload code. 3.Upload code.
上传好代码。 上传好代码。
4.Change the file config.php can be read&write (666 is suggested). 4.Change the file .data/config.php can be read&write (666 is suggested).
让代码中的config.php文件程序可读写,推荐chmod 666 config.php。 使web身份可读写代码中的.data/config.php文件,推荐chmod 666 .data/config.php。
5.View the website in chrome or other. 5.View the website in chrome or other.
在浏览器中访问。 在浏览器中访问。
@@ -114,5 +114,4 @@ it will showed at top or bottom as markdown. 以MD语法显示在顶部或底部
### head.omf foot.omf ### head.omf foot.omf
it will showed at top or bottom as html (javascript works!). 以html显示在顶部或底部(可以跑js)。 it will showed at top or bottom as html (javascript works!). 以html显示在顶部或底部(可以跑js)。
QQ Group: 943919989 (请看完上面的中英双语再加群,谢谢!)
Telegram Group: https://t.me/joinchat/I_RVc0bqxuxlT-d0cO7ozw Telegram Group: https://t.me/joinchat/I_RVc0bqxuxlT-d0cO7ozw
+447 -78
View File
@@ -179,11 +179,11 @@
<div style="margin: 12px 4px 4px; text-align: center"> <div style="margin: 12px 4px 4px; text-align: center">
<div style="margin: 24px"> <div style="margin: 24px">
<textarea id="url" title="url" rows="1" style="width: 100%; margin-top: 2px;" readonly><!--FileEncodeUrl--></textarea> <textarea id="url" title="url" rows="1" style="width: 100%; margin-top: 2px;" readonly><!--FileEncodeUrl--></textarea>
<a href="<!--FileUrl-->"><ion-icon name="download" style="line-height: 16px;vertical-align: middle;"></ion-icon>&nbsp;<!--constStr@Download--></a> <a href="<!--FileEncodeUrl-->"><ion-icon name="download" style="line-height: 16px;vertical-align: middle;"></ion-icon>&nbsp;<!--constStr@Download--></a>
</div> </div>
<div style="margin: 24px"> <div style="margin: 24px">
<!--IsimgFileStart--> <!--IsimgFileStart-->
<img src="<!--FileDownUrl-->" alt="<!--FileName-->" onload="if (this.offsetWidth>document.getElementById('url').offsetWidth) this.style.width='100%';" /> <img src="<!--FileEncodeUrl-->" alt="<!--FileName-->" onload="if (this.offsetWidth>document.getElementById('url').offsetWidth) this.style.width='100%';" />
<!--IsimgFileEnd--> <!--IsimgFileEnd-->
<!--IsvideoFileStart--> <!--IsvideoFileStart-->
<div id="video-a0"></div> <div id="video-a0"></div>
@@ -249,7 +249,7 @@
</li> </li>
<!--AdminEnd--> <!--AdminEnd-->
<ion-icon name="folder"></ion-icon> <ion-icon name="folder"></ion-icon>
<a id="file_a<!--filenum-->" name="folderlist" href="<!--FileEncodeReplaceUrl-->/"><!--FileEncodeReplaceName--></a> <a id="file_a<!--filenum-->" name="folderlist" href="<!--FileEncodeReplaceUrl-->/" fileid="<!--FileId-->"><!--FileEncodeReplaceName--></a>
</td> </td>
<td class="updated_at" id="folder_time<!--filenum-->"><!--lastModifiedDateTime--></td> <td class="updated_at" id="folder_time<!--filenum-->"><!--lastModifiedDateTime--></td>
<td class="size" id="folder_size<!--filenum-->"><!--size--></td> <td class="size" id="folder_size<!--filenum-->"><!--size--></td>
@@ -269,7 +269,7 @@
</li> </li>
<!--AdminEnd--> <!--AdminEnd-->
<ion-icon name="<!--IconValue-->"></ion-icon> <ion-icon name="<!--IconValue-->"></ion-icon>
<a id="file_a<!--filenum-->" name="filelist" href="<!--FileEncodeReplaceUrl-->?preview" target=_blank><!--FileEncodeReplaceName--></a> <a id="file_a<!--filenum-->" name="filelist" href="<!--FileEncodeReplaceUrl-->?preview" fileid="<!--FileId-->" target=_blank><!--FileEncodeReplaceName--></a>
<a class="download" href="<!--FileEncodeReplaceUrl-->"><ion-icon name="download"></ion-icon></a> <a class="download" href="<!--FileEncodeReplaceUrl-->"><ion-icon name="download"></ion-icon></a>
</td> </td>
<td class="updated_at" id="file_time<!--filenum-->"><!--lastModifiedDateTime--></td> <td class="updated_at" id="file_time<!--filenum-->"><!--lastModifiedDateTime--></td>
@@ -357,6 +357,7 @@
<label id="rename_label"></label><br><br><a onclick="operatediv_close('rename')" class="operatediv_close"><!--constStr@Close--></a> <label id="rename_label"></label><br><br><a onclick="operatediv_close('rename')" class="operatediv_close"><!--constStr@Close--></a>
<form id="rename_form" onsubmit="return submit_operate('rename');"> <form id="rename_form" onsubmit="return submit_operate('rename');">
<input id="rename_sid" name="rename_sid" type="hidden" value=""> <input id="rename_sid" name="rename_sid" type="hidden" value="">
<input id="rename_fileid" name="rename_fileid" type="hidden" value="">
<input id="rename_hidden" name="rename_oldname" type="hidden" value=""> <input id="rename_hidden" name="rename_oldname" type="hidden" value="">
<input id="rename_input" name="rename_newname" type="text" value=""> <input id="rename_input" name="rename_newname" type="text" value="">
<input name="operate_action" type="submit" value="<!--constStr@Rename-->"> <input name="operate_action" type="submit" value="<!--constStr@Rename-->">
@@ -370,6 +371,7 @@
<form id="delete_form" onsubmit="return submit_operate('delete');"> <form id="delete_form" onsubmit="return submit_operate('delete');">
<label id="delete_input"><!--constStr@Delete-->?</label> <label id="delete_input"><!--constStr@Delete-->?</label>
<input id="delete_sid" name="delete_sid" type="hidden" value=""> <input id="delete_sid" name="delete_sid" type="hidden" value="">
<input id="delete_fileid" name="delete_fileid" type="hidden" value="">
<input id="delete_hidden" name="delete_name" type="hidden" value=""> <input id="delete_hidden" name="delete_name" type="hidden" value="">
<input name="operate_action" type="submit" value="<!--constStr@Submit-->"> <input name="operate_action" type="submit" value="<!--constStr@Submit-->">
</form> </form>
@@ -380,6 +382,7 @@
<label id="encrypt_label"></label><br><br><a onclick="operatediv_close('encrypt')" class="operatediv_close"><!--constStr@Close--></a> <label id="encrypt_label"></label><br><br><a onclick="operatediv_close('encrypt')" class="operatediv_close"><!--constStr@Close--></a>
<form id="encrypt_form" onsubmit="return submit_operate('encrypt');"> <form id="encrypt_form" onsubmit="return submit_operate('encrypt');">
<input id="encrypt_sid" name="encrypt_sid" type="hidden" value=""> <input id="encrypt_sid" name="encrypt_sid" type="hidden" value="">
<input id="encrypt_fileid" name="encrypt_fileid" type="hidden" value="">
<input id="encrypt_hidden" name="encrypt_folder" type="hidden" value=""> <input id="encrypt_hidden" name="encrypt_folder" type="hidden" value="">
<input id="encrypt_input" name="encrypt_newpass" type="text" value="" placeholder="<!--constStr@InputPasswordUWant-->"> <input id="encrypt_input" name="encrypt_newpass" type="text" value="" placeholder="<!--constStr@InputPasswordUWant-->">
<!--EncryptBtnStart--><input name="operate_action" type="submit" value="<!--constStr@Encrypt-->"><!--EncryptBtnEnd--><!--EncryptAlertStart--><br><label><!--constStr@SetpassfileBfEncrypt--></label><!--EncryptAlertEnd--> <!--EncryptBtnStart--><input name="operate_action" type="submit" value="<!--constStr@Encrypt-->"><!--EncryptBtnEnd--><!--EncryptAlertStart--><br><label><!--constStr@SetpassfileBfEncrypt--></label><!--EncryptAlertEnd-->
@@ -391,6 +394,7 @@
<label id="copy_label"></label><br><br><a onclick="operatediv_close('copy')" class="operatediv_close"><!--constStr@Close--></a> <label id="copy_label"></label><br><br><a onclick="operatediv_close('copy')" class="operatediv_close"><!--constStr@Close--></a>
<form id="copy_form" onsubmit="return submit_operate('copy');"> <form id="copy_form" onsubmit="return submit_operate('copy');">
<input id="copy_sid" name="copy_sid" type="hidden" value=""> <input id="copy_sid" name="copy_sid" type="hidden" value="">
<input id="copy_fileid" name="copy_fileid" type="hidden" value="">
<input id="copy_hidden" name="copy_name" type="hidden" value=""> <input id="copy_hidden" name="copy_name" type="hidden" value="">
<input id="copy_input" name="copy_input" type="hidden" value=""> <input id="copy_input" name="copy_input" type="hidden" value="">
<input name="operate_action" type="submit" value="<!--constStr@Copy-->"> <input name="operate_action" type="submit" value="<!--constStr@Copy-->">
@@ -402,6 +406,7 @@
<label id="move_label"></label><br><br><a onclick="operatediv_close('move')" class="operatediv_close"><!--constStr@Close--></a> <label id="move_label"></label><br><br><a onclick="operatediv_close('move')" class="operatediv_close"><!--constStr@Close--></a>
<form id="move_form" onsubmit="return submit_operate('move');"> <form id="move_form" onsubmit="return submit_operate('move');">
<input id="move_sid" name="move_sid" type="hidden" value=""> <input id="move_sid" name="move_sid" type="hidden" value="">
<input id="move_fileid" name="move_fileid" type="hidden" value="">
<input id="move_hidden" name="move_name" type="hidden" value=""> <input id="move_hidden" name="move_name" type="hidden" value="">
<select id="move_input" name="move_folder"> <select id="move_input" name="move_folder">
<!--MoveRootStart--> <!--MoveRootStart-->
@@ -420,6 +425,7 @@
<a onclick="operatediv_close('create')" class="operatediv_close"><!--constStr@Close--></a> <a onclick="operatediv_close('create')" class="operatediv_close"><!--constStr@Close--></a>
<form id="create_form" onsubmit="return submit_operate('create');"> <form id="create_form" onsubmit="return submit_operate('create');">
<input id="create_sid" name="create_sid" type="hidden" value=""> <input id="create_sid" name="create_sid" type="hidden" value="">
<input id="create_fileid" name="create_fileid" type="hidden" value="">
<input id="create_hidden" type="hidden" value=""> <input id="create_hidden" type="hidden" value="">
<table> <table>
<tr> <tr>
@@ -457,8 +463,9 @@
<div style="margin:50px"> <div style="margin:50px">
<a onclick="operatediv_close('login')" class="operatediv_close"><!--constStr@Close--></a> <a onclick="operatediv_close('login')" class="operatediv_close"><!--constStr@Close--></a>
<center> <center>
<form action="<!--IsPreview?-->admin" method="post"> <form action="<!--IsPreview?-->admin" method="post" onsubmit="return sha1loginpass(this);">
<input id="login_input" name="password1" type="password" placeholder="<!--constStr@InputPassword-->"> <input id="login_input" name="password1" type="password" placeholder="<!--constStr@InputPassword-->">
<input name="timestamp" type="hidden" value="">
<input type="submit" value="<!--constStr@Login-->"> <input type="submit" value="<!--constStr@Login-->">
</form> </form>
</center> </center>
@@ -472,6 +479,7 @@
<!--MdRequireStart--><link rel="stylesheet" href="//unpkg.zhimg.com/github-markdown-css@3.0.1/github-markdown.css"> <!--MdRequireStart--><link rel="stylesheet" href="//unpkg.zhimg.com/github-markdown-css@3.0.1/github-markdown.css">
<script type="text/javascript" src="//unpkg.zhimg.com/marked@0.6.2/marked.min.js"></script><!--MdRequireEnd--> <script type="text/javascript" src="//unpkg.zhimg.com/marked@0.6.2/marked.min.js"></script><!--MdRequireEnd-->
<!--GuestUploadStart--><script type="text/javascript" src="//cdn.bootcss.com/spark-md5/3.0.0/spark-md5.min.js"></script><!--GuestUploadEnd--> <!--GuestUploadStart--><script type="text/javascript" src="//cdn.bootcss.com/spark-md5/3.0.0/spark-md5.min.js"></script><!--GuestUploadEnd-->
<!--AliyundriveUploadJsStart--><script src="https://cdn.bootcss.com/js-sha1/0.6.0/sha1.min.js"></script><!--AliyundriveUploadJsEnd-->
<!--IsFileStart--><!--IspdfFileStart--><script src="//cdn.bootcss.com/pdf.js/2.3.200/pdf.min.js"></script><!--IspdfFileEnd--><!--IsFileEnd--> <!--IsFileStart--><!--IspdfFileStart--><script src="//cdn.bootcss.com/pdf.js/2.3.200/pdf.min.js"></script><!--IspdfFileEnd--><!--IsFileEnd-->
<!--ListEnd--> <!--ListEnd-->
<script type="text/javascript"> <script type="text/javascript">
@@ -484,28 +492,32 @@
document.cookie='language='+str+'; path=/; '+expires; document.cookie='language='+str+'; path=/; '+expires;
location.href = location.href; location.href = location.href;
} }
<!--LoginStart-->
function login() {
document.getElementById('mask').style.display='';
//document.getElementById('mask').style.width=document.documentElement.scrollWidth+'px';
document.getElementById('mask').style.height=document.documentElement.scrollHeight<window.innerHeight?window.innerHeight:document.documentElement.scrollHeight+'px';
document.getElementById('login_div').style.display='';
document.getElementById('login_div').style.left=(document.body.clientWidth-document.getElementById('login_div').offsetWidth)/2 +'px';
document.getElementById('login_div').style.top=(window.innerHeight-document.getElementById('login_div').offsetHeight)/2+document.body.scrollTop +'px';
document.getElementById('login_input').focus();
}
function sha1loginpass(f) {
if (f.password1.value=="") return false;
try {
timestamp = new Date().getTime() + "";
timestamp = timestamp.substr(0, timestamp.length-3);
f.timestamp.value = timestamp;
f.password1.value = sha1(timestamp + "" + f.password1.value);
return true;
} catch {
alert("sha1.js not loaded.");
return false;
}
}
<!--LoginEnd-->
<!--ListStart--> <!--ListStart-->
/*var root = '<!--base_disk_path-->';
function path_format(path) {
path = '/' + path + '/';
while (path.indexOf('//') !== -1) {
path = path.replace('//', '/')
}
return path
}
document.querySelectorAll('.table-header').forEach(function (e) {
var path = e.innerText;
if (path.substr(path.length-1)=='/') path = path.substr(0, path.length-1);
var paths = path.split('/');
e.innerHTML = '/ ';
if (paths <= 2) return;
for (var i = 1; i < paths.length - 1; i++) {
var to = path_format(root + paths.slice(0, i + 1).join('/'));
e.innerHTML += '<a href="' + to + '">' + paths[i] + '</a> / '
}
e.innerHTML += paths[paths.length - 1];
e.innerHTML = e.innerHTML.replace(/\s\/\s$/, '')
});*/
<!--IsFileStart--> <!--IsFileStart-->
var $url = document.getElementById('url'); var $url = document.getElementById('url');
if ($url) { if ($url) {
@@ -633,7 +645,6 @@
if ($head) { if ($head) {
//document.getElementById('head-div').parentNode.insertBefore(document.getElementById('head-div'),document.getElementById('list-div')); //document.getElementById('head-div').parentNode.insertBefore(document.getElementById('head-div'),document.getElementById('list-div'));
$head.innerHTML = marked(document.getElementById('head-md').innerText); $head.innerHTML = marked(document.getElementById('head-md').innerText);
} }
<!--HeadmdEnd--> <!--HeadmdEnd-->
<!--ReadmemdStart--> <!--ReadmemdStart-->
@@ -796,6 +807,40 @@
alert(tmptextarea.innerHTML+"<!--constStr@Success-->"); alert(tmptextarea.innerHTML+"<!--constStr@Success-->");
} }
<!--UploadJsStart--> <!--UploadJsStart-->
function size_format(num) {
if (num>1024) {
num=num/1024;
} else {
return num.toFixed(2) + ' B';
}
if (num>1024) {
num=num/1024;
} else {
return num.toFixed(2) + ' KB';
}
if (num>1024) {
num=num/1024;
} else {
return num.toFixed(2) + ' MB';
}
return num.toFixed(2) + ' GB';
}
function seconds2hour(seconds) {
let h, m, s;
if (parseFloat(seconds)<60) {
return seconds + 's';
} else {
s = (seconds % 60).toFixed(0);
m = parseInt(seconds / 60);
if (parseInt(m)<60) {
return m + 'm' + s + 's';
} else {
h = parseInt(m / 60);
m = m % 60;
return h + 'h' + m + 'm' + s + 's';
}
}
}
function uploadbuttonhide() { function uploadbuttonhide() {
document.getElementById('upload_btns').style.display='none'; document.getElementById('upload_btns').style.display='none';
/*document.getElementById('upload_submit').disabled='disabled'; /*document.getElementById('upload_submit').disabled='disabled';
@@ -810,6 +855,9 @@
document.getElementById('upload_submit').style.display=''; document.getElementById('upload_submit').style.display='';
document.getElementById('upload_file').style.display='';*/ document.getElementById('upload_file').style.display='';*/
} }
var uploading = new Object();
<!--UploadJsEnd-->
<!--OnedriveUploadJsStart-->
function preup() { function preup() {
uploadbuttonhide(); uploadbuttonhide();
var files=document.getElementById('upload_file').files; var files=document.getElementById('upload_file').files;
@@ -822,7 +870,15 @@
table1.setAttribute('class','list-table'); table1.setAttribute('class','list-table');
var timea=new Date().getTime(); var timea=new Date().getTime();
var i=0; var i=0;
var uploadList = setInterval(function(){
if (i<files.length) {
if (Object.keys(uploading).length<5) {
getuplink(i); getuplink(i);
i++;
}// else console.log(Object.keys(uploading).length);
} else clearInterval(uploadList);
}, 1000);
//getuplink(i);
function getuplink(i, r=0) { function getuplink(i, r=0) {
var file=files[i]; var file=files[i];
var td1; var td1;
@@ -835,7 +891,7 @@
tr1.appendChild(td1); tr1.appendChild(td1);
td1.setAttribute('style','width:30%;word-break:break-word;'); td1.setAttribute('style','width:30%;word-break:break-word;');
td1.setAttribute('id','upfile_td1_'+timea+'_'+i); td1.setAttribute('id','upfile_td1_'+timea+'_'+i);
td1.innerHTML=(file.webkitRelativePath||file.name)+'<br>'+size_format(file.size); td1.innerHTML=(file.webkitRelativePath||file.name)+'<br>'+size_format(file.size)+' ('+(i+1)+'/'+files.length+')';
td2=document.createElement('td'); td2=document.createElement('td');
tr1.appendChild(td2); tr1.appendChild(td2);
td2.setAttribute('id','upfile_td2_'+timea+'_'+i); td2.setAttribute('id','upfile_td2_'+timea+'_'+i);
@@ -848,7 +904,9 @@
uploadbuttonshow(); uploadbuttonshow();
return; return;
} }
upbigfilename = encodeURIComponent((file.webkitRelativePath||file.name)); var upbigfilename = encodeURIComponent((file.webkitRelativePath||file.name));
uploading[upbigfilename] = i;
var filemd5='';
<!--GuestStart--> <!--GuestStart-->
function getext(str) { function getext(str) {
strarry=str.split('.'); strarry=str.split('.');
@@ -880,13 +938,14 @@
if (asize < file.size) { if (asize < file.size) {
readblob(asize); readblob(asize);
} else { } else {
var filemd5 = spark.end(); filemd5 = spark.end();
td2.innerHTML='md5: '+filemd5; td2.innerHTML='md5: '+filemd5;
upbigfilename = filemd5+ext; upbigfilename = filemd5+ext;
<!--GuestEnd--> <!--GuestEnd-->
td2.innerHTML='<!--constStr@GetUploadLink--> ...'; td2.innerHTML='<!--constStr@GetUploadLink--> ...';
var xhr1 = new XMLHttpRequest(); var xhr1 = new XMLHttpRequest();
xhr1.open("GET", '?action=upbigfile&upbigfilename='+ upbigfilename +'&filesize='+ file.size +'&lastModified='+ file.lastModified); xhr1.open("POST", '?action=upbigfile');
//xhr1.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=utf-8");
xhr1.setRequestHeader('x-requested-with','XMLHttpRequest'); xhr1.setRequestHeader('x-requested-with','XMLHttpRequest');
xhr1.onprogress = function(e){ xhr1.onprogress = function(e){
td2.innerHTML+='.'; td2.innerHTML+='.';
@@ -894,15 +953,6 @@
xhr1.onload = function(e){ xhr1.onload = function(e){
//console.log(xhr1.status+xhr1.responseText); //console.log(xhr1.status+xhr1.responseText);
td2.innerHTML='<font color="red">'+xhr1.responseText+'</font>'; td2.innerHTML='<font color="red">'+xhr1.responseText+'</font>';
if (xhr1.status==409) {
// td2.innerHTML='nameAlreadyExists';
var html=JSON.parse(xhr1.responseText);
td2.innerHTML=html['error']['code']+': '+html['error']['message'];
<!--GuestStart-->
td2.innerHTML='md5: '+filemd5;
<!--GuestEnd-->
td1.innerHTML='<div style="color:green"><a href="<!--base_disk_path--><!--Path-->'+(file.webkitRelativePath||file.name)+'?preview" id="upfile_a_'+tdnum+'" target="_blank">'+td1.innerHTML+'</a><br><a href="<!--base_disk_path--><!--Path-->'+(file.webkitRelativePath||file.name)+'" id="upfile_a1_'+tdnum+'"></a><!--constStr@UploadComplete--><button onclick="CopyAllDownloadUrl(\'#upfile_a1_'+tdnum+'\');" id="upfile_cpbt_'+tdnum+'" <!--AdminStart--> style="display:none"<!--AdminEnd--> ><!--constStr@CopyUrl--></button></div>';
}
if (xhr1.status==200) { if (xhr1.status==200) {
if (xhr1.responseText=='') { if (xhr1.responseText=='') {
getuplink(i,1); getuplink(i,1);
@@ -915,13 +965,27 @@
td2.innerHTML='<!--constStr@UploadStart--> ...'; td2.innerHTML='<!--constStr@UploadStart--> ...';
binupfile(file,html['uploadUrl'],timea+'_'+i, upbigfilename); binupfile(file,html['uploadUrl'],timea+'_'+i, upbigfilename);
} }
} else {
if (xhr1.status==409) {
// td2.innerHTML='nameAlreadyExists';
var html=JSON.parse(xhr1.responseText);
td2.innerHTML=html['error']['code']+': '+html['error']['message'];
<!--GuestStart-->
td2.innerHTML='md5: '+filemd5;
td1.innerHTML='<div style="color:green"><a href="<!--base_disk_path--><!--Path-->'+upbigfilename+'?preview" id="upfile_a_'+tdnum+'" target="_blank">'+td1.innerHTML+'</a><br><a href="<!--base_disk_path--><!--Path-->'+upbigfilename+'" id="upfile_a1_'+tdnum+'"></a><!--constStr@UploadComplete--><button onclick="CopyAllDownloadUrl(\'#upfile_a1_'+tdnum+'\');" id="upfile_cpbt_'+tdnum+'"><!--constStr@CopyUrl--></button></div>';
<!--GuestEnd-->
<!--AdminStart-->
td1.innerHTML='<div style="color:green"><a href="<!--base_disk_path--><!--Path-->'+(file.webkitRelativePath||file.name)+'?preview" id="upfile_a_'+tdnum+'" target="_blank">'+td1.innerHTML+'</a><br><a href="<!--base_disk_path--><!--Path-->'+(file.webkitRelativePath||file.name)+'" id="upfile_a1_'+tdnum+'"></a><!--constStr@UploadComplete--><button onclick="CopyAllDownloadUrl(\'#upfile_a1_'+tdnum+'\');" id="upfile_cpbt_'+tdnum+'" style="display:none"><!--constStr@CopyUrl--></button></div>';
<!--AdminEnd-->
} }
if (i<files.length-1) { /*if (i<files.length-1) {
i++; i++;
getuplink(i); getuplink(i);
}*/
delete uploading[upbigfilename];
} }
} }
xhr1.send(null); xhr1.send('upbigfilename='+ upbigfilename +'&filesize='+ file.size +'&filelastModified='+ file.lastModified +'&filemd5='+ filemd5);
<!--GuestStart--> <!--GuestStart-->
} }
} }
@@ -929,24 +993,7 @@
} }
uploadbuttonshow(); uploadbuttonshow();
} }
function size_format(num) {
if (num>1024) {
num=num/1024;
} else {
return num.toFixed(2) + ' B';
}
if (num>1024) {
num=num/1024;
} else {
return num.toFixed(2) + ' KB';
}
if (num>1024) {
num=num/1024;
} else {
return num.toFixed(2) + ' MB';
}
return num.toFixed(2) + ' GB';
}
function binupfile(file,url,tdnum,filename){ function binupfile(file,url,tdnum,filename){
var label=document.getElementById('upfile_td2_'+tdnum); var label=document.getElementById('upfile_td2_'+tdnum);
var reader = new FileReader(); var reader = new FileReader();
@@ -995,7 +1042,7 @@
var tmptime = new Date(); var tmptime = new Date();
var tmpspeed = e.loaded*1000/(tmptime.getTime()-C_starttime.getTime()); var tmpspeed = e.loaded*1000/(tmptime.getTime()-C_starttime.getTime());
var remaintime = (totalsize-asize-e.loaded)/tmpspeed; var remaintime = (totalsize-asize-e.loaded)/tmpspeed;
label.innerHTML=StartStr+'<!--constStr@Upload--> ' +size_format(asize+e.loaded)+ ' / '+size_format(totalsize) + ' = ' + ((asize+e.loaded)*100/totalsize).toFixed(2) + '% <!--constStr@AverageSpeed-->:'+size_format((asize+e.loaded-newstartsize)*1000/(tmptime.getTime()-StartTime.getTime()))+'/s<br><!--constStr@CurrentSpeed--> '+size_format(tmpspeed)+'/s <!--constStr@Expect--> '+remaintime.toFixed(1)+'s'; label.innerHTML=StartStr+'<!--constStr@Upload--> ' +size_format(asize+e.loaded)+ ' / '+size_format(totalsize) + ' = ' + ((asize+e.loaded)*100/totalsize).toFixed(2) + '% <!--constStr@AverageSpeed-->:'+size_format((asize+e.loaded-newstartsize)*1000/(tmptime.getTime()-StartTime.getTime()))+'/s<br><!--constStr@CurrentSpeed--> '+size_format(tmpspeed)+'/s <!--constStr@Expect--> '+seconds2hour(remaintime.toFixed(1));
} }
} }
var C_starttime = new Date(); var C_starttime = new Date();
@@ -1020,10 +1067,12 @@
} else { } else {
MiddleStr += '<!--constStr@ThisTime--><!--constStr@AverageSpeed-->:'+size_format((totalsize-newstartsize)*1000/(EndTime.getTime()-StartTime.getTime()))+'/s<br>'; MiddleStr += '<!--constStr@ThisTime--><!--constStr@AverageSpeed-->:'+size_format((totalsize-newstartsize)*1000/(EndTime.getTime()-StartTime.getTime()))+'/s<br>';
} }
delete uploading[filename];
while (filename.indexOf('%2F')>0) filename = filename.replace('%2F', '/'); while (filename.indexOf('%2F')>0) filename = filename.replace('%2F', '/');
document.getElementById('upfile_td1_'+tdnum).innerHTML='<div style="color:green"><a href="<!--base_disk_path--><!--Path-->'+filename+'?preview" id="upfile_a_'+tdnum+'" target="_blank">'+document.getElementById('upfile_td1_'+tdnum).innerHTML+'</a><br><a href="<!--base_disk_path--><!--Path-->'+filename+'" id="upfile_a1_'+tdnum+'"></a><!--constStr@UploadComplete--><button onclick="CopyAllDownloadUrl(\'#upfile_a1_'+tdnum+'\');" id="upfile_cpbt_'+tdnum+'" <!--AdminStart--> style="display:none"<!--AdminEnd--> ><!--constStr@CopyUrl--></button></div>'; document.getElementById('upfile_td1_'+tdnum).innerHTML='<div style="color:green"><a href="<!--base_disk_path--><!--Path-->'+filename+'?preview" id="upfile_a_'+tdnum+'" target="_blank">'+document.getElementById('upfile_td1_'+tdnum).innerHTML+'</a><br><a href="<!--base_disk_path--><!--Path-->'+filename+'" id="upfile_a1_'+tdnum+'"></a><!--constStr@UploadComplete--><button onclick="CopyAllDownloadUrl(\'#upfile_a1_'+tdnum+'\');" id="upfile_cpbt_'+tdnum+'" <!--AdminStart--> style="display:none"<!--AdminEnd--> ><!--constStr@CopyUrl--></button></div>';
label.innerHTML=StartStr+MiddleStr; label.innerHTML=StartStr+MiddleStr;
label.style.color='green'; label.style.color='green';
// uploadbuttonshow(); // uploadbuttonshow();
<!--AdminStart--> <!--AdminStart-->
response.name=file.webkitRelativePath||response.name; response.name=file.webkitRelativePath||response.name;
@@ -1032,6 +1081,7 @@
} else { } else {
if (!response['nextExpectedRanges']) { if (!response['nextExpectedRanges']) {
label.innerHTML='<font color="red">'+xhr.responseText+'</font><br>'; label.innerHTML='<font color="red">'+xhr.responseText+'</font><br>';
delete uploading[filename];
} else { } else {
var a=response['nextExpectedRanges'][0]; var a=response['nextExpectedRanges'][0];
asize=Number( a.slice(0,a.indexOf("-")) ); asize=Number( a.slice(0,a.indexOf("-")) );
@@ -1047,12 +1097,332 @@
} else { } else {
label.innerHTML='<font color="red">'+xhr2.responseText+'</font>'; label.innerHTML='<font color="red">'+xhr2.responseText+'</font>';
} }
delete uploading[filename];
// uploadbuttonshow(); // uploadbuttonshow();
} }
} }
} }
} }
<!--UploadJsEnd--> <!--OnedriveUploadJsEnd-->
<!--AliyundriveUploadJsStart-->
function preup() {
uploadbuttonhide();
var files=document.getElementById('upload_file').files;
if (files.length<1) {
uploadbuttonshow();
return;
};
var table1=document.createElement('table');
document.getElementById('upload_div').appendChild(table1);
table1.setAttribute('class','list-table');
var timea=new Date().getTime();
var i=0;
var uploadList = setInterval(function(){
if (i<files.length) {
if (Object.keys(uploading).length<5) {
getuplink(i);
i++;
}// else console.log(Object.keys(uploading).length);
} else clearInterval(uploadList);
}, 1000);
//getuplink(i);
function getuplink(i, r=0) {
var file=files[i];
var td1;
var td2;
if (r==0) {
var tr1=document.createElement('tr');
table1.appendChild(tr1);
tr1.setAttribute('data-to',1);
td1=document.createElement('td');
tr1.appendChild(td1);
td1.setAttribute('style','width:30%;word-break:break-word;');
td1.setAttribute('id','upfile_td1_'+timea+'_'+i);
td1.innerHTML=(file.webkitRelativePath||file.name)+'<br>'+size_format(file.size)+' ('+(i+1)+'/'+files.length+')';
td2=document.createElement('td');
tr1.appendChild(td2);
td2.setAttribute('id','upfile_td2_'+timea+'_'+i);
}
var tdnum = timea+'_'+i;
td1=document.getElementById('upfile_td1_'+tdnum);
td2=document.getElementById('upfile_td2_'+tdnum);
var chunksize=10*1024*1024; // 分块大小
//var chunksize=100*1024; // 测试小块
/*if (file.size>100*1024*1024*1024) {
td2.innerHTML='<font color="red"><!--constStr@UpFileTooLarge--></font>';
uploadbuttonshow();
return;
}*/
var upbigfilename = encodeURIComponent((file.webkitRelativePath||file.name));
uploading[upbigfilename] = [i];
var spark = sha1.create();
var reader = new FileReader();
var chunksize=10*1024*1024;
var asize = 0;
var filesha1;
function readblob(start) {
var end=start+chunksize;
var blob = file.slice(start,end);
reader.readAsArrayBuffer(blob);
}
readblob(asize);
reader.onload = function(e){
td2.innerHTML='<!--constStr@Calculate--> SHA1: '+(asize*100/file.size).toFixed(2)+'%';
var binary = this.result;
spark.update(binary);
asize += chunksize;
if (asize < file.size) {
readblob(asize);
} else {
filesha1 = spark.hex();
td2.innerHTML='SHA1: ' + filesha1;
<!--GuestStart-->
function getext(str) {
let p = str.lastIndexOf('.');
if (p===-1) return '';
if (p===0) return '';
return str.substr(p);
}
var ext = getext(file.webkitRelativePath||file.name);
upbigfilename = filesha1 + ext;
<!--GuestEnd-->
//while (upbigfilename.indexOf('%2F')>0) upbigfilename = upbigfilename.replace('%2F', '/');
td2.innerHTML='<!--constStr@GetUploadLink--> ...';
var html = JSON.parse(localStorage.getItem(filesha1));
//console.log(html);
if (html!==null && ('part_info_list' in html)) {
td2.innerHTML='<!--constStr@UploadStart--> ...';
binupfile(file, html, timea+'_'+i, upbigfilename, filesha1, chunksize);
} else {
var xhr1 = new XMLHttpRequest();
xhr1.open("POST", '?action=upbigfile');
//xhr1.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=utf-8");
xhr1.setRequestHeader('x-requested-with','XMLHttpRequest');
xhr1.onload = function(e){
//console.log(xhr1.status+xhr1.responseText);
td2.innerHTML='<font color="red">'+xhr1.responseText+'</font>';
if (xhr1.status==201) {
if (xhr1.responseText=='') {
getuplink(i,1);
return;
}
var html=JSON.parse(xhr1.responseText);
//console.log(html);
if (!html['part_info_list']) {
if (html.name!='') {
if (html.exist==true) td2.innerHTML=html.name+' 文件名已有';
else if (html.rapid_upload==true) td2.innerHTML=html.name+' 秒传';
else td2.innerHTML='<font color="red">'+xhr1.responseText+'</font><br>';
td1.innerHTML='<div style="color:green"><a href="<!--base_disk_path--><!--Path-->'+upbigfilename+'?preview" id="upfile_a_'+tdnum+'" target="_blank">'+td1.innerHTML+'</a><br><a href="<!--base_disk_path--><!--Path-->'+upbigfilename+'" id="upfile_a1_'+tdnum+'"></a><!--constStr@UploadComplete--><button onclick="CopyAllDownloadUrl(\'#upfile_a1_'+tdnum+'\');" id="upfile_cpbt_'+tdnum+'" <!--AdminStart--> style="display:none"<!--AdminEnd--> ><!--constStr@CopyUrl--></button></div>';
} else {
td2.innerHTML='<font color="red">'+xhr1.responseText+'</font><br>';
}
delete uploading[upbigfilename];
} else {
td2.innerHTML='<!--constStr@UploadStart--> ...';
//console.log(html);
localStorage.setItem(filesha1, JSON.stringify(html));
binupfile(file, html, timea+'_'+i, upbigfilename, filesha1, chunksize);
}
} else {
delete uploading[upbigfilename];
}
/*if (i<files.length-1) {
i++;
getuplink(i);
}*/
}
xhr1.send('upbigfilename='+ upbigfilename +'&filesize='+ file.size +'&filelastModified='+ file.lastModified + '&filesha1=' + filesha1 + '&chunksize=' + chunksize);
}
}
}
}
uploadbuttonshow();
}
function binupfile(file, res, tdnum, filename, filesha1, chunksize) {
// xhr.getResponseHeader
if (!('ETag' in res)) res['ETag'] = new Array();
var fileid = res['file_id'];
var uploadid = res['upload_id'];
var label=document.getElementById('upfile_td2_'+tdnum);
var reader = new FileReader();
var StartStr='';
var MiddleStr='';
var StartTime;
var EndTime;
var newstartsize = 0;
if(!!file){
var chunknum = 0;
var chunknumtotal = res['part_info_list'].length;
var asize=0;
var totalsize=file.size;
var newstartsize=0;
while (res['ETag'][chunknum]!=null) {
chunknum++;
newstartsize += chunksize;
}
StartTime = new Date();
asize = newstartsize;
if (newstartsize==0) {
StartStr='<!--constStr@UploadStartAt-->:' +StartTime.toLocaleString()+'<br>' ;
} else {
StartStr='<!--constStr@LastUpload-->'+size_format(newstartsize)+ '<br><!--constStr@ThisTime--><!--constStr@UploadStartAt-->:' +StartTime.toLocaleString()+'<br>' ;
}
//var chunksize=5*1024*1024; // chunk size, max 60M. 每小块上传大小
//if (totalsize>200*1024*1024) chunksize=10*1024*1024;
function readblob(start) {
var end=start+chunksize;
var blob = file.slice(start,end);
reader.readAsArrayBuffer(blob);
//reader.readAsArrayBuffer(file);
}
readblob(asize);
reader.onload = function(e){
if (asize>totalsize) {
var xhr1 = new XMLHttpRequest();
xhr1.open("POST", '?action=upbigfile');
//xhr1.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=utf-8");
xhr1.setRequestHeader('x-requested-with','XMLHttpRequest');
xhr1.onload = function(e){
console.log(xhr1.responseText+','+xhr1.status);
if (xhr1.status==200) {
localStorage.removeItem(filesha1);
<!--AdminStart-->
var html=JSON.parse(xhr1.responseText);
//response.name=file.webkitRelativePath||response.name;
addelement(html);
<!--AdminEnd-->
/*if (totalsize>10*1024*1024) {
var xhr3 = new XMLHttpRequest();
xhr3.open("GET", '?action=del_upload_cache&filelastModified='+file.lastModified+'&filesize='+file.size+'&filename='+filename);
xhr3.setRequestHeader('x-requested-with','XMLHttpRequest');
xhr3.send(null);
xhr3.onload = function(e){
console.log(xhr3.responseText+','+xhr3.status);
}
}*/
EndTime=new Date();
MiddleStr = '<!--constStr@EndAt-->:'+EndTime.toLocaleString()+'<br>';
if (newstartsize==0) {
MiddleStr += '<!--constStr@AverageSpeed-->:'+size_format(totalsize*1000/(EndTime.getTime()-StartTime.getTime()))+'/s<br>';
} else {
MiddleStr += '<!--constStr@ThisTime--><!--constStr@AverageSpeed-->:'+size_format((totalsize-newstartsize)*1000/(EndTime.getTime()-StartTime.getTime()))+'/s<br>';
}
document.getElementById('upfile_td1_'+tdnum).innerHTML='<div style="color:green"><a href="<!--base_disk_path--><!--Path-->'+filename+'?preview" id="upfile_a_'+tdnum+'" target="_blank">'+document.getElementById('upfile_td1_'+tdnum).innerHTML+'</a><br><a href="<!--base_disk_path--><!--Path-->'+filename+'" id="upfile_a1_'+tdnum+'"></a><!--constStr@UploadComplete--><button onclick="CopyAllDownloadUrl(\'#upfile_a1_'+tdnum+'\');" id="upfile_cpbt_'+tdnum+'" <!--AdminStart--> style="display:none"<!--AdminEnd--> ><!--constStr@CopyUrl--></button></div>';
label.innerHTML=StartStr+MiddleStr;
label.style.color='green';
} else {
label.innerHTML= '<font color="red">' + xhr1.status + ',' + xhr1.responseText + '</font>';
localStorage.removeItem(filesha1);
}
delete uploading[filename];
}
xhr1.send('uploadid=' + uploadid + '&fileid=' + fileid + '&etag=' + JSON.stringify(res['ETag']));
} else {
var binary = this.result;
var xhr = new XMLHttpRequest();
xhr.open("PUT", res['part_info_list'][chunknum]['upload_url'], true);
//xhr.setRequestHeader('x-requested-with','XMLHttpRequest');
bsize=asize+e.loaded-1;
xhr.setRequestHeader('Content-Range', 'bytes ' + asize + '-' + bsize +'/'+ totalsize);
xhr.upload.onprogress = function(e){
if (e.lengthComputable) {
var tmptime = new Date();
var tmpspeed = e.loaded*1000/(tmptime.getTime()-C_starttime.getTime());
var remaintime = (totalsize-asize-e.loaded)/tmpspeed;
label.innerHTML=StartStr+'<!--constStr@Upload--> ' +size_format(asize+e.loaded)+ ' / '+size_format(totalsize) + ' = ' + ((asize+e.loaded)*100/totalsize).toFixed(2) + '% <!--constStr@AverageSpeed-->:'+size_format((asize+e.loaded-newstartsize)*1000/(tmptime.getTime()-StartTime.getTime()))+'/s<br><!--constStr@CurrentSpeed--> '+size_format(tmpspeed)+'/s <!--constStr@Expect--> '+seconds2hour(remaintime.toFixed(1));
}
}
var C_starttime = new Date();
xhr.onload = function(e){
if (xhr.status<500) {
//console.log(xhr.responseText);
//console.log(xhr.getResponseHeader('ETag'));
//var response=JSON.parse(xhr.responseText);
if (xhr.responseText==''&&xhr.getResponseHeader('ETag')!='') {
// 有ETag说明本段上传成功
let etag = xhr.getResponseHeader('ETag');
//if (etag.substr(0,1)=='"') etag = etag.substr(1);还就要引号!
//if (etag.substr(-1)=='"') etag = etag.substr(0, etag.length-1);
res['ETag'][chunknum] = etag;
localStorage.setItem(filesha1, JSON.stringify(res));
chunknum++;
asize = bsize + 1;
if (chunknum==chunknumtotal) {
// 上传结束
var xhr1 = new XMLHttpRequest();
xhr1.open("POST", '?action=upbigfile');
//xhr1.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=utf-8");
xhr1.setRequestHeader('x-requested-with','XMLHttpRequest');
xhr1.onload = function(e){
console.log(xhr1.responseText+','+xhr1.status);
if (xhr1.status==200) {
localStorage.removeItem(filesha1);
<!--AdminStart-->
var html=JSON.parse(xhr1.responseText);
//response.name=file.webkitRelativePath||response.name;
addelement(html);
<!--AdminEnd-->
/*if (totalsize>10*1024*1024) {
var xhr3 = new XMLHttpRequest();
xhr3.open("GET", '?action=del_upload_cache&filelastModified='+file.lastModified+'&filesize='+file.size+'&filename='+filename);
xhr3.setRequestHeader('x-requested-with','XMLHttpRequest');
xhr3.send(null);
xhr3.onload = function(e){
console.log(xhr3.responseText+','+xhr3.status);
}
}*/
EndTime=new Date();
MiddleStr = '<!--constStr@EndAt-->:'+EndTime.toLocaleString()+'<br>';
if (newstartsize==0) {
MiddleStr += '<!--constStr@AverageSpeed-->:'+size_format(totalsize*1000/(EndTime.getTime()-StartTime.getTime()))+'/s<br>';
} else {
MiddleStr += '<!--constStr@ThisTime--><!--constStr@AverageSpeed-->:'+size_format((totalsize-newstartsize)*1000/(EndTime.getTime()-StartTime.getTime()))+'/s<br>';
}
document.getElementById('upfile_td1_'+tdnum).innerHTML='<div style="color:green"><a href="<!--base_disk_path--><!--Path-->'+filename+'?preview" id="upfile_a_'+tdnum+'" target="_blank">'+document.getElementById('upfile_td1_'+tdnum).innerHTML+'</a><br><a href="<!--base_disk_path--><!--Path-->'+filename+'" id="upfile_a1_'+tdnum+'"></a><!--constStr@UploadComplete--><button onclick="CopyAllDownloadUrl(\'#upfile_a1_'+tdnum+'\');" id="upfile_cpbt_'+tdnum+'" <!--AdminStart--> style="display:none"<!--AdminEnd--> ><!--constStr@CopyUrl--></button></div>';
label.innerHTML=StartStr+MiddleStr;
label.style.color='green';
} else {
label.innerHTML= '<font color="red">' + xhr1.status + ',' + xhr1.responseText + '</font>';
localStorage.removeItem(filesha1);
}
delete uploading[filename];
}
xhr1.send('uploadid=' + uploadid + '&fileid=' + fileid + '&etag=' + JSON.stringify(res['ETag']));
// uploadbuttonshow();
} else {
readblob(asize);
}
} else {
console.log(xhr.status+xhr.responseText);//<PartEtag>
if (xhr.status==409) {
let str = xhr.responseText;
str = str.substr(str.indexOf('<PartEtag>')+10);
str = str.substr(0, str.indexOf('</PartEtag>'));
res['ETag'][chunknum] = str;
localStorage.setItem(filesha1, JSON.stringify(res));
chunknum++;
asize += chunksize;
readblob(asize);
} else {
delete uploading[filename];
}
//label.innerHTML='<font color="red">'+xhr.responseText+'</font><br>';
} } else readblob(asize);
}
xhr.send(binary);
}
}
}
}
<!--AliyundriveUploadJsEnd-->
<!--GoogledriveUploadJsStart-->
function preup() {
alert("Stop!\nCan not upload form explorer without token.");
}
<!--GoogledriveUploadJsEnd-->
<!--ListEnd--> <!--ListEnd-->
function operatediv_close(operate) { function operatediv_close(operate) {
document.getElementById(operate+'_div').style.display='none'; document.getElementById(operate+'_div').style.display='none';
@@ -1060,7 +1430,10 @@
} }
<!--AdminStart--> <!--AdminStart-->
function logout() { function logout() {
document.cookie = "admin=; path=/"; var expd = new Date();
expd.setTime(expd.getTime()+1000);
var expires = "expires="+expd.toGMTString();
document.cookie = "admin=; path=/; "+expires;
location.href = location.href; location.href = location.href;
} }
<!--IsFolderStart--> <!--IsFolderStart-->
@@ -1074,16 +1447,19 @@
document.getElementById('mask').style.height=document.documentElement.scrollHeight<window.innerHeight?window.innerHeight:document.documentElement.scrollHeight+'px'; document.getElementById('mask').style.height=document.documentElement.scrollHeight<window.innerHeight?window.innerHeight:document.documentElement.scrollHeight+'px';
if (num=='') { if (num=='') {
var str=''; var str='';
var fileid='';
} else { } else {
var str=decodeURIComponent(document.getElementById('file_a'+num).href); var str=decodeURIComponent(document.getElementById('file_a'+num).href);
if (str.substr(-1)==' ') str=str.substr(0, str.length-1); if (str.substr(-1)==' ') str=str.substr(0, str.length-1);
if (str.substr(-1)=='/') str=str.substr(0, str.length-1); if (str.substr(-1)=='/') str=str.substr(0, str.length-1);
if (str.substr(-8)=='?preview') str=str.substr(0, str.length-8); if (str.substr(-8)=='?preview') str=str.substr(0, str.length-8);
if (str.lastIndexOf('/')>-1) str=str.substr(str.lastIndexOf('/')+1); if (str.lastIndexOf('/')>-1) str=str.substr(str.lastIndexOf('/')+1);
var fileid=document.getElementById('file_a'+num).attributes['fileid'].nodeValue;
} }
document.getElementById(action + '_div').style.display=''; document.getElementById(action + '_div').style.display='';
document.getElementById(action + '_label').innerText=str;//.replace(/&/,'&amp;'); document.getElementById(action + '_label').innerText=str;//.replace(/&/,'&amp;');
document.getElementById(action + '_sid').value=num; document.getElementById(action + '_sid').value=num;
document.getElementById(action + '_fileid').value=fileid;
document.getElementById(action + '_hidden').value=str; document.getElementById(action + '_hidden').value=str;
if (action=='rename') document.getElementById(action + '_input').value=str; if (action=='rename') document.getElementById(action + '_input').value=str;
var $e = event || window.event; var $e = event || window.event;
@@ -1113,6 +1489,7 @@
var num=document.getElementById(str+'_sid').value; var num=document.getElementById(str+'_sid').value;
var xhr = new XMLHttpRequest(); var xhr = new XMLHttpRequest();
xhr.open("POST", ''); xhr.open("POST", '');
xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=utf-8");
xhr.setRequestHeader('x-requested-with', 'XMLHttpRequest'); xhr.setRequestHeader('x-requested-with', 'XMLHttpRequest');
xhr.onload = function(e){ xhr.onload = function(e){
var html; var html;
@@ -1129,6 +1506,7 @@
html=JSON.parse(xhr.responseText); html=JSON.parse(xhr.responseText);
addelement(html); addelement(html);
} }
//alert('success');
} else alert(xhr.status+'\n'+xhr.responseText); } else alert(xhr.status+'\n'+xhr.responseText);
document.getElementById(str+'_div').style.display='none'; document.getElementById(str+'_div').style.display='none';
document.getElementById('mask').style.display='none'; document.getElementById('mask').style.display='none';
@@ -1147,15 +1525,16 @@
a1.target='_blank'; a1.target='_blank';
var td2=document.createElement('td'); var td2=document.createElement('td');
td2.setAttribute('class','updated_at'); td2.setAttribute('class','updated_at');
td2.innerText=html.lastModifiedDateTime.replace(/T/,' ').replace(/Z/,''); if (!!html.time) td2.innerText=html.time.replace(/T/,' ').replace(/Z/,'');
var td3=document.createElement('td'); var td3=document.createElement('td');
td3.setAttribute('class','size'); td3.setAttribute('class','size');
td3.innerText=size_format(html.size); if (!!html.size) td3.innerText=size_format(html.size);
if (!!html.folder) { else td3.innerText='0 B';
if (html.type=='folder') {
a1.href+='/'; a1.href+='/';
document.getElementById('tr0').parentNode.insertBefore(tr1,document.getElementById('tr0').nextSibling); document.getElementById('tr0').parentNode.insertBefore(tr1,document.getElementById('tr0').nextSibling);
} }
if (!!html.file) { if (html.type=='file') {
a1.href+='?preview'; a1.href+='?preview';
a1.name='filelist'; a1.name='filelist';
document.getElementById('tr0').parentNode.appendChild(tr1); document.getElementById('tr0').parentNode.appendChild(tr1);
@@ -1229,21 +1608,11 @@
} }
<!--IsFolderEnd--> <!--IsFolderEnd-->
<!--AdminEnd--> <!--AdminEnd-->
<!--LoginStart-->
function login() {
document.getElementById('mask').style.display='';
//document.getElementById('mask').style.width=document.documentElement.scrollWidth+'px';
document.getElementById('mask').style.height=document.documentElement.scrollHeight<window.innerHeight?window.innerHeight:document.documentElement.scrollHeight+'px';
document.getElementById('login_div').style.display='';
document.getElementById('login_div').style.left=(document.body.clientWidth-document.getElementById('login_div').offsetWidth)/2 +'px';
document.getElementById('login_div').style.top=(window.innerHeight-document.getElementById('login_div').offsetHeight)/2+document.body.scrollTop +'px';
document.getElementById('login_input').focus();
}
<!--LoginEnd-->
<!--EncryptedStart--> <!--EncryptedStart-->
document.getElementById('password1').focus(); document.getElementById('password1').focus();
<!--EncryptedEnd--> <!--EncryptedEnd-->
</script> </script>
<script src="//unpkg.zhimg.com/ionicons@4.4.4/dist/ionicons.js"></script> <script src="//unpkg.zhimg.com/ionicons@4.4.4/dist/ionicons.js"></script>
<!--LoginStart--><script src="https://cdn.bootcss.com/js-sha1/0.6.0/sha1.min.js"></script><!--LoginEnd-->
<!--customScript--> <!--customScript-->
</html> </html>
-1289
View File
File diff suppressed because it is too large Load Diff
-1283
View File
File diff suppressed because it is too large Load Diff
-1544
View File
File diff suppressed because it is too large Load Diff
+490 -149
View File
@@ -45,7 +45,9 @@
background-image: url('<!--BackgroundUrl-->'); background-image: url('<!--BackgroundUrl-->');
background-size: cover; background-size: cover;
background-repeat: no-repeat; background-repeat: no-repeat;
height: 100%; background-attachment: fixed;
background-position: center;
height: 100vh;
<!--BackgroundEnd--> <!--BackgroundEnd-->
} }
@@ -677,13 +679,17 @@ return false;
<!--MdRequireStart--><link rel="stylesheet" href="//unpkg.zhimg.com/github-markdown-css@3.0.1/github-markdown.css"> <!--MdRequireStart--><link rel="stylesheet" href="//unpkg.zhimg.com/github-markdown-css@3.0.1/github-markdown.css">
<script type="text/javascript" src="//unpkg.zhimg.com/marked@0.6.2/marked.min.js"></script><!--MdRequireEnd--> <script type="text/javascript" src="//unpkg.zhimg.com/marked@0.6.2/marked.min.js"></script><!--MdRequireEnd-->
<!--GuestUploadStart--><script type="text/javascript" src="//cdn.bootcss.com/spark-md5/3.0.0/spark-md5.min.js"></script><!--GuestUploadEnd--> <!--GuestUploadStart--><script type="text/javascript" src="//cdn.bootcss.com/spark-md5/3.0.0/spark-md5.min.js"></script><!--GuestUploadEnd-->
<!--AliyundriveUploadJsStart--><script src="//cdn.bootcdn.net/ajax/libs/js-sha1/0.6.0/sha1.min.js"></script><!--AliyundriveUploadJsEnd-->
<!--IsFileStart--><!--IspdfFileStart--><script src="//cdn.bootcss.com/pdf.js/2.3.200/pdf.min.js"></script><!--IspdfFileEnd--><!--IsFileEnd--> <!--IsFileStart--><!--IspdfFileStart--><script src="//cdn.bootcss.com/pdf.js/2.3.200/pdf.min.js"></script><!--IspdfFileEnd--><!--IsFileEnd-->
<!--ListEnd--> <!--ListEnd-->
<script type="text/javascript"> <script type="text/javascript">
function changelanguage(str) function changelanguage(str)
{ {
if (str=='Language') str = ''; if (str=='Language') str = '';
document.cookie='language='+str+'; path=/'; var expd = new Date();
expd.setTime(expd.getTime()+(2*60*60*1000));
var expires = "expires="+expd.toGMTString();
document.cookie='language='+str+'; path=/; '+expires;
location.href = location.href; location.href = location.href;
} }
<!--ListStart--> <!--ListStart-->
@@ -790,14 +796,20 @@ return false;
}); });
} }
} }
addVideos(['<!--FileDownUrl-->']); addVideos(['<!--FileEncodeUrl-->']);
<!--IsvideoFileEnd--> <!--IsvideoFileEnd-->
<!--IspdfFileStart--> <!--IspdfFileStart-->
pdfjsLib.GlobalWorkerOptions.workerSrc = '//cdn.bootcss.com/pdf.js/2.3.200/pdf.worker.min.js'; pdfjsLib.GlobalWorkerOptions.workerSrc = '//cdn.bootcss.com/pdf.js/2.3.200/pdf.worker.min.js';
var loadingTask = pdfjsLib.getDocument({ url: '<!--FileDownUrl-->', }); var loadingTask = pdfjsLib.getDocument({
url: '<!--FileDownUrl-->',
cMapUrl: "//cdn.jsdelivr.net/npm/pdfjs-dist@2.2.228/cmaps/",
cMapPacked: true,
rangeChunkSize: 65535
});
loadingTask.promise.then(function(pdf) { loadingTask.promise.then(function(pdf) {
var pagenum = pdf.numPages; var pagenum = pdf.numPages;
var pdfContainer = document.getElementById('pdf-d'); var pdfContainer = document.getElementById('pdf-d');
pdfContainer.innerHTML = '';
for (var i=1;i<=pagenum;i++) { for (var i=1;i<=pagenum;i++) {
var canvasNew = document.createElement('canvas'); var canvasNew = document.createElement('canvas');
canvasNew.id = 'pdf-c'+i; canvasNew.id = 'pdf-c'+i;
@@ -829,7 +841,6 @@ return false;
if ($head) { if ($head) {
//document.getElementById('head-div').parentNode.insertBefore(document.getElementById('head-div'),document.getElementById('list-div')); //document.getElementById('head-div').parentNode.insertBefore(document.getElementById('head-div'),document.getElementById('list-div'));
$head.innerHTML = marked(document.getElementById('head-md').innerText); $head.innerHTML = marked(document.getElementById('head-md').innerText);
} }
<!--HeadmdEnd--> <!--HeadmdEnd-->
<!--ReadmemdStart--> <!--ReadmemdStart-->
@@ -840,29 +851,35 @@ return false;
<!--ReadmemdEnd--> <!--ReadmemdEnd-->
<!--ShowThumbnailsStart--> <!--ShowThumbnailsStart-->
function showthumbnails(obj) { function showthumbnails(obj) {
images = [<!--ImgExts-->];
var files=document.getElementsByName('filelist'); var files=document.getElementsByName('filelist');
for ($i=0;$i<files.length;$i++) { for ($i=0;$i<files.length;$i++) {
str=files[$i].innerText; str=files[$i].innerText;
if (str.substr(-1)==' ') str=str.substr(0,str.length-1); if (str.substr(-1)==' ') str=str.substr(0,str.length-1);
if (!str) return; if (!str) continue;
strarry=str.split('.'); strarry=str.split('.');
ext=strarry[strarry.length-1].toLowerCase(); ext=strarry[strarry.length-1].toLowerCase();
images = [<!--ImgExts-->]; if (images.indexOf(ext)>-1) {
if (images.indexOf(ext)>-1) get_thumbnails_url(str, files[$i]); var url=files[$i].href;
url=url.substr(0,url.length-8);
if (document.getElementById('originalpic').checked==true) {
files[$i].parentNode.parentNode.innerHTML='<td colspan="3"><img src="'+url+'" alt="'+str+'" onload="if (this.offsetWidth>document.getElementById(\'list-div\').offsetWidth) this.style.width=\'100%\';"></td>';
$i--;
} else {
url+='?thumbnails';
get_thumbnails_url(url, str, files[$i]);
}
}
} }
obj.disabled='disabled'; obj.disabled='disabled';
} }
function get_thumbnails_url(str, filea) { function get_thumbnails_url(url, name, filea) {
if (!str) return;
var nurl=window.location.href;
if (nurl.substr(-1)!="/") nurl+="/";
var xhr = new XMLHttpRequest(); var xhr = new XMLHttpRequest();
xhr.open("GET", nurl+str+'?thumbnails', true); xhr.open("GET", url, true);
//xhr.setRequestHeader('x-requested-with','XMLHttpRequest');
xhr.send(''); xhr.send('');
xhr.onload = function(e){ xhr.onload = function(e){
if (xhr.status==200) { if (xhr.status==200) {
if (xhr.responseText!='') filea.innerHTML='<img src="'+xhr.responseText+'" alt="'+str+'">'; if (xhr.responseText!='') filea.innerHTML='<img src="'+xhr.responseText+'" alt="'+name+'">';
} else console.log(xhr.status+'\n'+xhr.responseText); } else console.log(xhr.status+'\n'+xhr.responseText);
} }
} }
@@ -986,76 +1003,6 @@ return false;
alert(tmptextarea.innerHTML+"<!--constStr@Success-->"); alert(tmptextarea.innerHTML+"<!--constStr@Success-->");
} }
<!--UploadJsStart--> <!--UploadJsStart-->
function uploadbuttonhide() {
document.getElementById('upload_btns').style.display='none';
/*document.getElementById('upload_submit').disabled='disabled';
document.getElementById('upload_file').disabled='disabled';
document.getElementById('upload_submit').style.display='none';
document.getElementById('upload_file').style.display='none';*/
}
function uploadbuttonshow() {
document.getElementById('upload_btns').style.display='';
/*document.getElementById('upload_file').disabled='';
document.getElementById('upload_submit').disabled='';
document.getElementById('upload_submit').style.display='';
document.getElementById('upload_file').style.display='';*/
}
function preup() {
uploadbuttonhide();
var files=document.getElementById('upload_file').files;
if (files.length<1) {
uploadbuttonshow();
return;
};
var table1=document.createElement('table');
document.getElementById('uploading_div').appendChild(table1);
table1.setAttribute('class','list-table');
var timea=new Date().getTime();
var i=0;
getuplink(i);
function getuplink(i) {
var file=files[i];
var tr1=document.createElement('tr');
table1.appendChild(tr1);
tr1.setAttribute('data-to',1);
var td1=document.createElement('td');
tr1.appendChild(td1);
td1.setAttribute('style','width:30%');
td1.setAttribute('id','upfile_td1_'+timea+'_'+i);
td1.innerHTML=(file.webkitRelativePath||file.name)+'<br>'+size_format(file.size);
var td2=document.createElement('td');
tr1.appendChild(td2);
td2.setAttribute('id','upfile_td2_'+timea+'_'+i);
td2.innerHTML='<!--constStr@GetUploadLink--> ...';
if (file.size>100*1024*1024*1024) {
td2.innerHTML='<font color="red"><!--constStr@UpFileTooLarge--></font>';
uploadbuttonshow();
return;
}
var xhr1 = new XMLHttpRequest();
xhr1.open("GET", '?action=upbigfile&upbigfilename='+ encodeURIComponent((file.webkitRelativePath||file.name)) +'&filesize='+ file.size +'&lastModified='+ file.lastModified);
xhr1.setRequestHeader('x-requested-with','XMLHttpRequest');
xhr1.send(null);
xhr1.onload = function(e){
td2.innerHTML='<font color="red">'+xhr1.responseText+'</font>';
if (xhr1.status==200) {
console.log(xhr1.responseText);
var html=JSON.parse(xhr1.responseText);
if (!html['uploadUrl']) {
td2.innerHTML='<font color="red">'+xhr1.responseText+'</font><br>';
uploadbuttonshow();
} else {
td2.innerHTML='<!--constStr@UploadStart--> ...';
binupfile(file,html['uploadUrl'],timea+'_'+i);
}
}
if (i<files.length-1) {
i++;
getuplink(i);
}
}
}
}
function size_format(num) { function size_format(num) {
if (num>1024) { if (num>1024) {
num=num/1024; num=num/1024;
@@ -1074,7 +1021,145 @@ return false;
} }
return num.toFixed(2) + ' GB'; return num.toFixed(2) + ' GB';
} }
function binupfile(file,url,tdnum){ function uploadbuttonhide() {
document.getElementById('upload_btns').style.display='none';
/*document.getElementById('upload_submit').disabled='disabled';
document.getElementById('upload_file').disabled='disabled';
document.getElementById('upload_submit').style.display='none';
document.getElementById('upload_file').style.display='none';*/
}
function uploadbuttonshow() {
document.getElementById('upload_btns').style.display='';
/*document.getElementById('upload_file').disabled='';
document.getElementById('upload_submit').disabled='';
document.getElementById('upload_submit').style.display='';
document.getElementById('upload_file').style.display='';*/
}
<!--UploadJsEnd-->
<!--OnedriveUploadJsStart-->
function preup() {
uploadbuttonhide();
var files=document.getElementById('upload_file').files;
if (files.length<1) {
uploadbuttonshow();
return;
};
var table1=document.createElement('table');
document.getElementById('upload_div').appendChild(table1);
table1.setAttribute('class','list-table');
var timea=new Date().getTime();
var i=0;
getuplink(i);
function getuplink(i, r=0) {
var file=files[i];
var td1;
var td2;
if (r==0) {
var tr1=document.createElement('tr');
table1.appendChild(tr1);
tr1.setAttribute('data-to',1);
td1=document.createElement('td');
tr1.appendChild(td1);
td1.setAttribute('style','width:30%;word-break:break-word;');
td1.setAttribute('id','upfile_td1_'+timea+'_'+i);
td1.innerHTML=(file.webkitRelativePath||file.name)+'<br>'+size_format(file.size);
td2=document.createElement('td');
tr1.appendChild(td2);
td2.setAttribute('id','upfile_td2_'+timea+'_'+i);
}
var tdnum = timea+'_'+i;
td1=document.getElementById('upfile_td1_'+tdnum);
td2=document.getElementById('upfile_td2_'+tdnum);
if (file.size>100*1024*1024*1024) {
td2.innerHTML='<font color="red"><!--constStr@UpFileTooLarge--></font>';
uploadbuttonshow();
return;
}
var upbigfilename = encodeURIComponent((file.webkitRelativePath||file.name));
var filemd5='';
<!--GuestStart-->
function getext(str) {
strarry=str.split('.');
if (strarry.length==1) return '';
ext=strarry[strarry.length-1].toLowerCase();
var reg = new RegExp(".","g");
var a = str.replace(reg,"");
if (a == ext) ext = "";
else ext = "." + ext;
return ext;
}
var ext = getext(file.webkitRelativePath||file.name);
var spark = new SparkMD5.ArrayBuffer();
var reader = new FileReader();
var chunksize=10*1024*1024;
var asize = 0;
function readblob(start) {
var end=start+chunksize;
var blob = file.slice(start,end);
reader.readAsArrayBuffer(blob);
}
readblob(asize);
reader.onload = function(e){
td2.innerHTML='<!--constStr@Calculate--> md5: '+(asize*100/file.size).toFixed(2)+'%';
var binary = this.result;
spark.append(binary);
asize += chunksize;
if (asize < file.size) {
readblob(asize);
} else {
filemd5 = spark.end();
td2.innerHTML='md5: '+filemd5;
upbigfilename = filemd5+ext;
<!--GuestEnd-->
td2.innerHTML='<!--constStr@GetUploadLink--> ...';
var xhr1 = new XMLHttpRequest();
xhr1.open("POST", '?action=upbigfile');
xhr1.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=utf-8");
xhr1.setRequestHeader('x-requested-with','XMLHttpRequest');
xhr1.onprogress = function(e){
td2.innerHTML+='.';
}
xhr1.onload = function(e){
//console.log(xhr1.status+xhr1.responseText);
td2.innerHTML='<font color="red">'+xhr1.responseText+'</font>';
if (xhr1.status==409) {
// td2.innerHTML='nameAlreadyExists';
var html=JSON.parse(xhr1.responseText);
td2.innerHTML=html['error']['code']+': '+html['error']['message'];
<!--GuestStart-->
td2.innerHTML='md5: '+filemd5;
<!--GuestEnd-->
td1.innerHTML='<div style="color:green"><a href="<!--base_disk_path--><!--Path-->'+(file.webkitRelativePath||file.name)+'?preview" id="upfile_a_'+tdnum+'" target="_blank">'+td1.innerHTML+'</a><br><a href="<!--base_disk_path--><!--Path-->'+(file.webkitRelativePath||file.name)+'" id="upfile_a1_'+tdnum+'"></a><!--constStr@UploadComplete--><button onclick="CopyAllDownloadUrl(\'#upfile_a1_'+tdnum+'\');" id="upfile_cpbt_'+tdnum+'" <!--AdminStart--> style="display:none"<!--AdminEnd--> ><!--constStr@CopyUrl--></button></div>';
}
if (xhr1.status==200) {
if (xhr1.responseText=='') {
getuplink(i,1);
return;
}
var html=JSON.parse(xhr1.responseText);
if (!html['uploadUrl']) {
td2.innerHTML='<font color="red">'+xhr1.responseText+'</font><br>';
} else {
td2.innerHTML='<!--constStr@UploadStart--> ...';
binupfile(file,html['uploadUrl'],timea+'_'+i, upbigfilename);
}
}
if (i<files.length-1) {
i++;
getuplink(i);
}
}
xhr1.send('upbigfilename='+ encodeURIComponent(upbigfilename) +'&filesize='+ file.size +'&filelastModified='+ file.lastModified +'&filemd5='+ filemd5);
<!--GuestStart-->
}
}
<!--GuestEnd-->
}
uploadbuttonshow();
}
function binupfile(file,url,tdnum,filename){
var label=document.getElementById('upfile_td2_'+tdnum); var label=document.getElementById('upfile_td2_'+tdnum);
var reader = new FileReader(); var reader = new FileReader();
var StartStr=''; var StartStr='';
@@ -1095,9 +1180,7 @@ return false;
var a = html['nextExpectedRanges'][0]; var a = html['nextExpectedRanges'][0];
newstartsize = Number( a.slice(0,a.indexOf("-")) ); newstartsize = Number( a.slice(0,a.indexOf("-")) );
StartTime = new Date(); StartTime = new Date();
<!--AdminStart-->
asize = newstartsize; asize = newstartsize;
<!--AdminEnd-->
if (newstartsize==0) { if (newstartsize==0) {
StartStr='<!--constStr@UploadStartAt-->:' +StartTime.toLocaleString()+'<br>' ; StartStr='<!--constStr@UploadStartAt-->:' +StartTime.toLocaleString()+'<br>' ;
} else { } else {
@@ -1111,19 +1194,9 @@ return false;
reader.readAsArrayBuffer(blob); reader.readAsArrayBuffer(blob);
} }
readblob(asize); readblob(asize);
<!--LoginStart-->
var spark = new SparkMD5.ArrayBuffer();
<!--LoginEnd-->
reader.onload = function(e){ reader.onload = function(e){
var binary = this.result; var binary = this.result;
<!--LoginStart-->
spark.append(binary);
if (asize < newstartsize) {
asize += chunksize;
readblob(asize);
return;
}
<!--LoginEnd-->
var xhr = new XMLHttpRequest(); var xhr = new XMLHttpRequest();
xhr.open("PUT", url, true); xhr.open("PUT", url, true);
//xhr.setRequestHeader('x-requested-with','XMLHttpRequest'); //xhr.setRequestHeader('x-requested-with','XMLHttpRequest');
@@ -1143,39 +1216,15 @@ return false;
var response=JSON.parse(xhr.responseText); var response=JSON.parse(xhr.responseText);
if (response['size']>0) { if (response['size']>0) {
// contain size, upload finish. 有size说明是最终返回,上传结束 // contain size, upload finish. 有size说明是最终返回,上传结束
if (totalsize>10*1024*1024) {
var xhr3 = new XMLHttpRequest(); var xhr3 = new XMLHttpRequest();
xhr3.open("GET", '?action=del_upload_cache&filelastModified='+file.lastModified+'&filesize='+file.size+'&filename='+encodeURIComponent((file.webkitRelativePath||file.name))); xhr3.open("GET", '?action=del_upload_cache&filelastModified='+file.lastModified+'&filesize='+file.size+'&filename='+filename);
xhr3.setRequestHeader('x-requested-with','XMLHttpRequest'); xhr3.setRequestHeader('x-requested-with','XMLHttpRequest');
xhr3.send(null); xhr3.send(null);
xhr3.onload = function(e){ xhr3.onload = function(e){
console.log(xhr3.responseText+','+xhr3.status); console.log(xhr3.responseText+','+xhr3.status);
} }
<!--LoginStart-->
var filemd5 = spark.end();
var xhr4 = new XMLHttpRequest();
xhr4.open("GET", '?action=uploaded_rename&filename='+encodeURIComponent((file.webkitRelativePath||file.name))+'&filemd5='+filemd5);
xhr4.setRequestHeader('x-requested-with','XMLHttpRequest');
xhr4.send(null);
xhr4.onload = function(e){
console.log(xhr4.responseText+','+xhr4.status);
var filename;
//if (xhr4.status==200) filename = JSON.parse(xhr4.responseText)['name'];
//if (xhr4.status==409) filename = filemd5 + (file.webkitRelativePath||file.name).substr((file.webkitRelativePath||file.name).indexOf('.'));
filename = JSON.parse(xhr4.responseText)['name'];
if (filename=='') {
alert('<!--constStr@UploadErrorUpAgain-->');
uploadbuttonshow();
return;
} }
var lasturl = location.href;
if (lasturl.substr(lasturl.length-1)!='/') lasturl += '/';
lasturl += filename + '?preview';
//window.open(lasturl);
document.getElementById('upfile_a_'+tdnum).href = lasturl;
document.getElementById('upfile_a1_'+tdnum).href = filename;
document.getElementById('upfile_cpbt_'+tdnum).style.display = "";
}
<!--LoginEnd-->
EndTime=new Date(); EndTime=new Date();
MiddleStr = '<!--constStr@EndAt-->:'+EndTime.toLocaleString()+'<br>'; MiddleStr = '<!--constStr@EndAt-->:'+EndTime.toLocaleString()+'<br>';
if (newstartsize==0) { if (newstartsize==0) {
@@ -1183,10 +1232,13 @@ return false;
} else { } else {
MiddleStr += '<!--constStr@ThisTime--><!--constStr@AverageSpeed-->:'+size_format((totalsize-newstartsize)*1000/(EndTime.getTime()-StartTime.getTime()))+'/s<br>'; MiddleStr += '<!--constStr@ThisTime--><!--constStr@AverageSpeed-->:'+size_format((totalsize-newstartsize)*1000/(EndTime.getTime()-StartTime.getTime()))+'/s<br>';
} }
document.getElementById('upfile_td1_'+tdnum).innerHTML='<div style="color:green"><a href="<!--base_disk_path-->'+response.name+'?preview" id="upfile_a_'+tdnum+'" target="_blank">'+document.getElementById('upfile_td1_'+tdnum).innerHTML+'</a><br><a href="<!--base_disk_path-->'+response.name+'" id="upfile_a1_'+tdnum+'"></a><!--constStr@UploadComplete--><button onclick="CopyAllDownloadUrl(\'#upfile_a1_'+tdnum+'\');" id="upfile_cpbt_'+tdnum+'" <!--AdminStart--> style="display:none"<!--AdminEnd--> ><!--constStr@CopyUrl--></button></div>'; while (filename.indexOf('%2F')>0) filename = filename.replace('%2F', '/');
document.getElementById('upfile_td1_'+tdnum).innerHTML='<div style="color:green"><a href="<!--base_disk_path--><!--Path-->'+filename+'?preview" id="upfile_a_'+tdnum+'" target="_blank">'+document.getElementById('upfile_td1_'+tdnum).innerHTML+'</a><br><a href="<!--base_disk_path--><!--Path-->'+filename+'" id="upfile_a1_'+tdnum+'"></a><!--constStr@UploadComplete--><button onclick="CopyAllDownloadUrl(\'#upfile_a1_'+tdnum+'\');" id="upfile_cpbt_'+tdnum+'" <!--AdminStart--> style="display:none"<!--AdminEnd--> ><!--constStr@CopyUrl--></button></div>';
label.innerHTML=StartStr+MiddleStr; label.innerHTML=StartStr+MiddleStr;
uploadbuttonshow(); label.style.color='green';
// uploadbuttonshow();
<!--AdminStart--> <!--AdminStart-->
response.name=file.webkitRelativePath||response.name;
addelement(response); addelement(response);
<!--AdminEnd--> <!--AdminEnd-->
} else { } else {
@@ -1202,17 +1254,299 @@ return false;
xhr.send(binary); xhr.send(binary);
} }
} else { } else {
if (window.location.pathname.indexOf('%23')>0||(file.webkitRelativePath||file.name).indexOf('%23')>0) { if (window.location.pathname.indexOf('%23')>0||filename.indexOf('%23')>0) {
label.innerHTML='<font color="red"><!--constStr@UploadFail23--></font>'; label.innerHTML='<font color="red"><!--constStr@UploadFail23--></font>';
} else { } else {
label.innerHTML='<font color="red">'+xhr2.responseText+'</font>'; label.innerHTML='<font color="red">'+xhr2.responseText+'</font>';
} }
// uploadbuttonshow();
}
}
}
}
<!--OnedriveUploadJsEnd-->
<!--AliyundriveUploadJsStart-->
function preup() {
uploadbuttonhide();
var files=document.getElementById('upload_file').files;
if (files.length<1) {
uploadbuttonshow();
return;
};
var table1=document.createElement('table');
document.getElementById('upload_div').appendChild(table1);
table1.setAttribute('class','list-table');
var timea=new Date().getTime();
var i=0;
getuplink(i);
function getuplink(i, r=0) {
var file=files[i];
var td1;
var td2;
if (r==0) {
var tr1=document.createElement('tr');
table1.appendChild(tr1);
tr1.setAttribute('data-to',1);
td1=document.createElement('td');
tr1.appendChild(td1);
td1.setAttribute('style','width:30%;word-break:break-word;');
td1.setAttribute('id','upfile_td1_'+timea+'_'+i);
td1.innerHTML=(file.webkitRelativePath||file.name)+'<br>'+size_format(file.size);
td2=document.createElement('td');
tr1.appendChild(td2);
td2.setAttribute('id','upfile_td2_'+timea+'_'+i);
}
var tdnum = timea+'_'+i;
td1=document.getElementById('upfile_td1_'+tdnum);
td2=document.getElementById('upfile_td2_'+tdnum);
var chunksize=10*1024*1024; // 分块大小
//var chunksize=100*1024; // 测试小块
/*if (file.size>100*1024*1024*1024) {
td2.innerHTML='<font color="red"><!--constStr@UpFileTooLarge--></font>';
uploadbuttonshow();
return;
}*/
var upbigfilename = encodeURIComponent((file.webkitRelativePath||file.name));
var reader = new FileReader();
reader.onprogress = function(e) {
td2.innerText = '计算SHA1... ' + (e.loaded*100/file.size).toFixed(2) + " %";
}
reader.onload = function(e) {
var filesha1 = sha1(this.result);
<!--GuestStart-->
function getext(str) {
let p = str.lastIndexOf('.');
if (p===-1) return '';
if (p===0) return '';
return str.substr(p);
}
var ext = getext(file.webkitRelativePath||file.name);
upbigfilename = filesha1 + ext;
<!--GuestEnd-->
while (upbigfilename.indexOf('%2F')>0) upbigfilename = upbigfilename.replace('%2F', '/');
td2.innerHTML='<!--constStr@GetUploadLink--> ...';
var html = JSON.parse(localStorage.getItem(filesha1));
//console.log(html);
if (html!==null && ('part_info_list' in html)) {
td2.innerHTML='<!--constStr@UploadStart--> ...';
binupfile(file, html, timea+'_'+i, upbigfilename, filesha1, chunksize);
} else {
var xhr1 = new XMLHttpRequest();
xhr1.open("POST", '?action=upbigfile');
xhr1.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=utf-8");
xhr1.setRequestHeader('x-requested-with','XMLHttpRequest');
xhr1.onload = function(e){
//console.log(xhr1.status+xhr1.responseText);
td2.innerHTML='<font color="red">'+xhr1.responseText+'</font>';
if (xhr1.status==201) {
if (xhr1.responseText=='') {
getuplink(i,1);
return;
}
var html=JSON.parse(xhr1.responseText);
//console.log(html);
if (!html['part_info_list']) {
if (html.name!='') {
if (html.exist==true) td2.innerHTML=html.name+' 文件名已有';
else if (html.rapid_upload==true) td2.innerHTML=html.name+' 秒传';
else td2.innerHTML='<font color="red">'+xhr1.responseText+'</font><br>';
td1.innerHTML='<div style="color:green"><a href="<!--base_disk_path--><!--Path-->'+upbigfilename+'?preview" id="upfile_a_'+tdnum+'" target="_blank">'+td1.innerHTML+'</a><br><a href="<!--base_disk_path--><!--Path-->'+upbigfilename+'" id="upfile_a1_'+tdnum+'"></a><!--constStr@UploadComplete--><button onclick="CopyAllDownloadUrl(\'#upfile_a1_'+tdnum+'\');" id="upfile_cpbt_'+tdnum+'" <!--AdminStart--> style="display:none"<!--AdminEnd--> ><!--constStr@CopyUrl--></button></div>';
} else {
td2.innerHTML='<font color="red">'+xhr1.responseText+'</font><br>';
}
} else {
td2.innerHTML='<!--constStr@UploadStart--> ...';
//console.log(html);
localStorage.setItem(filesha1, JSON.stringify(html));
binupfile(file, html, timea+'_'+i, upbigfilename, filesha1, chunksize);
}
}
if (i<files.length-1) {
i++;
getuplink(i);
}
}
xhr1.send('upbigfilename='+ encodeURIComponent(upbigfilename) +'&filesize='+ file.size +'&filelastModified='+ file.lastModified + '&filesha1=' + filesha1 + '&chunksize=' + chunksize);
}
}
reader.readAsArrayBuffer(file);
}
uploadbuttonshow(); uploadbuttonshow();
} }
function binupfile(file, res, tdnum, filename, filesha1, chunksize) {
// xhr.getResponseHeader
if (!('ETag' in res)) res['ETag'] = new Array();
var fileid = res['file_id'];
var uploadid = res['upload_id'];
var label=document.getElementById('upfile_td2_'+tdnum);
var reader = new FileReader();
var StartStr='';
var MiddleStr='';
var StartTime;
var EndTime;
var newstartsize = 0;
if(!!file){
var chunknum = 0;
var chunknumtotal = res['part_info_list'].length;
var asize=0;
var totalsize=file.size;
var newstartsize=0;
while (res['ETag'][chunknum]!=null) {
chunknum++;
newstartsize += chunksize;
}
StartTime = new Date();
asize = newstartsize;
if (newstartsize==0) {
StartStr='<!--constStr@UploadStartAt-->:' +StartTime.toLocaleString()+'<br>' ;
} else {
StartStr='<!--constStr@LastUpload-->'+size_format(newstartsize)+ '<br><!--constStr@ThisTime--><!--constStr@UploadStartAt-->:' +StartTime.toLocaleString()+'<br>' ;
}
//var chunksize=5*1024*1024; // chunk size, max 60M. 每小块上传大小
//if (totalsize>200*1024*1024) chunksize=10*1024*1024;
function readblob(start) {
var end=start+chunksize;
var blob = file.slice(start,end);
reader.readAsArrayBuffer(blob);
//reader.readAsArrayBuffer(file);
}
readblob(asize);
reader.onload = function(e){
if (asize>totalsize) {
var xhr1 = new XMLHttpRequest();
xhr1.open("POST", '?action=upbigfile');
xhr1.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=utf-8");
xhr1.setRequestHeader('x-requested-with','XMLHttpRequest');
xhr1.onload = function(e){
console.log(xhr1.responseText+','+xhr1.status);
if (xhr1.status==200) {
localStorage.removeItem(filesha1);
<!--AdminStart-->
var html=JSON.parse(xhr1.responseText);
//response.name=file.webkitRelativePath||response.name;
addelement(html);
<!--AdminEnd-->
/*if (totalsize>10*1024*1024) {
var xhr3 = new XMLHttpRequest();
xhr3.open("GET", '?action=del_upload_cache&filelastModified='+file.lastModified+'&filesize='+file.size+'&filename='+filename);
xhr3.setRequestHeader('x-requested-with','XMLHttpRequest');
xhr3.send(null);
xhr3.onload = function(e){
console.log(xhr3.responseText+','+xhr3.status);
}
}*/
EndTime=new Date();
MiddleStr = '<!--constStr@EndAt-->:'+EndTime.toLocaleString()+'<br>';
if (newstartsize==0) {
MiddleStr += '<!--constStr@AverageSpeed-->:'+size_format(totalsize*1000/(EndTime.getTime()-StartTime.getTime()))+'/s<br>';
} else {
MiddleStr += '<!--constStr@ThisTime--><!--constStr@AverageSpeed-->:'+size_format((totalsize-newstartsize)*1000/(EndTime.getTime()-StartTime.getTime()))+'/s<br>';
}
document.getElementById('upfile_td1_'+tdnum).innerHTML='<div style="color:green"><a href="<!--base_disk_path--><!--Path-->'+filename+'?preview" id="upfile_a_'+tdnum+'" target="_blank">'+document.getElementById('upfile_td1_'+tdnum).innerHTML+'</a><br><a href="<!--base_disk_path--><!--Path-->'+filename+'" id="upfile_a1_'+tdnum+'"></a><!--constStr@UploadComplete--><button onclick="CopyAllDownloadUrl(\'#upfile_a1_'+tdnum+'\');" id="upfile_cpbt_'+tdnum+'" <!--AdminStart--> style="display:none"<!--AdminEnd--> ><!--constStr@CopyUrl--></button></div>';
label.innerHTML=StartStr+MiddleStr;
label.style.color='green';
} else {
label.innerHTML= '<font color="red">' + xhr1.status + ',' + xhr1.responseText + '</font>';
localStorage.removeItem(filesha1);
}
}
xhr1.send('uploadid=' + uploadid + '&fileid=' + fileid + '&etag=' + JSON.stringify(res['ETag']));
} else {
var binary = this.result;
var xhr = new XMLHttpRequest();
xhr.open("PUT", res['part_info_list'][chunknum]['upload_url'], true);
//xhr.setRequestHeader('x-requested-with','XMLHttpRequest');
bsize=asize+e.loaded-1;
xhr.setRequestHeader('Content-Range', 'bytes ' + asize + '-' + bsize +'/'+ totalsize);
xhr.upload.onprogress = function(e){
if (e.lengthComputable) {
var tmptime = new Date();
var tmpspeed = e.loaded*1000/(tmptime.getTime()-C_starttime.getTime());
var remaintime = (totalsize-asize-e.loaded)/tmpspeed;
label.innerHTML=StartStr+'<!--constStr@Upload--> ' +size_format(asize+e.loaded)+ ' / '+size_format(totalsize) + ' = ' + ((asize+e.loaded)*100/totalsize).toFixed(2) + '% <!--constStr@AverageSpeed-->:'+size_format((asize+e.loaded-newstartsize)*1000/(tmptime.getTime()-StartTime.getTime()))+'/s<br><!--constStr@CurrentSpeed--> '+size_format(tmpspeed)+'/s <!--constStr@Expect--> '+remaintime.toFixed(1)+'s';
}
}
var C_starttime = new Date();
xhr.onload = function(e){
if (xhr.status<500) {
//console.log(xhr.responseText);
//console.log(xhr.getResponseHeader('ETag'));
//var response=JSON.parse(xhr.responseText);
if (xhr.responseText==''&&xhr.getResponseHeader('ETag')!='') {
// 有ETag说明本段上传成功
let etag = xhr.getResponseHeader('ETag');
//if (etag.substr(0,1)=='"') etag = etag.substr(1);还就要引号!
//if (etag.substr(-1)=='"') etag = etag.substr(0, etag.length-1);
res['ETag'][chunknum] = etag;
localStorage.setItem(filesha1, JSON.stringify(res));
chunknum++;
asize = bsize + 1;
if (chunknum==chunknumtotal) {
// 上传结束
var xhr1 = new XMLHttpRequest();
xhr1.open("POST", '?action=upbigfile');
xhr1.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=utf-8");
xhr1.setRequestHeader('x-requested-with','XMLHttpRequest');
xhr1.onload = function(e){
console.log(xhr1.responseText+','+xhr1.status);
if (xhr1.status==200) {
localStorage.removeItem(filesha1);
<!--AdminStart-->
var html=JSON.parse(xhr1.responseText);
//response.name=file.webkitRelativePath||response.name;
addelement(html);
<!--AdminEnd-->
/*if (totalsize>10*1024*1024) {
var xhr3 = new XMLHttpRequest();
xhr3.open("GET", '?action=del_upload_cache&filelastModified='+file.lastModified+'&filesize='+file.size+'&filename='+filename);
xhr3.setRequestHeader('x-requested-with','XMLHttpRequest');
xhr3.send(null);
xhr3.onload = function(e){
console.log(xhr3.responseText+','+xhr3.status);
}
}*/
EndTime=new Date();
MiddleStr = '<!--constStr@EndAt-->:'+EndTime.toLocaleString()+'<br>';
if (newstartsize==0) {
MiddleStr += '<!--constStr@AverageSpeed-->:'+size_format(totalsize*1000/(EndTime.getTime()-StartTime.getTime()))+'/s<br>';
} else {
MiddleStr += '<!--constStr@ThisTime--><!--constStr@AverageSpeed-->:'+size_format((totalsize-newstartsize)*1000/(EndTime.getTime()-StartTime.getTime()))+'/s<br>';
}
document.getElementById('upfile_td1_'+tdnum).innerHTML='<div style="color:green"><a href="<!--base_disk_path--><!--Path-->'+filename+'?preview" id="upfile_a_'+tdnum+'" target="_blank">'+document.getElementById('upfile_td1_'+tdnum).innerHTML+'</a><br><a href="<!--base_disk_path--><!--Path-->'+filename+'" id="upfile_a1_'+tdnum+'"></a><!--constStr@UploadComplete--><button onclick="CopyAllDownloadUrl(\'#upfile_a1_'+tdnum+'\');" id="upfile_cpbt_'+tdnum+'" <!--AdminStart--> style="display:none"<!--AdminEnd--> ><!--constStr@CopyUrl--></button></div>';
label.innerHTML=StartStr+MiddleStr;
label.style.color='green';
} else {
label.innerHTML= '<font color="red">' + xhr1.status + ',' + xhr1.responseText + '</font>';
localStorage.removeItem(filesha1);
}
}
xhr1.send('uploadid=' + uploadid + '&fileid=' + fileid + '&etag=' + JSON.stringify(res['ETag']));
// uploadbuttonshow();
} else {
readblob(asize);
}
} else {
console.log(xhr.status+xhr.responseText);//<PartEtag>
if (xhr.status==409) {
let str = xhr.responseText;
str = str.substr(str.indexOf('<PartEtag>')+10);
str = str.substr(0, str.indexOf('</PartEtag>'));
res['ETag'][chunknum] = str;
localStorage.setItem(filesha1, JSON.stringify(res));
chunknum++;
asize += chunksize;
readblob(asize);
}
//label.innerHTML='<font color="red">'+xhr.responseText+'</font><br>';
} } else readblob(asize);
}
xhr.send(binary);
} }
} }
} }
<!--UploadJsEnd--> }
<!--AliyundriveUploadJsEnd-->
<!--ListEnd--> <!--ListEnd-->
function operatediv_close(operate) { function operatediv_close(operate) {
document.getElementById(operate+'_div').style.display='none'; document.getElementById(operate+'_div').style.display='none';
@@ -1220,7 +1554,10 @@ return false;
} }
<!--AdminStart--> <!--AdminStart-->
function logout() { function logout() {
document.cookie = "admin=; path=/"; var expd = new Date();
expd.setTime(expd.getTime()+1000);
var expires = "expires="+expd.toGMTString();
document.cookie = "admin=; path=/; "+expires;
location.href = location.href; location.href = location.href;
} }
<!--IsFolderStart--> <!--IsFolderStart-->
@@ -1229,26 +1566,24 @@ return false;
for ($i=0;$i<$operatediv.length;$i++) { for ($i=0;$i<$operatediv.length;$i++) {
$operatediv[$i].style.display='none'; $operatediv[$i].style.display='none';
} }
document.getElementById('mask').style.display='none'; document.getElementById('mask').style.display='';
//document.getElementById('mask').style.width=document.documentElement.scrollWidth+'px'; //document.getElementById('mask').style.width=document.documentElement.scrollWidth+'px';
document.getElementById('mask').style.height=document.documentElement.scrollHeight<window.innerHeight?window.innerHeight:document.documentElement.scrollHeight+'px'; document.getElementById('mask').style.height=document.documentElement.scrollHeight<window.innerHeight?window.innerHeight:document.documentElement.scrollHeight+'px';
if (num=='') { if (num=='') {
var str=''; var str='';
var fileid='';
} else { } else {
var str=document.getElementById('file_a'+num).innerText; var str=decodeURIComponent(document.getElementById('file_a'+num).href);
if (str=='') { if (str.substr(-1)==' ') str=str.substr(0, str.length-1);
str=document.getElementById('file_a'+num).getElementsByTagName("img")[0].alt; if (str.substr(-1)=='/') str=str.substr(0, str.length-1);
if (str=='') { if (str.substr(-8)=='?preview') str=str.substr(0, str.length-8);
alert('<!--constStr@GetFileNameFail-->'); if (str.lastIndexOf('/')>-1) str=str.substr(str.lastIndexOf('/')+1);
operatediv_close(action); var fileid=document.getElementById('file_a'+num).attributes['fileid'].nodeValue;
return;
}
}
if (str.substr(-1)==' ') str=str.substr(0,str.length-1);
} }
document.getElementById(action + '_div').style.display=''; document.getElementById(action + '_div').style.display='';
document.getElementById(action + '_label').innerText=str;//.replace(/&/,'&amp;'); document.getElementById(action + '_label').innerText=str;//.replace(/&/,'&amp;');
document.getElementById(action + '_sid').value=num; document.getElementById(action + '_sid').value=num;
document.getElementById(action + '_fileid').value=fileid;
document.getElementById(action + '_hidden').value=str; document.getElementById(action + '_hidden').value=str;
if (action=='rename') document.getElementById(action + '_input').value=str; if (action=='rename') document.getElementById(action + '_input').value=str;
var $e = event || window.event; var $e = event || window.event;
@@ -1277,9 +1612,9 @@ return false;
function submit_operate(str) { function submit_operate(str) {
var num=document.getElementById(str+'_sid').value; var num=document.getElementById(str+'_sid').value;
var xhr = new XMLHttpRequest(); var xhr = new XMLHttpRequest();
xhr.open("GET", '?'+serializeForm(str+'_form')); xhr.open("POST", '');
xhr.setRequestHeader('x-requested-with','XMLHttpRequest'); xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=utf-8");
xhr.send(null); xhr.setRequestHeader('x-requested-with', 'XMLHttpRequest');
xhr.onload = function(e){ xhr.onload = function(e){
var html; var html;
if (xhr.status<300) { if (xhr.status<300) {
@@ -1295,10 +1630,12 @@ return false;
html=JSON.parse(xhr.responseText); html=JSON.parse(xhr.responseText);
addelement(html); addelement(html);
} }
//alert('success');
} else alert(xhr.status+'\n'+xhr.responseText); } else alert(xhr.status+'\n'+xhr.responseText);
document.getElementById(str+'_div').style.display='none'; document.getElementById(str+'_div').style.display='none';
document.getElementById('mask').style.display='none'; document.getElementById('mask').style.display='none';
} }
xhr.send(serializeForm(str+'_form'));
return false; return false;
} }
function addelement(html) { function addelement(html) {
@@ -1312,15 +1649,16 @@ return false;
a1.target='_blank'; a1.target='_blank';
var td2=document.createElement('td'); var td2=document.createElement('td');
td2.setAttribute('class','updated_at'); td2.setAttribute('class','updated_at');
td2.innerText=html.lastModifiedDateTime.replace(/T/,' ').replace(/Z/,''); if (!!html.time) td2.innerText=html.time.replace(/T/,' ').replace(/Z/,'');
var td3=document.createElement('td'); var td3=document.createElement('td');
td3.setAttribute('class','size'); td3.setAttribute('class','size');
td3.innerText=size_format(html.size); if (!!html.size) td3.innerText=size_format(html.size);
if (!!html.folder) { else td3.innerText='0 B';
if (html.type=='folder') {
a1.href+='/'; a1.href+='/';
document.getElementById('tr0').parentNode.insertBefore(tr1,document.getElementById('tr0').nextSibling); document.getElementById('tr0').parentNode.insertBefore(tr1,document.getElementById('tr0').nextSibling);
} }
if (!!html.file) { if (html.type=='file') {
a1.href+='?preview'; a1.href+='?preview';
a1.name='filelist'; a1.name='filelist';
document.getElementById('tr0').parentNode.appendChild(tr1); document.getElementById('tr0').parentNode.appendChild(tr1);
@@ -1396,7 +1734,7 @@ return false;
<!--AdminEnd--> <!--AdminEnd-->
<!--LoginStart--> <!--LoginStart-->
function login() { function login() {
document.getElementById('mask').style.display='none'; document.getElementById('mask').style.display='';
//document.getElementById('mask').style.width=document.documentElement.scrollWidth+'px'; //document.getElementById('mask').style.width=document.documentElement.scrollWidth+'px';
document.getElementById('mask').style.height=document.documentElement.scrollHeight<window.innerHeight?window.innerHeight:document.documentElement.scrollHeight+'px'; document.getElementById('mask').style.height=document.documentElement.scrollHeight<window.innerHeight?window.innerHeight:document.documentElement.scrollHeight+'px';
document.getElementById('login_div').style.display=''; document.getElementById('login_div').style.display='';
@@ -1405,6 +1743,9 @@ return false;
document.getElementById('login_input').focus(); document.getElementById('login_input').focus();
} }
<!--LoginEnd--> <!--LoginEnd-->
<!--EncryptedStart-->
document.getElementById('password1').focus();
<!--EncryptedEnd-->
</script> </script>
<script src="//unpkg.zhimg.com/ionicons@4.4.4/dist/ionicons.js"></script> <script src="//unpkg.zhimg.com/ionicons@4.4.4/dist/ionicons.js"></script>
<script src="//cdn.bootcdn.net/ajax/libs/jquery/3.3.1/jquery.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script> <script src="//cdn.bootcdn.net/ajax/libs/jquery/3.3.1/jquery.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
+3 -2
View File
@@ -807,6 +807,7 @@
return; return;
} }
upbigfilename = encodeURIComponent((file.webkitRelativePath||file.name)); upbigfilename = encodeURIComponent((file.webkitRelativePath||file.name));
var filemd5='';
<!--GuestStart--> <!--GuestStart-->
function getext(str) { function getext(str) {
strarry=str.split('.'); strarry=str.split('.');
@@ -843,7 +844,7 @@
<!--GuestEnd--> <!--GuestEnd-->
td2.innerHTML='<!--constStr@GetUploadLink--> ...'; td2.innerHTML='<!--constStr@GetUploadLink--> ...';
var xhr1 = new XMLHttpRequest(); var xhr1 = new XMLHttpRequest();
xhr1.open("GET", '?action=upbigfile&upbigfilename='+ upbigfilename +'&filesize='+ file.size +'&lastModified='+ file.lastModified); xhr1.open("POST", '?action=upbigfile');
xhr1.setRequestHeader('x-requested-with','XMLHttpRequest'); xhr1.setRequestHeader('x-requested-with','XMLHttpRequest');
xhr1.onprogress = function(e){ xhr1.onprogress = function(e){
td2.innerHTML+='.'; td2.innerHTML+='.';
@@ -878,7 +879,7 @@
getuplink(i); getuplink(i);
} }
} }
xhr1.send(null); xhr1.send('upbigfilename='+ upbigfilename +'&filesize='+ file.size +'&filelastModified='+ file.lastModified +'&filemd5='+ filemd5);
<!--GuestStart--> <!--GuestStart-->
} }
} }
+3 -2
View File
@@ -849,6 +849,7 @@
return; return;
} }
upbigfilename = encodeURIComponent((file.webkitRelativePath||file.name)); upbigfilename = encodeURIComponent((file.webkitRelativePath||file.name));
var filemd5='';
<!--GuestStart--> <!--GuestStart-->
function getext(str) { function getext(str) {
strarry=str.split('.'); strarry=str.split('.');
@@ -885,7 +886,7 @@
<!--GuestEnd--> <!--GuestEnd-->
td2.innerHTML='<!--constStr@GetUploadLink--> ...'; td2.innerHTML='<!--constStr@GetUploadLink--> ...';
var xhr1 = new XMLHttpRequest(); var xhr1 = new XMLHttpRequest();
xhr1.open("GET", '?action=upbigfile&upbigfilename='+ upbigfilename +'&filesize='+ file.size +'&lastModified='+ file.lastModified); xhr1.open("POST", '?action=upbigfile');
xhr1.setRequestHeader('x-requested-with','XMLHttpRequest'); xhr1.setRequestHeader('x-requested-with','XMLHttpRequest');
xhr1.onprogress = function(e){ xhr1.onprogress = function(e){
td2.innerHTML+='.'; td2.innerHTML+='.';
@@ -920,7 +921,7 @@
getuplink(i); getuplink(i);
} }
} }
xhr1.send(null); xhr1.send('upbigfilename='+ upbigfilename +'&filesize='+ file.size +'&filelastModified='+ file.lastModified +'&filemd5='+ filemd5);
<!--GuestStart--> <!--GuestStart-->
} }
} }
-1272
View File
File diff suppressed because it is too large Load Diff
+89 -36
View File
@@ -4,7 +4,6 @@
<link rel="preconnect" href="https://cdn.jsdelivr.net" /> <link rel="preconnect" href="https://cdn.jsdelivr.net" />
<link rel="preconnect" href="https://fonts.googleapis.com" /> <link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" /> <link rel="preconnect" href="https://fonts.gstatic.com" />
<link rel="preconnect" href="https://renexmoe.vercel.app" />
<meta charset="utf-8" /> <meta charset="utf-8" />
<link <link
rel="shortcut icon" rel="shortcut icon"
@@ -17,7 +16,7 @@
/> />
<title><!--Title--></title> <title><!--Title--></title>
<meta name="description" content="A Onemanager-PHP site with Theme-renexmoe" /> <meta name="description" content="A Onemanager-PHP site with Theme-renexmoe" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/186526/renexmoe-cdn@v1.1.2/css/app.css"><meta name="theme-color" content="#fff" /> <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/186526/renexmoe-cdn@v1.3/css/app.css"><meta name="theme-color" content="#fff" />
<!--BackgroundStart--> <!--BackgroundStart-->
<style> <style>
body { body {
@@ -36,6 +35,24 @@
window.disableddarkmode = true; window.disableddarkmode = true;
</script> </script>
<!--BackgroundEnd--> <!--BackgroundEnd-->
<!--BackgroundMStart-->
<style>
body {
--bg: url("<!--BackgroundMUrl-->");
background-repeat: no-repeat;
background-size: cover;
background-attachment: fixed;
background-image: var(--bg);
}
.mdui-shadow-3 {
background: rgba(255, 255, 255, 0.5);
}
</style>
<script>
window.disableddarkmode = true;
</script>
<!--BackgroundMEnd-->
</head> </head>
<body <body
@@ -47,13 +64,11 @@
<div class="mdui-toolbar"> <div class="mdui-toolbar">
<span <span
class="mdui-btn mdui-btn-icon mdui-ripple mdui-ripple-white" class="mdui-btn mdui-btn-icon mdui-ripple mdui-ripple-white"
mdui-tooltip="{content: '菜单'}"
onclick='mdui.$("body").toggleClass("mdui-drawer-body-left");' onclick='mdui.$("body").toggleClass("mdui-drawer-body-left");'
id="toggle-drawer" id="toggle-drawer"
><i class="mdui-icon material-icons">menu</i></span ><i class="mdui-icon material-icons">menu</i></span
> >
<a <a
mdui-tooltip="{content: '返回'}"
class="mdui-btn mdui-btn-icon mdui-ripple mdui-ripple-white mdui-hidden-sm-up" class="mdui-btn mdui-btn-icon mdui-ripple mdui-ripple-white mdui-hidden-sm-up"
onclick="window.history.back()" onclick="window.history.back()"
> >
@@ -73,7 +88,6 @@
<!--AdminStart--><a <!--AdminStart--><a
href="javascript:;" href="javascript:;"
class="mdui-btn mdui-btn-icon mdui-ripple mdui-hidden-sm-up refresh" class="mdui-btn mdui-btn-icon mdui-ripple mdui-hidden-sm-up refresh"
mdui-tooltip="{content: '刷新缓存'}"
><i class="mdui-icon material-icons">refresh</i></a ><i class="mdui-icon material-icons">refresh</i></a
> >
<!--AdminEnd--> <!--AdminEnd-->
@@ -127,20 +141,26 @@
href="<!--base_path-->" href="<!--base_path-->"
class="mdui-list-item-icon mdui-icon material-icons" class="mdui-list-item-icon mdui-icon material-icons"
>home</a >home</a
><a href="<!--base_path-->" class="mdui-list-item-content"> ><a href="<!--base_path-->" class="mdui-list-item-content" id="home">
<!--constStr@Home--></a <!--constStr@Home--></a
> >
</li> </li>
<!--MultiDiskAreaStart--> <!--MultiDiskAreaStart-->
<div class="mdui-divider"></div> <div class="mdui-divider"></div>
<!--MultiDisksStart--><a <!--MultiDisksStart-->
<li class="mdui-list-item mdui-ripple">
<a
href="<!--MultiDisksUrl-->" href="<!--MultiDisksUrl-->"
class="mdui-list-item mdui-ripple" class="mdui-list-item-icon mdui-icon material-icons"
><i class="mdui-list-item-icon mdui-icon material-icons">cloud</i> >cloud</a
<div class="mdui-list-item-content"> >
<a
href="<!--MultiDisksUrl-->"
class="mdui-list-item-content mdui-text-truncate disk_name"
>
<!--MultiDisksName--> <!--MultiDisksName-->
</div> </a>
</a> </li>
<!--MultiDisksEnd--> <!--MultiDisksEnd-->
<div class="mdui-divider"></div> <div class="mdui-divider"></div>
<!--MultiDiskAreaEnd--> <!--MultiDiskAreaEnd-->
@@ -180,24 +200,33 @@
<!--AdminEnd--> <!--AdminEnd-->
</ul> </ul>
<i id="mouseplace" style="position: absolute"></i> <i id="mouseplace" style="position: absolute"></i>
<form action="?admin" method="post">
<div class="mdui-dialog" id="login_input"> <div class="mdui-dialog" id="login_input">
<div class="mdui-dialog-title">登录</div> <div class="mdui-dialog-title">登录</div>
<div class="mdui-dialog-content" style="height: 108px"> <div class="mdui-dialog-content" style="height: 108px">
<div class="mdui-textfield mdui-textfield-floating-label"> <div class="mdui-textfield mdui-textfield-floating-label">
<i class="mdui-icon material-icons">lock</i <i class="mdui-icon material-icons">lock</i
><label class="mdui-textfield-label">密码</label ><label class="mdui-textfield-label">密码</label
><input class="mdui-textfield-input" name="password1" type="new-password" /> ><input
class="mdui-textfield-input"
name="password1"
type="password"
onkeydown="if(event.keyCode==13) document.querySelector('#login_btn').click();"
/>
</div> </div>
</div> </div>
<div class="mdui-dialog-actions"> <div class="mdui-dialog-actions">
<button class="mdui-btn mdui-ripple" mdui-dialog-close="">取消</button <button class="mdui-btn mdui-ripple" mdui-dialog-close="" id="login_close">取消</button
><button class="mdui-btn mdui-ripple" type="submit" value="登录"> ><button
id="login_btn"
class="mdui-btn mdui-ripple"
type="submit"
value="登录"
>
登录 登录
</button> </button>
</div> </div>
</div> </div>
</form>
<!--EncryptedStart--> <!--EncryptedStart-->
<div class="mdui-col-md-6 mdui-col-offset-md-3"> <div class="mdui-col-md-6 mdui-col-offset-md-3">
<br /> <br />
@@ -237,18 +266,15 @@
</div> </div>
<div <div
class="mdui-typo mdui-shadow-3 markdown" class="mdui-typo mdui-shadow-3 markdown"
style="padding: 20px; margin: 20px 0" style="padding: 20px; margin: 20px 0; overflow-x: scroll"
id="head" id="head"
> >
<pre><code id="head-md"><!--HeadmdContent--></code></pre> <pre><code id="head-md"><!--HeadmdContent--></code></pre>
</div> </div>
<!--HeadmdEnd--> <!--HeadmdEnd-->
<div <div class="mdui-row mdui-shadow-3" style="margin: 20px 0; border-radius: 8px">
class="mdui-row mdui-shadow-3" <ul class="mdui-list" id="file-list">
style="padding: 5px; margin: 20px 0; border-radius: 8px"
>
<ul class="mdui-list">
<li class="mdui-list-item mdui-ripple"> <li class="mdui-list-item mdui-ripple">
<div class="mdui-row mdui-col-xs-12"> <div class="mdui-row mdui-col-xs-12">
<div class="mdui-col-xs-12 mdui-col-sm-7"> <div class="mdui-col-xs-12 mdui-col-sm-7">
@@ -278,7 +304,7 @@
</div> </div>
</li> </li>
<!--BackArrowStart--> <!--BackArrowStart-->
<li class="mdui-list-item mdui-ripple"> <li class="mdui-list-item mdui-ripple back-page">
<div class="mdui-row mdui-col-sm-12"> <div class="mdui-row mdui-col-sm-12">
<a href="<!--BackArrowUrl-->"> <a href="<!--BackArrowUrl-->">
<div class="mdui-col-xs-7"> <div class="mdui-col-xs-7">
@@ -367,7 +393,7 @@
</div> </div>
<div <div
class="mdui-typo mdui-shadow-3 markdown" class="mdui-typo mdui-shadow-3 markdown"
style="padding: 20px; margin: 20px 0" style="padding: 20px; margin: 20px 0; overflow-x: scroll"
id="readme" id="readme"
> >
<pre><code id="readme-md"><!--ReadmemdContent--></code></pre> <pre><code id="readme-md"><!--ReadmemdContent--></code></pre>
@@ -379,9 +405,33 @@
</div> </div>
<!--FootomfEnd--> <!--FootomfEnd-->
<script>
document.querySelector("#admin-menu").innerHTML +=
'<li class="mdui-menu-item"><a href="javascript:void(0);"class="mdui-ripple getalllink"><i class="mdui-menu-item-icon mdui-icon material-icons">link</i>批量链接</a></li>';
</script>
<script>
window.MorePage = undefined;
</script>
<!--MorePageStart-->
<script>
window.MorePage = [
<!--MorePageListNowStart-->
<!--PageNum-->,
<!--MorePageListNowEnd-->
<!--MorePageListStart-->
<!--PageNum-->,
<!--MorePageListEnd-->
];
</script>
<!--MorePageEnd-->
<!--IsFolderEnd--> <!--IsFolderEnd-->
<!--IsFileStart--> <!--IsFileStart-->
<div id="file"> <div
id="file"
class="mdui-shadow-3"
style="padding: 5px; margin: 20px 0px; padding: 20px; border-radius: 8px"
>
<!--IsimgFileStart--> <!--IsimgFileStart-->
<img class="mdui-img-fluid mdui-center mdui-m-t-5" src="<!--FileDownUrl-->" /> <img class="mdui-img-fluid mdui-center mdui-m-t-5" src="<!--FileDownUrl-->" />
<!--IsimgFileEnd--> <!--IsimgFileEnd-->
@@ -391,12 +441,16 @@
src="<!--FileDownUrl-->" src="<!--FileDownUrl-->"
controls controls
autoplay autoplay
style="width: 100%; margin-top: 10%" style="width: 100%; margin-top: 10%; margin-bottom: 10%"
></audio> ></audio>
<!--IsmusicFileEnd--> <!--IsmusicFileEnd-->
<!--IsvideoFileStart--> <!--IsvideoFileStart-->
<video class="mdui-video-fluid" controls style="margin-top: 20px"> <video
class="mdui-video-fluid"
controls
style="margin-top: 20px; margin-bottom: 20px"
>
<source src="<!--FileDownUrl-->" /> <source src="<!--FileDownUrl-->" />
<p> <p>
Your browser doesn't support HTML5 video. Here is a Your browser doesn't support HTML5 video. Here is a
@@ -414,7 +468,7 @@
<!--IsofficeFileEnd--> <!--IsofficeFileEnd-->
<!--IspdfFileStart--> <!--IspdfFileStart-->
<embed src="<!--FileEncodeReplaceUrl-->" type="application/pdf"> <embed src="<!--FileEncodeReplaceUrl-->" type="application/pdf" />
<!--IspdfFileEnd--> <!--IspdfFileEnd-->
<!--IstxtFileStart--> <!--IstxtFileStart-->
<pre <pre
@@ -430,7 +484,7 @@
'<li class="mdui-menu-item"><a href="javascript:void(0);"class="mdui-ripple highlight"><i class="mdui-menu-item-icon mdui-icon material-icons">style</i>markdown解析</a></li>'; '<li class="mdui-menu-item"><a href="javascript:void(0);"class="mdui-ripple highlight"><i class="mdui-menu-item-icon mdui-icon material-icons">style</i>markdown解析</a></li>';
document.querySelector( document.querySelector(
".mdui-toolbar" ".mdui-toolbar"
).innerHTML += `<a href="javascript:;" class="mdui-btn mdui-btn-icon mdui-ripple mdui-hidden-sm-up highlight" mdui-tooltip="{content: 'markdown解析'}"><i class="mdui-icon material-icons">style</i></a>`; ).innerHTML += `<a href="javascript:;" class="mdui-btn mdui-btn-icon mdui-ripple mdui-hidden-sm-up highlight"><i class="mdui-icon material-icons">style</i></a>`;
</script> </script>
<!--IstxtFileEnd--> <!--IstxtFileEnd-->
@@ -450,7 +504,7 @@
'<li class="mdui-menu-item"><a href="javascript:void(0);"class="mdui-ripple downloadurl"><i class="mdui-menu-item-icon mdui-icon material-icons">cloud_download</i>下载链接</a></li>'; '<li class="mdui-menu-item"><a href="javascript:void(0);"class="mdui-ripple downloadurl"><i class="mdui-menu-item-icon mdui-icon material-icons">cloud_download</i>下载链接</a></li>';
document.querySelector( document.querySelector(
".mdui-toolbar" ".mdui-toolbar"
).innerHTML += `<a href="javascript:;" class="mdui-btn mdui-btn-icon mdui-ripple mdui-hidden-sm-up downloadurl" mdui-tooltip="{content: '下载链接'}"><i class="mdui-icon material-icons">cloud_download</i></a>`; ).innerHTML += `<a href="javascript:;" class="mdui-btn mdui-btn-icon mdui-ripple mdui-hidden-sm-up downloadurl"><i class="mdui-icon material-icons">cloud_download</i></a>`;
</script> </script>
<!--IsFileEnd--> <!--IsFileEnd-->
@@ -461,6 +515,5 @@
{ "music":"audiotrack", "video":"ondemand_video", "img":"image", { "music":"audiotrack", "video":"ondemand_video", "img":"image",
"pdf":"picture_as_pdf", "default":"insert_drive_file"} "pdf":"picture_as_pdf", "default":"insert_drive_file"}
<!--IconValuesEnd--> <!--IconValuesEnd-->
<script src="https://cdn.jsdelivr.net/gh/186526/renexmoe-cdn@v1.1.2/js/webpack-runtime.2c4e79a563c6e0c1c74f.js"></script> <script src="https://cdn.jsdelivr.net/gh/186526/renexmoe-cdn@v1.3/js/app@1b381f3c.a4f2dc4618121eac37e2.js"></script><script src="https://cdn.jsdelivr.net/gh/186526/renexmoe-cdn@v1.3/js/app@28a13772.98a11cc0c1cf2495c3d8.js"></script><script src="https://cdn.jsdelivr.net/gh/186526/renexmoe-cdn@v1.3/js/app@34e3d95a.2f8dbf552095a86a7f1b.js"></script><script src="https://cdn.jsdelivr.net/gh/186526/renexmoe-cdn@v1.3/js/app@798ab416.9ed46bb752b71a3c13a4.js"></script><script src="https://cdn.jsdelivr.net/gh/186526/renexmoe-cdn@v1.3/js/app@9c50beac.30955a99f08c9574cd14.js"></script><script src="https://cdn.jsdelivr.net/gh/186526/renexmoe-cdn@v1.3/js/app@f0256996.956ea71aa357ba3fdc28.js"></script><script src="https://cdn.jsdelivr.net/gh/186526/renexmoe-cdn@v1.3/js/webpack-runtime.93708ab3e9cb84dcc01a.js"></script>
<script src="https://cdn.jsdelivr.net/gh/186526/renexmoe-cdn@v1.1.2/js/app.7a662c514027ed87a34e.js"></script>
</html> </html>
-1240
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+1657
View File
File diff suppressed because it is too large Load Diff
-1296
View File
File diff suppressed because it is too large Load Diff
-1296
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+25 -1
View File
@@ -1,7 +1,31 @@
20210331-1530.36
admin can only use classic theme after admin login, and guest can not change theme now. fix: Sharelink can not work in php8. show disk space. limit 5 files in uploading. do with activityLimitReached. fix some bugs.
暂时解决昨天阿里云盘最新防盗链。管理登录后只能用classic主题,游客不能再切换主题了。修复Sharelink在php8下不能正常工作。显示盘空间。同时上传文件数限制5个。对activityLimitReached稍微处理。修复一些bug。
20210313-1352.35
use driveId, after update, <font color="red">Aliyundrive and Googledrive please click the Change link after Driver type</font>. try fix: php8 will run error 500. change layout in settup. fix: uploading non-englist file name. try fix: sha1 a big file.
换用driveId,更新后<font color="red">Aliyundrive与Googledrive请点一下那个切换链接</font>。尝试修复php8的500 ERROR。改变设置页面的布局。修复上传中文名文件时最终文件以url代码命名。阿里云盘上传时可以sha1大文件了。
20210311-2004.34
try fix: can not login, sha1.js not loaded(changed a cdn), show error log.
尝试修复登录不了的情况:可能sha1.js没有载入(换了源),在登录页显示出错信息。
20210309-1718.33
Googledrive can operate now, but the uploading can not done on explorer without token. Onedrive try deal with activeLimit. Can change admin password now. Admin password will sha1 when submitting. Fix some bugs.
Googledrive可以管理操作了,但因为没法在浏览器端不带token上传,所以上传操作作罢。Onedrive尝试处理activeLimit。可以修改admin密码了。登录等提交admin密码时,会sha1加密再提交。修复一些bug。
20210301-1745.32
Onedrive client secret extend. export&import config. adding Googledrive. add reffer: only listing domains can refer. add diskDescription: tips of disk. Heroku change function_name to HerokuappId. try fix domainforproxy. fix create in Aliyundrive. fix other bugs.
Onedrive 的client延期。可以导入导出配置了。初步添加Googledrive。添加reffer:只有指定域名能引用。添加diskDescription:可以对盘备注了。Heroku中将function_name改为使用HerokuappId。尝试修复domainforproxy在个人帐号时的问题。修复阿里云盘不能新建与加密。修复其它bug。
20210118-1600.31
can change Ondrive to Sharepoint, can copy a disk. fix a bug that 500 error in setup.
Onedrive跟Sharepoint可以切换了,可以复制一个盘。修复bug。
20210115-1111.30
<font color=red>v3, after update, please AddDisk again, please set passfile again.</font> themes of php deleted, or you can use branch v2_last.
<font color=red>v3,一键升级后请重新添加盘,passfile失效,重新设置。</font>php主题删掉了,要么就用v2_last分支。
20201229.29
Modify tags, change sequence of disk.
可以修改标签,移动标签顺序。
20201215-1400.28 20201215-1400.28
fix: hackers can upload files to ANY folder (or create a new folder) in your Onedrive. add language zh-tw. now, on heroku, xhr can post. fix: 2 or more space in file name cause bugs. fix: hackers can upload files to ANY folder (or create a new folder) in your Onedrive. add language zh-tw. now, on heroku, xhr can post. fix: 2 or more space in file name cause bugs.
修复:构造代码后可以上传文件到你Onedrive的任意目录(甚至创建新目录)。新增zh-tw语言。xhr的post在heroku会接收了,改回post。修复:文件名有多个空格相连时造成bug。 修复:构造代码后可以上传文件到你Onedrive的任意目录(甚至创建新目录)。新增zh-tw语言。xhr的post在heroku会接收了,改回post。修复:文件名有多个空格相连时造成bug。
20201106-1730.27 20201106-1730.27
Add theme. A code used in CloudFlare Workers. Admin not need password in folder. Add caddy2 rewrite rule. Add new platform Glitch. <font color=red>web hosting and VPS user should backup your config.php, after update, copy it to .data foloder.</font> Add theme. A code used in CloudFlare Workers. Admin not need password in folder. Add caddy2 rewrite rule. Add new platform Glitch. <font color=red>web hosting and VPS user should backup your config.php, after update, copy it to .data foloder.</font>
添加主题。添加一段用于CF workers的代码。加密目录管理员不需要密码了。添加caddy2伪静态。新增Glitch平台。<font color=red>虚拟主机与VPS用户请备份config.php,升级后,手动将它覆盖到.data目录。</font> 添加主题。添加一段用于CF workers的代码。加密目录管理员不需要密码了。添加caddy2伪静态。新增Glitch平台。<font color=red>虚拟主机与VPS用户请备份config.php,升级后,手动将它覆盖到.data目录。</font>