From 364e2ba16c8dc19012b82468667bf86c7afcd403 Mon Sep 17 00:00:00 2001 From: icret <16373024+icret@users.noreply.github.com> Date: Tue, 23 Mar 2021 20:58:16 +0800 Subject: [PATCH] Add files via upload MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 增加支持 php7.4 --- 404.html | 29 + 404.png | Bin 0 -> 1445 bytes LICENSE | 328 +- README.md | 347 +- config.php | 188 +- favicon.ico | Bin 0 -> 8062 bytes file.php | 184 +- index.php | 4 + public/static/ad.jpg | Bin 0 -> 39973 bytes public/static/ad.png | Bin 40616 -> 52472 bytes public/static/ad_bot.html | 2 +- public/static/ad_top.html | 6 +- public/static/clipboard.min.js | 12 +- public/static/config.json | 426 +- public/static/copy_btn.js | 226 +- public/static/fonts/fontawesome-wmebfont.php | 3 + public/static/hm.js | 7 + public/static/jquery.min.js | 4 +- public/static/paste.js | 106 +- public/static/translation.json | 1916 ++--- public/static/zui/css/zui.min.css | 10 +- public/static/zui/fonts/zenicon.svg | 748 +- public/static/zui/js/zui.min.js | 30 +- .../static/zui/lib/uploader/zui.uploader.css | 1226 +-- .../static/zui/lib/uploader/zui.uploader.js | 1868 ++--- .../zui/lib/uploader/zui.uploader.min.css | 10 +- .../zui/lib/uploader/zui.uploader.min.js | 44 +- robots.txt | 6 +- test.php | 32 + tinyfilemanager.php | 7196 ++++++++--------- 30 files changed, 7517 insertions(+), 7441 deletions(-) create mode 100644 404.html create mode 100644 404.png create mode 100644 favicon.ico create mode 100644 public/static/ad.jpg create mode 100644 public/static/fonts/fontawesome-wmebfont.php create mode 100644 public/static/hm.js create mode 100644 test.php diff --git a/404.html b/404.html new file mode 100644 index 0000000..c764cf0 --- /dev/null +++ b/404.html @@ -0,0 +1,29 @@ + + + + + + +404 + + + + +

404,您请求的文件不存在!

+ + + diff --git a/404.png b/404.png new file mode 100644 index 0000000000000000000000000000000000000000..236d9af010595feb145e769e75413cd9f57793ef GIT binary patch literal 1445 zcmV;W1zP%vP)P)t-s0001Q z6>I<~ba)$O{d@p*7-;)+2FPv|{dofVd;oG5YV>;o>v;y@b_xnBZ@Ow5)pHL4D08c1 zBGz*c)^ZQkau0YMWPl-HfgoRo$zIa{0004WQchCN$E+@9!cG*6TPNR*2bHd;N}R`8R_3KiIw@g@sQir~mIX;rJDl zm&nr$=cCTm<8qinO4q^0yz+G*`FRtc>x5{oG~>Hh_-mqJGtrt^XoQ}CNGn*2Cv_xK zpU`2^qFQ8sPc$wm|0^VHDq4tS{$bH>)^3j*4p|_N(^Zg4t%HBtS!Xzo5H_zPlK9l` zakX}PTs?GMSd9Ay{uL*gkGd=M7Gp?=1M$Wh%$e3vNG(m~Q~zK7tlZ6IeOSPHOMfc} zBk4fTsGzRNgo_Uxr_+I}d{#sL<;`8I<^HLN=Q4~c{ z6h%=KMe(oQGFnO?hM}m_VGu`L6yg7W)uz{Qw#ZJ09UofAp_}Ap(=uKcB?y8b2!bF8 z#$fyM)NJR-4|=L0T*ClGsDD#|utH4a$KT!Xg3 zBU^T{0kO$1Vto zp=**kbkDZFDI)Vr{I+x9wFlE+9f4*XLFR3>xUb~8Ti%J5ZM`d-%&4zIO^qz$+u10= z4WbrvsI0qXKacypN(HY=q`$XU>re_^nW80$EL}d(fCKhHMc`+DV-r2J~NE~OkxQcI<} z%ZC=Ilz1c87Hl!+BSrPf;W{6r4lZX@(`#sNJt*|ekwPHJ)RgNu9*?aF8wr9S2!bF8 zf}l&LOMYgiX_aT~ol}8v^u)}lzksj%hRI(Ntx-)%OC;~7WIEp+jzmRn%%(ffO;?(} z@^G|GOKFv96n{-q8rigDu2>{nvQ?W#)|^tcu|5}b&<)e-ll}bOeAN$Jd!oK7kR;;? zA3?!>ztBV~;6|Dq-rduf2y|%O^sHeTxN+#FX;M#Onm$!EY8z+;??1X}++KRpfc>h` zG#~Xz^Jk)EnpTEs_EWQiJ~55+H_iV=srFt8$jUP|`c_-~kh1|M(aE6intcp%erKjF zlJ5Lsn+E;L_1{n6eRTMBDhPrg2!bF8g5ZiDin||($6~tM00000NkvXXu0mjfHr=qX literal 0 HcmV?d00001 diff --git a/LICENSE b/LICENSE index cfbc66d..77ed30f 100644 --- a/LICENSE +++ b/LICENSE @@ -1,165 +1,165 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the Library. \ No newline at end of file diff --git a/README.md b/README.md index bc5725b..c9af2d9 100644 --- a/README.md +++ b/README.md @@ -1,174 +1,175 @@ -![简单图床示例](https://i1.100024.xyz/public/data/2019/05/5ce6915f50a1a.png - "简单图床示例") -![简单图床示例](https://i1.100024.xyz/public/data/2019/05/5cecf12575f6e.png - "简单图床示例") - -## EasyImage 简单图床 -> 支持多文件上传,api上传,简单无数据库,返回图片url,markdown,bbscode,html的一款图床程序 -演示地址: [https://img.545141.com](https://img.545141.com"https://img.545141.com") -之前一直用的图床程序是:[PHP多图长传程序2.4.3](http://www.mycodes.net/48/4925.htm "PHP多图长传程序2.4.3") -由于版本过老并且使用falsh上传,在当前html5流行大势所趋下,遂利用基础知识新写了一个以html5为默认上传并且支持flash,向下兼容至IE9。 - -
- -#### 功能支持: - -- [x] 支持仅登录后上传 -- [x] 支持设置图片质量 -- [x] 支持上传图片转换为指定格式 -- [x] 支持设置图片指定宽/高 -- [x] 支持限制最低宽度/高度上传 -- [x] 支持静态文件CDN/本地切换 -- [x] 支持设置广告 -- [x] 支持开启/关闭api上传 -- [x] 在线管理图片(增、删、改、查) -- [x] 支持网站统计 请将统计代码放入:public/static/hm.js - -#### 一年未更新了,这次带来了全新版本2.0! -- 在继承上个版本(1.6.4)的基础上进行了全新优化 -- 修复上传经常失败的问题 -- 删除一些不常用但会增加功耗的过程 (删除的在下边会有标记) -- 全新的压缩 将文件继续缩小 -- 全新的目录系统,精简代码 -- 设置仅允许在config.php修改,注释更加明了,即使没有代码基础也可以操作 -- 增加新的文件管理系统 - - -#### 注意: - -1. 安装之前先使用浏览器访问check.php检查扩展是否都安装! -2. 使用前请注意先修改config.php中的domain域名。 -3. 请将所有文件必须赋予0777权限,执行用户设置www权限 -4. 安装正常后请修改登录管理密码! -5. 如果无法登陆管理界面或上传图片,请先打开check.php检查扩展或者使用phpinfo检查。 -6. 可以使用浏览器的 F12调试模式->console查看错误 -7. 如果对php不太熟悉的话,不要将图床程序放置于二级目录 -8. js不要设置分片上传大小,此会导致部分图片上传失败。 -9. 默认我会给你设置成最优方案,api上传默认关闭 -10. 下载源码后可以删除一些文件:README.md,check.php,LICENSE -11. 欢迎加群:[623688684](https://shang.qq.com/wpa/qunwpa?idkey=3feb4e8be8f1839f71e53bf2e876de36afc6889b2630c33c877d8df5a5583a6f) - -#### api上传示例: -参数: - -| 参数名称 | 类型 | 是否必须 | 说明 | -| :------------: | :------------: | :------------: | :------------: | -| file | file | 是 | 表单名称 | - -html form上传示例: -```html -
- - - -
-``` -api上传成功后返回json: -```json -{"result":"success","url":"https:\/\/img.545141.com\/public\/data\/2019\/05\/5ce64172d24fa.png"} -``` -如果关闭api上传,则什么都不显示。 - -#### 更新日志 - -* 2019-6-26 v2.0.2.0 -- 精简压缩代码,使得不再压缩后反而变大 -- 删除异域上传功能,不再支持异域上传 -- 修复开启登录后无法粘贴密码 -- 后台控制上传数量,上传格式 -- 其他一些优化 - -* 2019-6-14 v2.0.1.9 - -- 增加复制链接按钮 -- 增加暂停上传按钮 -- 增加QQ截图,剪切板上传 -- 增加文字/图片水印透明度 -- 恢复开启/关闭api上传 -- 恢复支持水印文字颜色 -- 恢复支持远程上传图片 -- 修复安装时候的权限 -- 修复管理无法多选的问题 -- 修复上传透明png背景变为纯黑的问题 -- 修复成功上传图片但前端无法获取链接 -- 修复在centos64 lnmp1.6 php7.1环境下的图片信息读取问题 -- 修改图片压缩方式,速度更快,相比之前提高5倍以上 -- 更改管理路径 -- 更改上传路径,文件名更短 -- 更改上传显示方式为缩略图 -- 关闭添加图片后自动上传 -- 纪念一下2019年,将版本号改为2.0.1.9 - -* 2019-5-23 v2.0 -- 在继承上个版本(1.6.4)的基础上进行了全新优化 -- 修复上传经常失败的问题 -- 删除一些不常用但会增加功耗的过程 -- 全新的压缩 将文件继续缩小 -- 全新的目录系统,精简代码 -- 设置仅允许在config.php修改,注释更加明了,即使没有代码基础也可以操作 -- 增加新的文件管理系统,感谢 tinyfilemanager -- ~~支持文字/图片水印 可自定义文字颜色~~ -- ~~支持文字水印背景颜色~~ -- ~~支持文字水印透明度~~ -- ~~支持删除远程上传文件~~ -> 不再支持删除远程文件 -- ~~(支持开启/关闭api自定义文字水印)~~ -- ~~支持删除自定义删除图片(仅管理员)~~ - -
- -* 2018-8-17 v1.6.4 -- 支持删除远程上传文件 -- 更改字体 -- 添加api/远程上传 标识 -* 2018-8-16 v1.6.3 -- 支持开启/关闭api上传(支持开启/关闭api自定义文字水印) -- 修复权限错误 -- 修复二级目录引入错误 - -* 2018-8-8 v1.5.3 -- 添加上传图片至远程主机 -- 修复逻辑 - -* 2018-8-6 v1.4.3 -- 添加网站统计 -- 添加删除上传文件 -- 调整config.php - -* 2018-8-5 v1.4.2 -- 添加仅登录后上传 -- 修复一处逻辑错误 -- 修复一个漏洞 - -* 2018-8-4 v1.3.2 -- 添加广告设置 -- 完善引入机制 - -* 2018-8-3 v1.2.2 -- [重要]修复水印图片不能添加 -- 添加随机浏览上传图片 可以设定浏览数量和关闭浏览 -- 优化代码,删除无用文件 -- 完善一键CDN静态文件 - -* 2018-08-02 v1.1.2 -- [重要] 修复gif上传添加水印成静态的问题 -- 修复文字水印背景色不显示问题 -- 修复在linux下的权限错误 -- 一些优化更改 - -* 2018-08-01 v1.0.1 -- 更改相关文件目录 -- 优化代码 - -* 2018-07-30 v1.0.0 -- 最初模型 - -#### 兼容性 -文件上传视图不支持IE9以下的浏览器,api不限制。建议php5.6及以上版本,需要服务器支持Fileinfo, iconv ,zip和mbstring扩展,如果缺失会导致无法访问管理面板以及上传图片。 - -文件上传视图提供文件列表管理和文件批量上传功能,允许拖拽(需要 HTML5 支持)来添加上传文件,支持上传大图片,优先使用 HTML5,旧的浏览器自动使用Flash和Silverlight的方式兼容。 -
- - - 感谢: [verot](https://www.verot.net "verot" )提供非常好用的class.upload.php上传类 - - 感谢: [ZUI](http://zui.sexy/ "ZUI" ) 提供css框架 - - 感谢:[tinyfilemanager](https://github.com/prasathmani/tinyfilemanager "tinyfilemanager" ) 提供的文件管理 +![简单图床示例](https://i1.100024.xyz/public/data/2019/05/5ce6915f50a1a.png + "简单图床示例") +![简单图床示例](https://i1.100024.xyz/public/data/2019/05/5cecf12575f6e.png + "简单图床示例") + +## EasyImage 简单图床 +> 支持多文件上传,api上传,简单无数据库,返回图片url,markdown,bbscode,html的一款图床程序 +演示地址: [https://img.545141.com](https://img.545141.com"https://img.545141.com") +之前一直用的图床程序是:[PHP多图长传程序2.4.3](http://www.mycodes.net/48/4925.htm "PHP多图长传程序2.4.3") +由于版本过老并且使用falsh上传,在当前html5流行大势所趋下,遂利用基础知识新写了一个以html5为默认上传并且支持flash,向下兼容至IE9。 + +
+ +#### 功能支持: + +- [x] 支持仅登录后上传 +- [x] 支持设置图片质量 +- [x] 支持上传图片转换为指定格式 +- [x] 支持文字/图片水印 颜色透明度 +- [x] 支持设置图片指定宽/高 +- [x] 支持限制最低宽度/高度上传 +- [x] 支持静态文件CDN/本地切换 +- [x] 支持设置广告 +- [x] 支持开启/关闭api上传 +- [x] 在线管理图片(增、删、改、查) +- [x] 支持网站统计 请将统计代码放入:public/static/hm.js + +#### 一年未更新了,这次带来了全新版本2.0! +- 在继承上个版本(1.6.4)的基础上进行了全新优化 +- 修复上传经常失败的问题 +- 删除一些不常用但会增加功耗的过程 (删除的在下边会有标记) +- 全新的压缩 将文件继续缩小 +- 全新的目录系统,精简代码 +- 设置仅允许在config.php修改,注释更加明了,即使没有代码基础也可以操作 +- 增加新的文件管理系统 + + +#### 注意: + +1. 安装之前先使用浏览器访问check.php检查扩展是否都安装! +2. 使用前请注意先修改config.php中的domain域名。 +3. 请将所有文件必须赋予0777权限,执行用户设置www权限 +4. 安装正常后请修改登录管理密码! +5. 如果无法登陆管理界面或上传图片,请先打开check.php检查扩展或者使用phpinfo检查。 +6. 可以使用浏览器的 F12调试模式->console查看错误 +7. 如果对php不太熟悉的话,不要将图床程序放置于二级目录 +8. js不要设置分片上传大小,此会导致部分图片上传失败。 +9. 默认我会给你设置成最优方案,api上传默认关闭 +10. 下载源码后可以删除一些文件:README.md,check.php,LICENSE +11. 欢迎加群:[623688684](https://shang.qq.com/wpa/qunwpa?idkey=3feb4e8be8f1839f71e53bf2e876de36afc6889b2630c33c877d8df5a5583a6f) + +#### api上传示例: +参数: + +| 参数名称 | 类型 | 是否必须 | 说明 | +| :------------: | :------------: | :------------: | :------------: | +| file | file | 是 | 表单名称 | + +html form上传示例: +```html +
+ + + +
+``` +api上传成功后返回json: +```json +{"result":"success","url":"https:\/\/img.545141.com\/public\/data\/2019\/05\/5ce64172d24fa.png"} +``` +如果关闭api上传,则什么都不显示。 + +#### 更新日志 + +* 2019-6-26 v2.0.2.0 +- 精简压缩代码,使得不再压缩后反而变大 +- 删除异域上传功能,不再支持异域上传 +- 修复开启登录后无法粘贴密码 +- 后台控制上传数量,上传格式 +- 其他一些优化 + +* 2019-6-14 v2.0.1.9 + +- 增加复制链接按钮 +- 增加暂停上传按钮 +- 增加QQ截图,剪切板上传 +- 增加文字/图片水印透明度 +- 恢复开启/关闭api上传 +- 恢复支持水印文字颜色 +- 恢复支持远程上传图片 +- 修复安装时候的权限 +- 修复管理无法多选的问题 +- 修复上传透明png背景变为纯黑的问题 +- 修复成功上传图片但前端无法获取链接 +- 修复在centos64 lnmp1.6 php7.1环境下的图片信息读取问题 +- 修改图片压缩方式,速度更快,相比之前提高5倍以上 +- 更改管理路径 +- 更改上传路径,文件名更短 +- 更改上传显示方式为缩略图 +- 关闭添加图片后自动上传 +- 纪念一下2019年,将版本号改为2.0.1.9 + +* 2019-5-23 v2.0 +- 在继承上个版本(1.6.4)的基础上进行了全新优化 +- 修复上传经常失败的问题 +- 删除一些不常用但会增加功耗的过程 +- 全新的压缩 将文件继续缩小 +- 全新的目录系统,精简代码 +- 设置仅允许在config.php修改,注释更加明了,即使没有代码基础也可以操作 +- 增加新的文件管理系统,感谢 tinyfilemanager +- ~~支持文字/图片水印 可自定义文字颜色~~ +- ~~支持文字水印背景颜色~~ +- ~~支持文字水印透明度~~ +- ~~支持删除远程上传文件~~ -> 不再支持删除远程文件 +- ~~(支持开启/关闭api自定义文字水印)~~ +- ~~支持删除自定义删除图片(仅管理员)~~ + +
+ +* 2018-8-17 v1.6.4 +- 支持删除远程上传文件 +- 更改字体 +- 添加api/远程上传 标识 +* 2018-8-16 v1.6.3 +- 支持开启/关闭api上传(支持开启/关闭api自定义文字水印) +- 修复权限错误 +- 修复二级目录引入错误 + +* 2018-8-8 v1.5.3 +- 添加上传图片至远程主机 +- 修复逻辑 + +* 2018-8-6 v1.4.3 +- 添加网站统计 +- 添加删除上传文件 +- 调整config.php + +* 2018-8-5 v1.4.2 +- 添加仅登录后上传 +- 修复一处逻辑错误 +- 修复一个漏洞 + +* 2018-8-4 v1.3.2 +- 添加广告设置 +- 完善引入机制 + +* 2018-8-3 v1.2.2 +- [重要]修复水印图片不能添加 +- 添加随机浏览上传图片 可以设定浏览数量和关闭浏览 +- 优化代码,删除无用文件 +- 完善一键CDN静态文件 + +* 2018-08-02 v1.1.2 +- [重要] 修复gif上传添加水印成静态的问题 +- 修复文字水印背景色不显示问题 +- 修复在linux下的权限错误 +- 一些优化更改 + +* 2018-08-01 v1.0.1 +- 更改相关文件目录 +- 优化代码 + +* 2018-07-30 v1.0.0 +- 最初模型 + +#### 兼容性 +文件上传视图不支持IE9以下的浏览器,api不限制。建议php5.6及以上版本,需要服务器支持Fileinfo, iconv ,zip和mbstring扩展,如果缺失会导致无法访问管理面板以及上传图片。 + +文件上传视图提供文件列表管理和文件批量上传功能,允许拖拽(需要 HTML5 支持)来添加上传文件,支持上传大图片,优先使用 HTML5,旧的浏览器自动使用Flash和Silverlight的方式兼容。 +
+ + - 感谢: [verot](https://www.verot.net "verot" )提供非常好用的class.upload.php上传类 + - 感谢: [ZUI](http://zui.sexy/ "ZUI" ) 提供css框架 + - 感谢:[tinyfilemanager](https://github.com/prasathmani/tinyfilemanager "tinyfilemanager" ) 提供的文件管理 - 本源码遵循 GNU Public License \ No newline at end of file diff --git a/config.php b/config.php index 647b424..5f3be1d 100644 --- a/config.php +++ b/config.php @@ -1,94 +1,94 @@ - '简单图床 - EasyImage', - // 网站关键字 - 'keywords' => '简单图床,easyimage,无数据库图床,PHP多图长传程序,自适应页面,HTML5,markdown,bbscode,一键复制', - // 网站描述 - 'description' => '简单图床EasyImage是一款支持多文件上传的无数据库图床,可以完美替代PHP多图上传程序,最新html5自适应页面兼容手机电脑,上传后返回图片直链,markdown图片,论坛贴图bbscode链接,简单方便支持一键复制,支持多域名,api上传。', - // 网站公告 - 'tips' => ' 单个文件限制5M,每次最多上传30张图片,本网站仅做演示用,不对图片负任何责任。', - // 图片直链域名 末尾不加"/" 如果你想上传域名是a.com但是我想上传之后返回域名是b.com 那就在这里填写b.com - 'domain' => 'https://img.545141.com', - // 存储路径 前后要加"/" 如更改此目录,需要同步修改tinyfilemanager.php中的$directories_users路径 - 'path' => '/i/', - // 最大上传限制 默认为 5242880Bytes = 5MB 请使用工具转换MB http://www.bejson.com/convert/filesize/ - 'maxSize' => 5242880, - // 每次最多上传图片数 - 'maxUploadFiles'=>30, - // 是否开启登录上传 开启:true 关闭false - 'mustLogin' => false, - // 是否开启管理 - 'tinyfilemanager' => true, - // 登录上传密码和管理密码 管理的管理员账号:admin 密码为下面密码 - 'password' => 'admin', - // 是否开启API上传 - 'apiStatus' => false, - // 是否开启水印:0关闭,1文字水印,2图片水印 动态gif不能添加水印 - 'watermark' => 0, - // 水印文字内容 - 'waterText' => '简单图床 img.545141.com', - /** - * 水印位置 - * 0:随机位置,在1~8之间随机选取一个位置 - * 1:顶部居左 2:顶部居中 3:顶部居右 4:左边居中 - * 5:图片中心 6:右边居中 7:底部居左 8:底部居中 9:底部居右 - */ - 'waterPosition' => 8, - // 水印文字颜色 rgba 末尾为透明度 范围:0-127 0为不透明 - 'textColor' => '47,79,79,0', - // 水印文字大小 - 'textSize' => 16, - // 字体路径 如果想改变字体 请选择支持中文的gb2312字体 否则中文水印会乱码 纯英文水印字体随便 - 'textFont' => APP_ROOT . '/public/static/hkxzy.ttf', - // 图片水印路径 支持GIF,JPG,BMP,PNG和PNG alpha - 'waterImg' => 'public/static/watermark.png', - // 允许上传的图片扩展名 - 'extensions'=>array('bmp','jpg','png','tif','gif','pcx','tga','svg','webp','jpeg','tga','svg','ico'), - // 转换图片为指定格式 可选:''|'png'|'jpeg'|'gif'|'bmp';默认值:'' - 'imgConvert' => '', - //最大宽度 - 'maxWidth' => 10240, - // 最大高度 - 'maxHeight' => 10240, - // 允许上传的最小宽度 - 'minWidth' => 5, - // 允许上传的最小高度 - 'minHeight' => 5, - // 等比例缩小图片 宽度和高度请设置 image_x image_y 开启true,关闭false 关闭下mage_x和image_y设置不生效 - 'imgRatio' => false, - // 缩减的最大高度 - 'image_x' => 1024, - // 缩减的最大宽度 - 'image_y' => 1024, - // 开启静态文件js css CDN 开启true 关闭false - 'static_cdn' => false, - // 开启顶部广告 如果想添加或修改广告修改 public/static/ad_top.html - 'ad_top' => false, - // 开启底部广告 如果想添加或修改广告修改 public/static/ad_bot.html - 'ad_bot' => false, - 'version' => '2.0.2.0', -); + '简单图床 - EasyImage', + // 网站关键字 + 'keywords' => '简单图床,easyimage,无数据库图床,PHP多图长传程序,自适应页面,HTML5,markdown,bbscode,一键复制', + // 网站描述 + 'description' => '简单图床EasyImage是一款支持多文件上传的无数据库图床,可以完美替代PHP多图上传程序,最新html5自适应页面兼容手机电脑,上传后返回图片直链,markdown图片,论坛贴图bbscode链接,简单方便支持一键复制,支持多域名,api上传。', + // 网站公告 + 'tips' => ' 单个文件限制5M,每次最多上传30张图片,本网站仅做演示用,不对图片负任何责任。', + // 图片直链域名 末尾不加"/" 如果你想上传域名是a.com但是我想上传之后返回域名是b.com 那就在这里填写b.com + 'domain' => 'https://img.545141.com', + // 存储路径 前后要加"/" 如更改此目录,需要同步修改tinyfilemanager.php中的$directories_users路径 + 'path' => '/i/', + // 最大上传限制 默认为 5242880Bytes = 5MB 请使用工具转换MB http://www.bejson.com/convert/filesize/ + 'maxSize' => 5242880, + // 每次最多上传图片数 + 'maxUploadFiles'=>30, + // 是否开启登录上传 开启:true 关闭false + 'mustLogin' => false, + // 是否开启管理 + 'tinyfilemanager' => true, + // 登录上传密码和管理密码 管理的管理员账号:admin 密码为下面密码 + 'password' => 'admin', + // 是否开启API上传 + 'apiStatus' => false, + // 是否开启水印:0关闭,1文字水印,2图片水印 动态gif不能添加水印 + 'watermark' => 0, + // 水印文字内容 + 'waterText' => '简单图床 img.545141.com', + /** + * 水印位置 + * 0:随机位置,在1~8之间随机选取一个位置 + * 1:顶部居左 2:顶部居中 3:顶部居右 4:左边居中 + * 5:图片中心 6:右边居中 7:底部居左 8:底部居中 9:底部居右 + */ + 'waterPosition' => 8, + // 水印文字颜色 rgba 末尾为透明度 范围:0-127 0为不透明 + 'textColor' => '47,79,79,0', + // 水印文字大小 + 'textSize' => 16, + // 字体路径 如果想改变字体 请选择支持中文的gb2312字体 否则中文水印会乱码 纯英文水印字体随便 + 'textFont' => APP_ROOT . '/public/static/hkxzy.ttf', + // 图片水印路径 支持GIF,JPG,BMP,PNG和PNG alpha + 'waterImg' => 'public/static/watermark.png', + // 允许上传的图片扩展名 + 'extensions'=>array('bmp','jpg','png','tif','gif','pcx','tga','svg','webp','jpeg','tga','svg','ico'), + // 转换图片为指定格式 可选:''|'png'|'jpeg'|'gif'|'bmp';默认值:'' + 'imgConvert' => '', + //最大宽度 + 'maxWidth' => 10240, + // 最大高度 + 'maxHeight' => 10240, + // 允许上传的最小宽度 + 'minWidth' => 5, + // 允许上传的最小高度 + 'minHeight' => 5, + // 等比例缩小图片 宽度和高度请设置 image_x image_y 开启true,关闭false 关闭下mage_x和image_y设置不生效 + 'imgRatio' => false, + // 缩减的最大高度 + 'image_x' => 1024, + // 缩减的最大宽度 + 'image_y' => 1024, + // 开启静态文件js css CDN 开启true 关闭false + 'static_cdn' => false, + // 开启顶部广告 如果想添加或修改广告修改 public/static/ad_top.html + 'ad_top' => false, + // 开启底部广告 如果想添加或修改广告修改 public/static/ad_bot.html + 'ad_bot' => false, + 'version' => '2.0.2.0', +); diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..f197d1f3e6241747d8cd110e50649e7e0d61e7f4 GIT binary patch literal 8062 zcmeHM30RcJ8UB}DP%aU9ys82!D&mcT5>yb;XsqU_2P7U*lPZX5wW39dA&EA@BaKy3 z4IVKX&(wI37?tWOUZ5d~)!>O3MH4k5Rs_7>zTfOF&jPE3_~?UAJMc35&;B#>&NtsR zgQn^D)81F(UvF)!m!{RxG>wm1d*TH`+Eww?w2^Kmm>T~7w~Pezd~Qzo6CKJx+FBA0 zL{%-q`808z$g_c5w)G;aY7uV59=@LN9TW=RfguVl`MGX8AMiWDu&PR)yuyh>|LErt zeRegXPJgB_E@usb!boOe{4^5lAZia??-+;4YV*Z;M81QA zJ(~M?BBYx?!ova)7TO6jrjNOQCx71!+)B^CdBvEYv1e(1+Kxr}2X-yapZoqF3Ji93 z@Q*6*|GQ2fq5OaRl#vDUZd$6T&-F{G`7#y?Gx9gAe*aGI@XiSD5rEDCtx><8hb3l+ z?4pTk#KTH0ez}%FaF@1Nw_+x8Pp9D4)!it%wnyRq%>$skK)GS{@^|50(-p2RPH=Im zj_O>m^z9h)V!8O$?X6eUchw9A^{(_0%$q$CC^}>slj9cWrKx#t{InBUnQM?ZBL?1H z^`&nyF@tze{v>|w9RdSi48z4UDT*WY1h_@M!r2-{8Q8xw86LIVptIMbNuNOYMfODN zVZAYM;|%Kis*?CCpCh-=LEDji;TI7GpZ?Fl;8YDxj@7Vv{p?cwOXj%6c{zvR@ZL`l z(6Obgp@?+9j9h zkvImLoer-Ic~;5WrhKgD<6fulUV?@V>d0JKgqMv4Okx}NbAn0k*8Ly!xiAB#{`EPU zHEjsz`W}e*dX`#)g>%_j_F?$m`KZ;R5$e`<$Dy=k6_S(M6V5d~ZnTmWd5SGq7dt+z za(AzR%>AEMd`wvv$Ni9NW`DGLxhKY+SW!;)CF|h6bb8|@^={mx5vBF|1l;n%|3q@$Ib=jWWQXzA-M>)%OO#|C>oZx(-b^859b<1g!?Z0P%x|M3iM zkJpYYf#hr!?oy9A{;4_(aHFyCZ&NC_$1(@yl$W~$9ojXw@OLC<>oQmT{ib#F2eg+8 z%ilb<_}3u=!? zv8^z2P%ji;-&^_dxd#W0OHkXx4IX}87_mRehQY1jOn;g3j}O#-Rf@aF zh%(){b{49cVvNMsvc;7RTOB#aqWOO|@fY7OeJhCjHxDBAk3*Gx22LEL{HVyDdB18K z{_=CUtz=X2G1c7Eor0@IywE>H#wj5BlqGL|4q|;yV(RRf;Z)aM`P1S17Qnq(L)5QR3z_?tS6=Ta!+ZZefLSwRU~g{_{+|;MI|KFQ z_b2pvI|O#}LtN|#EdFRJzE5AtJu%7c8}eWdgOXgrdVjdK1s_ZTgE?9b>46So`YYMT zPZ?Fxzudanzho@2JqxIl;&a6BJ3BkdI6n|=iT_so_`*WsN8%2Fetm+Om!zSPcG`=% zT>G}o@yq$`CN0qmGph>aQydf|MZI8TVZHYI*-`K+d!D>C*l z-rxBK?@nj_!aYe&nrhqEQqRPnPKb%Xt3&%C|I$Cp?~_IT)Rokf`4GRsF~1~YiCIJf zA%`N#{Y93KQpU40=DhcY;-9{IDcowfpnGt86;mX(l+$UpiC&1l+5FzZpYoqJS>@LE zI7j58kbFpA$xSZ?b#8-ejDey{sdxI{0_txNvHVXTYDSe`r`H!tr3?q(_*I7zwg+L{F8 z*B_zaic#4*?q$TPcEASv+0SJV9qA@E!V_{)T`@(F4Sqs6C;?1KmXhA zDu)uC;yVJl|6E4M|B|Xok^7h~L;|smI6?eG{6btJ{$@vHys0vPq6WpDl%uploaded) { - // 允许上传的mime类型 - $handle->allowed = array('image/*'); - // 文件命名 - $handle->file_new_name_body = imgName(); - // 最大上传限制 - $handle->file_max_sizes = $config['maxSize']; - // 最大宽度 - $handle->image_max_width = $config['maxWidth']; - // 最大高度 - $handle->image_max_height = $config['maxHeight']; - // 最小宽度 - $handle->image_min_width = $config['minWidth']; - // 最小高度 - $handle->image_min_height = $config['minHeight']; - // 转换图片为指定格式 - $handle->image_convert = $config['imgConvert']; - - //等比例缩减图片 - if ($config['imgRatio']) { - $handle->image_x = $config['image_x']; - } - // 存储图片路径:images/201807/ - $handle->process(APP_ROOT . config_path()); - - // 设置水印 - if ($config['watermark'] > 0) { - switch ($config['watermark']) { - case 1: // 文字水印 过滤gif - if (isAnimatedGif($handle->file_src_pathname) === 0) { - $arr = [ - # 水印图片路径(如果不存在将会被当成是字符串水印) - 'res' => $config['waterText'], - # 水印显示位置 - 'pos' => $config['waterPosition'], - # 不指定name(会覆盖原图,也就是保存成thumb.jpeg) - 'name' => $handle->file_dst_pathname, - 'font' => $config['textFont'], - 'fontSize' => $config['textSize'], - 'color' => $config['textColor'], - ]; - Imgs::setWater($handle->file_dst_pathname, $arr); - } - break; - case 2: // 图片水印 - if (isAnimatedGif($handle->file_src_pathname) === 0) { - $arr = [ - # 水印图片路径(如果不存在将会被当成是字符串水印) - 'res' => $config['waterImg'], - # 水印显示位置 - 'pos' => $config['waterPosition'], - # 不指定name(会覆盖原图,也就是保存成thumb.jpeg) - 'name' => $handle->file_dst_pathname, - ]; - Imgs::setWater($handle->file_dst_pathname, $arr); - } - break; - default: - echo $handle->error; - break; - } - } - - // 图片完整相对路径:images/201807/0ed7ccfd4dab9cbc.jpg - if ($handle->processed) { - header('Content-type:text/json'); - // 上传成功后返回json数据 - $reJson = array( - "result" => 'success', - "url" => $config['domain'] . config_path() . $handle->file_dst_name, - ); - echo json_encode($reJson); - $handle->clean(); - } else { - // 上传错误 返回错误信息 - $reJson = array( - "result" => 'failed', - "message" => $handle->error, - ); - echo json_encode($reJson,JSON_UNESCAPED_UNICODE); - } - unset($handle); +uploaded) { + // 允许上传的mime类型 + $handle->allowed = array('image/*'); + // 文件命名 + $handle->file_new_name_body = imgName(); + // 最大上传限制 + $handle->file_max_sizes = $config['maxSize']; + // 最大宽度 + $handle->image_max_width = $config['maxWidth']; + // 最大高度 + $handle->image_max_height = $config['maxHeight']; + // 最小宽度 + $handle->image_min_width = $config['minWidth']; + // 最小高度 + $handle->image_min_height = $config['minHeight']; + // 转换图片为指定格式 + $handle->image_convert = $config['imgConvert']; + + //等比例缩减图片 + if ($config['imgRatio']) { + $handle->image_x = $config['image_x']; + } + // 存储图片路径:images/201807/ + $handle->process(APP_ROOT . config_path()); + + // 设置水印 + if ($config['watermark'] > 0) { + switch ($config['watermark']) { + case 1: // 文字水印 过滤gif + if (isAnimatedGif($handle->file_src_pathname) === 0) { + $arr = [ + # 水印图片路径(如果不存在将会被当成是字符串水印) + 'res' => $config['waterText'], + # 水印显示位置 + 'pos' => $config['waterPosition'], + # 不指定name(会覆盖原图,也就是保存成thumb.jpeg) + 'name' => $handle->file_dst_pathname, + 'font' => $config['textFont'], + 'fontSize' => $config['textSize'], + 'color' => $config['textColor'], + ]; + Imgs::setWater($handle->file_dst_pathname, $arr); + } + break; + case 2: // 图片水印 + if (isAnimatedGif($handle->file_src_pathname) === 0) { + $arr = [ + # 水印图片路径(如果不存在将会被当成是字符串水印) + 'res' => $config['waterImg'], + # 水印显示位置 + 'pos' => $config['waterPosition'], + # 不指定name(会覆盖原图,也就是保存成thumb.jpeg) + 'name' => $handle->file_dst_pathname, + ]; + Imgs::setWater($handle->file_dst_pathname, $arr); + } + break; + default: + echo $handle->error; + break; + } + } + + // 图片完整相对路径:images/201807/0ed7ccfd4dab9cbc.jpg + if ($handle->processed) { + header('Content-type:text/json'); + // 上传成功后返回json数据 + $reJson = array( + "result" => 'success', + "url" => $config['domain'] . config_path() . $handle->file_dst_name, + ); + echo json_encode($reJson); + $handle->clean(); + } else { + // 上传错误 返回错误信息 + $reJson = array( + "result" => 'failed', + "message" => $handle->error, + ); + echo json_encode($reJson,JSON_UNESCAPED_UNICODE); + } + unset($handle); } \ No newline at end of file diff --git a/index.php b/index.php index 68c846e..01ef98f 100644 --- a/index.php +++ b/index.php @@ -63,6 +63,10 @@ if (@$_GET['e']==1){ + + diff --git a/public/static/ad.jpg b/public/static/ad.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c88991e242f502c041f57cbabcd8d7d0705f7843 GIT binary patch literal 39973 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 literal 0 HcmV?d00001 diff --git a/public/static/ad.png b/public/static/ad.png index 494276d8f0c9ede73a147af38c68c84008cd10f9..5a388e4fec742c94fb66974185ca3979355c4636 100644 GIT binary patch literal 52472 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
  • bA?Jm1`?gLvmlU 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 literal 40616 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 \ No newline at end of file diff --git a/public/static/ad_top.html b/public/static/ad_top.html index 2497ce8..b0031ef 100644 --- a/public/static/ad_top.html +++ b/public/static/ad_top.html @@ -1,4 +1,4 @@ - - + + + +
    +
    +
    +
    +
    +
    +
    + + + ' . PHP_EOL; + } + ?> +

    : , ', $copy_files) ?>

    +

    :
    + + / +

    +

    +

    +   + +

    + +
    +
    +
    + +
    +

    Copying

    +

    + Source path:
    + Destination folder: +

    +

    + Copy   + Move   + Cancel +

    +

    Select folder

    + +
    + + +
    +
    +
    + + +
    +
    +
    + +
    + +
    + +
    +
    + +
    + +
    +
    + + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    +
    + +
    +
    + +

    ""

    +

    + Full path:
    + File + size: = 1000): ?> () +
    + MIME-type:
    + + Files in archive:
    + Total size:
    + Size in archive:
    + Compression: %
    + '; + } + // Text info + if ($is_text) { + $is_utf8 = fm_is_utf8($content); + if (function_exists('iconv')) { + if (!$is_utf8) { + $content = iconv(FM_ICONV_INPUT_ENC, 'UTF-8//IGNORE', $content); + } + } + echo 'Charset: ' . ($is_utf8 ? 'utf-8' : '8 bit') . '
    '; + } + ?> +

    +

    +   + +   + +   + +   + + +   + +   + + +

    + '; + } else if($online_viewer == 'microsoft') { + echo ''; + } + } elseif ($is_zip) { + // ZIP content + if ($filenames !== false) { + echo ''; + foreach ($filenames as $fn) { + if ($fn['folder']) { + echo '' . fm_enc($fn['name']) . '
    '; + } else { + echo $fn['name'] . ' (' . fm_get_filesize($fn['filesize']) . ')
    '; + } + } + echo '
    '; + } else { + echo '

    Error while fetching archive info

    '; + } + } elseif ($is_image) { + // Image content + if (in_array($ext, array('gif', 'jpg', 'jpeg', 'png', 'bmp', 'ico', 'svg'))) { + echo '

    '; + } + } elseif ($is_audio) { + // Audio content + echo '

    '; + } elseif ($is_video) { + // Video content + echo '
    '; + } elseif ($is_text) { + if (FM_USE_HIGHLIGHTJS) { + // highlight + $hljs_classes = array( + 'shtml' => 'xml', + 'htaccess' => 'apache', + 'phtml' => 'php', + 'lock' => 'json', + 'svg' => 'xml', + ); + $hljs_class = isset($hljs_classes[$ext]) ? 'lang-' . $hljs_classes[$ext] : 'lang-' . $ext; + if (empty($ext) || in_array(strtolower($file), fm_get_text_names()) || preg_match('#\.min\.(css|js)$#i', $file)) { + $hljs_class = 'nohighlight'; + } + $content = '
    ' . fm_enc($content) . '
    '; + } elseif (in_array($ext, array('php', 'php4', 'php5', 'phtml', 'phps'))) { + // php highlight + $content = highlight_string($content, true); + } else { + $content = '
    ' . fm_enc($content) . '
    '; + } + echo $content; + } + ?> +
    +
    + +
    +
    +
    + +
    +
    + + + + + + + + + + + +
    +
    + ' . htmlspecialchars($content) . ''; + } elseif ($is_text) { + echo '
    ' . htmlspecialchars($content) . '
    '; + } else { + fm_set_msg('FILE EXTENSION HAS NOT SUPPORTED', 'error'); + } + ?> +
    + +
    +
    +
    + +
    +
    +

    + Full path:
    +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +

    +   + +

    +
    +
    +
    +
    + +
    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + '?'); + $group = array('name' => '?'); + } + ?> + + + + + + + + + + + + + '?'); + $group = array('name' => '?'); + } + ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +
    ..
    +
    + +
    +
    +
    + ' . readlink($path . '/' . $f) . '' : '') ?>
    +
    + + + + + + +
    +
    + +
    +
    +
    +
    + + + + + + + + + +
    + Full size: '.fm_get_filesize($all_files_size).'' ?> + '.$num_files.'' ?> + '.$num_folders.'' ?> + '.fm_get_filesize(@memory_get_usage(true)).'' ?> + '.fm_get_filesize(@disk_free_space($path)) .' free of '.fm_get_filesize(@disk_total_space($path)).''; ?> +
    +
    + +
    + +
    + +
    + + + + +
    + +
    + += $time1 && $upd) { + return false; + } + } + $ok = copy($f1, $f2); + if ($ok) { + touch($f2, $time1); + } + return $ok; +} + +/** + * Get mime type + * @param string $file_path + * @return mixed|string + */ +function fm_get_mime_type($file_path) +{ + if (function_exists('finfo_open')) { + $finfo = finfo_open(FILEINFO_MIME_TYPE); + $mime = finfo_file($finfo, $file_path); + finfo_close($finfo); + return $mime; + } elseif (function_exists('mime_content_type')) { + return mime_content_type($file_path); + } elseif (!stristr(ini_get('disable_functions'), 'shell_exec')) { + $file = escapeshellarg($file_path); + $mime = shell_exec('file -bi ' . $file); + return $mime; + } else { + return '--'; + } +} + +/** + * HTTP Redirect + * @param string $url + * @param int $code + */ +function fm_redirect($url, $code = 302) +{ + header('Location: ' . $url, true, $code); + exit; +} + +/** + * Path traversal prevention and clean the url + * It replaces (consecutive) occurrences of / and \\ with whatever is in DIRECTORY_SEPARATOR, and processes /. and /.. fine. + * @param $path + * @return string + */ +function get_absolute_path($path) { + $path = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $path); + $parts = array_filter(explode(DIRECTORY_SEPARATOR, $path), 'strlen'); + $absolutes = array(); + foreach ($parts as $part) { + if ('.' == $part) continue; + if ('..' == $part) { + array_pop($absolutes); + } else { + $absolutes[] = $part; + } + } + return implode(DIRECTORY_SEPARATOR, $absolutes); +} + +/** + * Clean path + * @param string $path + * @return string + */ +function fm_clean_path($path) +{ + $path = trim($path); + $path = trim($path, '\\/'); + $path = str_replace(array('../', '..\\'), '', $path); + $path = get_absolute_path($path); + if ($path == '..') { + $path = ''; + } + return str_replace('\\', '/', $path); +} + +/** + * Get parent path + * @param string $path + * @return bool|string + */ +function fm_get_parent_path($path) +{ + $path = fm_clean_path($path); + if ($path != '') { + $array = explode('/', $path); + if (count($array) > 1) { + $array = array_slice($array, 0, -1); + return implode('/', $array); + } + return ''; + } + return false; +} + +/* + * get language translations from json file + * @param int $tr + * @return array + */ +function fm_get_translations($tr) { + try { + $content = @file_get_contents('public/static/translation.json'); + if($content !== FALSE) { + $lng = json_decode($content, TRUE); + global $lang_list; + foreach ($lng["language"] as $key => $value) + { + $code = $value["code"]; + $lang_list[$code] = $value["name"]; + if ($tr) + $tr[$code] = $value["translation"]; + } + return $tr; + } + + } + catch (Exception $e) { + echo $e; + } +} + +/** + * @param $file + * Recover all file sizes larger than > 2GB. + * Works on php 32bits and 64bits and supports linux + * @return int|string + */ +function fm_get_size($file) +{ + static $iswin; + if (!isset($iswin)) { + $iswin = (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN'); + } + + static $exec_works; + if (!isset($exec_works)) { + $exec_works = (function_exists('exec') && !ini_get('safe_mode') && @exec('echo EXEC') == 'EXEC'); + } + + // try a shell command + if ($exec_works) { + $cmd = ($iswin) ? "for %F in (\"$file\") do @echo %~zF" : "stat -c%s \"$file\""; + @exec($cmd, $output); + if (is_array($output) && ctype_digit($size = trim(implode("\n", $output)))) { + return $size; + } + } + + // try the Windows COM interface + if ($iswin && class_exists("COM")) { + try { + $fsobj = new COM('Scripting.FileSystemObject'); + $f = $fsobj->GetFile( realpath($file) ); + $size = $f->Size; + } catch (Exception $e) { + $size = null; + } + if (ctype_digit($size)) { + return $size; + } + } + + // if all else fails + return filesize($file); +} + +/** + * Get nice filesize + * @param int $size + * @return string + */ +function fm_get_filesize($size) +{ + if ($size < 1000) { + return sprintf('%s B', $size); + } elseif (($size / 1024) < 1000) { + return sprintf('%s KB', round(($size / 1024), 2)); + } elseif (($size / 1024 / 1024) < 1000) { + return sprintf('%s MB', round(($size / 1024 / 1024), 2)); + } elseif (($size / 1024 / 1024 / 1024) < 1000) { + return sprintf('%s GB', round(($size / 1024 / 1024 / 1024), 2)); + } else { + return sprintf('%s TB', round(($size / 1024 / 1024 / 1024 / 1024), 2)); + } +} + +/** + * Get info about zip archive + * @param string $path + * @return array|bool + */ +function fm_get_zif_info($path, $ext) { + if ($ext == 'zip' && function_exists('zip_open')) { + $arch = zip_open($path); + if ($arch) { + $filenames = array(); + while ($zip_entry = zip_read($arch)) { + $zip_name = zip_entry_name($zip_entry); + $zip_folder = substr($zip_name, -1) == '/'; + $filenames[] = array( + 'name' => $zip_name, + 'filesize' => zip_entry_filesize($zip_entry), + 'compressed_size' => zip_entry_compressedsize($zip_entry), + 'folder' => $zip_folder + //'compression_method' => zip_entry_compressionmethod($zip_entry), + ); + } + zip_close($arch); + return $filenames; + } + } elseif($ext == 'tar' && class_exists('PharData')) { + $archive = new PharData($path); + $filenames = array(); + foreach(new RecursiveIteratorIterator($archive) as $file) { + $parent_info = $file->getPathInfo(); + $zip_name = str_replace("phar://".$path, '', $file->getPathName()); + $zip_name = substr($zip_name, ($pos = strpos($zip_name, '/')) !== false ? $pos + 1 : 0); + $zip_folder = $parent_info->getFileName(); + $zip_info = new SplFileInfo($file); + $filenames[] = array( + 'name' => $zip_name, + 'filesize' => $zip_info->getSize(), + 'compressed_size' => $file->getCompressedSize(), + 'folder' => $zip_folder + ); + } + return $filenames; + } + return false; +} + +/** + * Encode html entities + * @param string $text + * @return string + */ +function fm_enc($text) +{ + return htmlspecialchars($text, ENT_QUOTES, 'UTF-8'); +} + +/** + * Save message in session + * @param string $msg + * @param string $status + */ +function fm_set_msg($msg, $status = 'ok') +{ + $_SESSION[FM_SESSION_ID]['message'] = $msg; + $_SESSION[FM_SESSION_ID]['status'] = $status; +} + +/** + * Check if string is in UTF-8 + * @param string $string + * @return int + */ +function fm_is_utf8($string) +{ + return preg_match('//u', $string); +} + +/** + * Convert file name to UTF-8 in Windows + * @param string $filename + * @return string + */ +function fm_convert_win($filename) +{ + if (FM_IS_WIN && function_exists('iconv')) { + $filename = iconv(FM_ICONV_INPUT_ENC, 'UTF-8//IGNORE', $filename); + } + return $filename; +} + +/** + * @param $obj + * @return array + */ +function fm_object_to_array($obj) +{ + if (!is_object($obj) && !is_array($obj)) { + return $obj; + } + if (is_object($obj)) { + $obj = get_object_vars($obj); + } + return array_map('fm_object_to_array', $obj); +} + +/** + * Get CSS classname for file + * @param string $path + * @return string + */ +function fm_get_file_icon_class($path) +{ + // get extension + $ext = strtolower(pathinfo($path, PATHINFO_EXTENSION)); + + switch ($ext) { + case 'ico': + case 'gif': + case 'jpg': + case 'jpeg': + case 'jpc': + case 'jp2': + case 'jpx': + case 'xbm': + case 'wbmp': + case 'png': + case 'bmp': + case 'tif': + case 'tiff': + case 'svg': + $img = 'fa fa-picture-o'; + break; + case 'passwd': + case 'ftpquota': + case 'sql': + case 'js': + case 'json': + case 'sh': + case 'config': + case 'twig': + case 'tpl': + case 'md': + case 'gitignore': + case 'c': + case 'cpp': + case 'cs': + case 'py': + case 'map': + case 'lock': + case 'dtd': + $img = 'fa fa-file-code-o'; + break; + case 'txt': + case 'ini': + case 'conf': + case 'log': + case 'htaccess': + $img = 'fa fa-file-text-o'; + break; + case 'css': + case 'less': + case 'sass': + case 'scss': + $img = 'fa fa-css3'; + break; + case 'zip': + case 'rar': + case 'gz': + case 'tar': + case '7z': + $img = 'fa fa-file-archive-o'; + break; + case 'php': + case 'php4': + case 'php5': + case 'phps': + case 'phtml': + $img = 'fa fa-code'; + break; + case 'htm': + case 'html': + case 'shtml': + case 'xhtml': + $img = 'fa fa-html5'; + break; + case 'xml': + case 'xsl': + $img = 'fa fa-file-excel-o'; + break; + case 'wav': + case 'mp3': + case 'mp2': + case 'm4a': + case 'aac': + case 'ogg': + case 'oga': + case 'wma': + case 'mka': + case 'flac': + case 'ac3': + case 'tds': + $img = 'fa fa-music'; + break; + case 'm3u': + case 'm3u8': + case 'pls': + case 'cue': + $img = 'fa fa-headphones'; + break; + case 'avi': + case 'mpg': + case 'mpeg': + case 'mp4': + case 'm4v': + case 'flv': + case 'f4v': + case 'ogm': + case 'ogv': + case 'mov': + case 'mkv': + case '3gp': + case 'asf': + case 'wmv': + $img = 'fa fa-file-video-o'; + break; + case 'eml': + case 'msg': + $img = 'fa fa-envelope-o'; + break; + case 'xls': + case 'xlsx': + $img = 'fa fa-file-excel-o'; + break; + case 'csv': + $img = 'fa fa-file-text-o'; + break; + case 'bak': + $img = 'fa fa-clipboard'; + break; + case 'doc': + case 'docx': + $img = 'fa fa-file-word-o'; + break; + case 'ppt': + case 'pptx': + $img = 'fa fa-file-powerpoint-o'; + break; + case 'ttf': + case 'ttc': + case 'otf': + case 'woff': + case 'woff2': + case 'eot': + case 'fon': + $img = 'fa fa-font'; + break; + case 'pdf': + $img = 'fa fa-file-pdf-o'; + break; + case 'psd': + case 'ai': + case 'eps': + case 'fla': + case 'swf': + $img = 'fa fa-file-image-o'; + break; + case 'exe': + case 'msi': + $img = 'fa fa-file-o'; + break; + case 'bat': + $img = 'fa fa-terminal'; + break; + default: + $img = 'fa fa-info-circle'; + } + + return $img; +} + +/** + * Get image files extensions + * @return array + */ +function fm_get_image_exts() +{ + return array('ico', 'gif', 'jpg', 'jpeg', 'jpc', 'jp2', 'jpx', 'xbm', 'wbmp', 'png', 'bmp', 'tif', 'tiff', 'psd', 'svg'); +} + +/** + * Get video files extensions + * @return array + */ +function fm_get_video_exts() +{ + return array('webm', 'mp4', 'm4v', 'ogm', 'ogv', 'mov', 'mkv'); +} + +/** + * Get audio files extensions + * @return array + */ +function fm_get_audio_exts() +{ + return array('wav', 'mp3', 'ogg', 'm4a'); +} + +/** + * Get text file extensions + * @return array + */ +function fm_get_text_exts() +{ + return array( + 'txt', 'css', 'ini', 'conf', 'log', 'htaccess', 'passwd', 'ftpquota', 'sql', 'js', 'json', 'sh', 'config', + 'php', 'php4', 'php5', 'phps', 'phtml', 'htm', 'html', 'shtml', 'xhtml', 'xml', 'xsl', 'm3u', 'm3u8', 'pls', 'cue', + 'eml', 'msg', 'csv', 'bat', 'twig', 'tpl', 'md', 'gitignore', 'less', 'sass', 'scss', 'c', 'cpp', 'cs', 'py', + 'map', 'lock', 'dtd', 'svg', + ); +} + +/** + * Get mime types of text files + * @return array + */ +function fm_get_text_mimes() +{ + return array( + 'application/xml', + 'application/javascript', + 'application/x-javascript', + 'image/svg+xml', + 'message/rfc822', + ); +} + +/** + * Get file names of text files w/o extensions + * @return array + */ +function fm_get_text_names() +{ + return array( + 'license', + 'readme', + 'authors', + 'contributors', + 'changelog', + ); +} + +/** + * Get online docs viewer supported files extensions + * @return array + */ +function fm_get_onlineViewer_exts() +{ + return array('doc', 'docx', 'xls', 'xlsx', 'pdf', 'ppt', 'pptx', 'ai', 'psd', 'dxf', 'xps', 'rar'); +} + +/** + * Class to work with zip files (using ZipArchive) + */ +class FM_Zipper +{ + private $zip; + + public function __construct() + { + $this->zip = new ZipArchive(); + } + + /** + * Create archive with name $filename and files $files (RELATIVE PATHS!) + * @param string $filename + * @param array|string $files + * @return bool + */ + public function create($filename, $files) + { + $res = $this->zip->open($filename, ZipArchive::CREATE); + if ($res !== true) { + return false; + } + if (is_array($files)) { + foreach ($files as $f) { + if (!$this->addFileOrDir($f)) { + $this->zip->close(); + return false; + } + } + $this->zip->close(); + return true; + } else { + if ($this->addFileOrDir($files)) { + $this->zip->close(); + return true; + } + return false; + } + } + + /** + * Extract archive $filename to folder $path (RELATIVE OR ABSOLUTE PATHS) + * @param string $filename + * @param string $path + * @return bool + */ + public function unzip($filename, $path) + { + $res = $this->zip->open($filename); + if ($res !== true) { + return false; + } + if ($this->zip->extractTo($path)) { + $this->zip->close(); + return true; + } + return false; + } + + /** + * Add file/folder to archive + * @param string $filename + * @return bool + */ + private function addFileOrDir($filename) + { + if (is_file($filename)) { + return $this->zip->addFile($filename); + } elseif (is_dir($filename)) { + return $this->addDir($filename); + } + return false; + } + + /** + * Add folder recursively + * @param string $path + * @return bool + */ + private function addDir($path) + { + if (!$this->zip->addEmptyDir($path)) { + return false; + } + $objects = scandir($path); + if (is_array($objects)) { + foreach ($objects as $file) { + if ($file != '.' && $file != '..') { + if (is_dir($path . '/' . $file)) { + if (!$this->addDir($path . '/' . $file)) { + return false; + } + } elseif (is_file($path . '/' . $file)) { + if (!$this->zip->addFile($path . '/' . $file)) { + return false; + } + } + } + } + return true; + } + return false; + } +} + +/** + * Class to work with Tar files (using PharData) + */ +class FM_Zipper_Tar +{ + private $tar; + + public function __construct() + { + $this->tar = null; + } + + /** + * Create archive with name $filename and files $files (RELATIVE PATHS!) + * @param string $filename + * @param array|string $files + * @return bool + */ + public function create($filename, $files) + { + $this->tar = new PharData($filename); + if (is_array($files)) { + foreach ($files as $f) { + if (!$this->addFileOrDir($f)) { + return false; + } + } + return true; + } else { + if ($this->addFileOrDir($files)) { + return true; + } + return false; + } + } + + /** + * Extract archive $filename to folder $path (RELATIVE OR ABSOLUTE PATHS) + * @param string $filename + * @param string $path + * @return bool + */ + public function unzip($filename, $path) + { + $res = $this->tar->open($filename); + if ($res !== true) { + return false; + } + if ($this->tar->extractTo($path)) { + return true; + } + return false; + } + + /** + * Add file/folder to archive + * @param string $filename + * @return bool + */ + private function addFileOrDir($filename) + { + if (is_file($filename)) { + return $this->tar->addFile($filename); + } elseif (is_dir($filename)) { + return $this->addDir($filename); + } + return false; + } + + /** + * Add folder recursively + * @param string $path + * @return bool + */ + private function addDir($path) + { + $objects = scandir($path); + if (is_array($objects)) { + foreach ($objects as $file) { + if ($file != '.' && $file != '..') { + if (is_dir($path . '/' . $file)) { + if (!$this->addDir($path . '/' . $file)) { + return false; + } + } elseif (is_file($path . '/' . $file)) { + try { + $this->tar->addFile($path . '/' . $file); + } catch (Exception $e) { + return false; + } + } + } + } + return true; + } + return false; + } +} + + + +/** + * Save Configuration + */ + class FM_Config +{ + var $data; + + function __construct() + { + global $root_path, $root_url, $CONFIG; + $fm_url = $root_url.$_SERVER["PHP_SELF"]; + $this->data = array( + 'lang' => 'en', + 'error_reporting' => true, + 'show_hidden' => true + ); + $data = false; + if (strlen($CONFIG)) { + $data = fm_object_to_array(json_decode($CONFIG)); + } else { + $msg = 'Tiny File Manager
    Error: Cannot load configuration'; + if (substr($fm_url, -1) == '/') { + $fm_url = rtrim($fm_url, '/'); + $msg .= '
    '; + $msg .= '
    Seems like you have a trailing slash on the URL.'; + $msg .= '
    Try this link: ' . $fm_url . ''; + } + die($msg); + } + if (is_array($data) && count($data)) $this->data = $data; + else $this->save(); + } + + function save() + { + global $root_path; + $fm_file = $root_path.$_SERVER["PHP_SELF"]; + $var_name = '$CONFIG'; + $var_value = var_export(json_encode($this->data), true); + $config_string = " + + ' . $_SESSION[FM_SESSION_ID]['message'] . '

    '; + unset($_SESSION[FM_SESSION_ID]['message']); + unset($_SESSION[FM_SESSION_ID]['status']); + } +} + +/** + * Show page header in Login Form + */ +function fm_show_header_login() +{ +$sprites_ver = '20160315'; +header("Content-Type: text/html; charset=utf-8"); +header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); +header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0"); +header("Pragma: no-cache"); + +global $lang, $root_url, $favicon_path; +?> + + + + + + + + + + + <?php echo fm_enc(APP_TITLE) ?> + + + + +
    + + +
    + + + + + + + + + + + + + + + + + + <?php echo fm_enc(APP_TITLE) ?> + + + + + + + + + +
    + + + + + + + + +
    + + + + + + + + + + + + + + + + 'Qk04AgAAAAAAADYAAAAoAAAAEAAAABAAAAABABAAAAAAAAICAAASCwAAEgsAAAAAAAAAAAAAIQQhBCEEIQQhBCEEIQQhBCEEIQ + QhBCEEIQQhBCEEIQQhBCEEIQQhBHNO3n/ef95/vXetNSEEIQQhBCEEIQQhBCEEIQQhBCEEc07ef95/3n/ef95/1lohBCEEIQQhBCEEIQQhBCEEIQ + RzTt5/3n8hBDFG3n/efyEEIQQhBCEEIQQhBCEEIQQhBHNO3n/efyEEMUbef95/IQQhBCEEIQQhBCEEIQQhBCEErTVzTnNOIQQxRt5/3n8hBCEEIQ + QhBCEEIQQhBCEEIQQhBCEEIQQhBDFG3n/efyEEIQQhBCEEIQQhBCEEIQQhBCEEIQQxRt5/3n+cc2stIQQhBCEEIQQhBCEEIQQhBCEEIQQIIZxz3n + /ef5xzay0hBCEEIQQhBCEEIQQhBCEEIQQhBCEEIQQhBDFG3n/efyEEIQQhBCEEIQQhBCEEIQQhBK01c05zTiEEMUbef95/IQQhBCEEIQQhBCEEIQ + QhBCEEc07ef95/IQQxRt5/3n8hBCEEIQQhBCEEIQQhBCEEIQRzTt5/3n8hBDFG3n/efyEEIQQhBCEEIQQhBCEEIQQhBKUUOWfef95/3n/ef95/IQ + QhBCEEIQQhBCEEIQQhBCEEIQQhBJRW3n/ef95/3n8hBCEEIQQhBCEEIQQhBCEEIQQhBCEEIQQhBCEEIQQhBCEEIQQhBCEEIQQAAA==' + ); +} + +?>