Files—单文件 PHP文件、相册管理器files.photo.gallery

Files—单文件 PHP文件、相册管理器files.photo.gallery

一、Files—单文件 PHP文件、相册管理器

详情内容

Files是一个单文件的PHP应用程序,可以将其放置在服务器上的任何目录中,从而立即创建文件和文件夹的库。它支持所有文件类型,并允许您预览图像,视频,音频和代码。
Files 是一个单文件 PHP 应用程序,可以放入服务器上的任何文件夹,立即创建文件和文件夹库。它支持所有文件类型,并允许您预览图像、视频、音频和文本文件。

无需复杂安装即可即时浏览文件和文件夹。
与客户、朋友和家人方便地共享文件和照片。
用作您网站的简单而美丽和现代的画廊。

直接在服务器上上传和管理文件和文件夹,无需使用 FTP

开源免费PHP写的目录列表源码Files,漂亮适合图片展示

论坛

https://forum.files.gallery/

官网地址

https://files.photo.gallery/
https://www.files.gallery/

演示站

https://demo.files.gallery/?balloons

设置说明

https://forum.photo.gallery/viewtopic.php?f=66&t=9964
https://www.files.gallery/docs/install/

文档

https://www.files.gallery/docs/install/

程序开源免费,功能不限制,只是不付费的话会弹授权窗口,窗口可关闭。也可以自己研究下将其删掉。如果不知道怎么删除,可以联系站长进行删除。

特点

  • 具有高级文件查看功能的漂亮界面,专为现代浏览器而设计。

  • 可以实时调整以适应当前视图的高级画廊布局。

  • 根据名称、类型或特定属性对文件进行实时排序和过滤。

  • 通过缓存预览图像、菜单和文件夹实现最佳快速页面加载。

  • 用于查看和编辑文本和代码格式的漂亮代码荧光笔。

  • 高级树形菜单导航显示整个目录结构,以便快速访问文件夹。

  • 可选的用户名和密码,仅允许授权用户访问。

  • 多语言界面,默认从检测到的浏览器语言分配。

  • 漂亮的弹出界面,为您的照片显示 IPTC、EXIF 和 GPS 地图。

  • 全景查看器从 equirectangular 源文件创建交互式 360° 视图。

  • 直接在浏览器中预览和播放浏览器支持的视频格式。

  • 允许访问者以 zip 或多文件下载的形式下载目录中的所有文件。

安装要求

文件应用程序需要具有PHP 5.5 或更高版本的 Web 服务器。此外,某些功能需要执行以下操作:

  • 启用 PHP GD 扩展以调整图像大小。
  • PHP EXIF 启用以读取图像数据。
  • PHP iptcparse()读取图像 IPTC 元数据。
  • PHP ZipArchive 在下载文件夹中的所有文件时压缩档案。
  • PHP mime_content_type() 或 finfo_file() 在服务器上获取文件 mime 类型(安全性)。
  • PHP exif_imagetype()用于验证图像上传(安全)。
  • PHP session_start()并为登录机制正确配置了session_save_path。
  • PHP ini_get()和ini_set()用于各种功能。
  • FFmpeg命令行工具和用于视频缩略图的PHP exec() 。
  • 足够的 PHPmemory_limit来调整图像大小。
  • file_uploads为上传机制启用PHP 。
  • 与最大文件上传大小匹配的PHP upload_max_filesize。
  • PHP mbstring用于包含具有多字节字符编码的元数据的图像。

检查服务器

您可以通过附加?check=1到文件应用程序 URL 来检查服务器上的可用功能。

http://www.yourwebsite.com/files/?check=1

从我们的文件应用演示中检查 ?check=1。

长鸿修改去授权弹窗版

http://pan.coolxy.top:90/?source#files-0.7.0-%E9%95%BF%E9%B8%BF%E6%9C%AC%E5%9C%B0%E5%8C%96%E5%8E%BB%E6%8E%88%E6%9D%83%E5%BC%B9%E7%AA%97.zip

效果截图

img

img

img

img

二、弹窗破解手记

最近又升级到了最新的0.6.0版本,之前破解的无法再用,本着学习的态度,对新版本的弹窗进行破解。

1.js本地化

首先是查看index.php源码,发现js部分有了变化:

    <?php

    // load _files/js/custom.js if exists
    get_include('js/custom.js');

    // load all Javascript assets
    foreach (array_filter([
      'sweetalert2@11.4.23/dist/sweetalert2.min.js',
      'animejs@3.2.1/lib/anime.min.js',
      '@exeba/list.js@2.3.1/dist/list.min.js',
      'yall-js@3.2.0/dist/yall.min.js',
      'filesize@9.0.11/lib/filesize.min.js',
      'screenfull@5.2.0/dist/screenfull.min.js',
      'dayjs@1.11.4/dayjs.min.js',
      'dayjs@1.11.4/plugin/localizedFormat.js',
      'dayjs@1.11.4/plugin/relativeTime.js',
      (in_array(config::$config['download_dir'], ['zip', 'files']) ? 'js-file-downloader@1.1.24/dist/js-file-downloader.min.js' : false),
      (config::$config['download_dir'] === 'browser' ? 'jszip@3.10.1/dist/jszip.min.js' : false),
      (config::$config['download_dir'] === 'browser' ? 'file-saver@2.0.5/dist/FileSaver.min.js' : false),
      'codemirror@5.65.6/mode/meta.js',
      'files.photo.gallery@' . config::$version . '/js/files.js'     //这里是files.js的地址,但是是相对地址
    ]) as $key) echo '<script src="' . config::$assets . $key . '"></script>';
    ?>

files.js的地址变为了

 'files.photo.gallery@' . config::$version . '/js/files.js' 

结全后面的 echo '<script src="' . config::$assets . $key . '"></script>'

实际上就是$assets变量加$key变量,加 ‘files.photo.gallery@’ ,再加config::$version(版本号变量),再加 ‘/js/files.js’

回头找到相关的变量,实际地址就出来了:

https://cdn.jsdelivr.net/npm/files.photo.gallery@0.6.0/js/files.js

另:找到github项目地址,可下载files.js

https://github.com/mjau-mjau/files.photo.gallery

将本文件下载,放js目录内,

其它js一样的下载来

https://cdn.jsdelivr.net/npm/sweetalert2@11.4.23/dist/sweetalert2.min.js
https://cdn.jsdelivr.net/npm/animejs@3.2.1/lib/anime.min.js
https://cdn.jsdelivr.net/npm/@exeba/list.js@2.3.1/dist/list.min.js
https://cdn.jsdelivr.net/npm/yall-js@3.2.0/dist/yall.min.js
https://cdn.jsdelivr.net/npm/filesize@9.0.11/lib/filesize.min.js
https://cdn.jsdelivr.net/npm/screenfull@5.2.0/dist/screenfull.min.js
https://cdn.jsdelivr.net/npm/dayjs@1.11.4/dayjs.min.js
https://cdn.jsdelivr.net/npm/dayjs@1.11.4/plugin/localizedFormat.js
https://cdn.jsdelivr.net/npm/dayjs@1.11.4/plugin/relativeTime.js
https://cdn.jsdelivr.net/npm/js-file-downloader@1.1.24/dist/js-file-downloader.min.js
https://cdn.jsdelivr.net/npm/jszip@3.10.1/dist/jszip.min.js
https://cdn.jsdelivr.net/npm/file-saver@2.0.5/dist/FileSaver.min.js
https://cdn.jsdelivr.net/npm/codemirror@5.65.6/mode/meta.js

把循环中的地址改为相对地址,再将config::$assets变量删除,就不会从远程连接js文件了,如下:

    foreach (array_filter([
      'js/sweetalert2.min.js',
      'js/anime.min.js',
      'js/list.min.js',
      'js/yall.min.js',
      'js/filesize.min.js',
      'js/screenfull.min.js',
      'js/dayjs.min.js',
      'js/localizedFormat.js',
      'js/relativeTime.js',
      (in_array(config::$config['download_dir'], ['zip', 'files']) ? 'js/js-file-downloader.min.js' : false),
      (config::$config['download_dir'] === 'browser' ? 'js/jszip.min.js' : false),
      (config::$config['download_dir'] === 'browser' ? 'js/FileSaver.min.js' : false),
      'js/meta.js',
      'js/files.js'
    ]) as $key) echo '<script src="'. $key . '"></script>'; //将中间的变量config::$assets删除

保存后,看浏览器如果正常运行,说明本地化成功,下面就是要在files.js中去除授权弹窗了。

2.去除授权弹窗

这个files.js是一个非格式化的代码文件,太伤心,要慢慢找弹窗函数。

先看弹窗的内容,查找弹窗内容所在函数,将本函数注释掉即可:

    /*
    function n(e){
        J=!1;var t,i=(e?'<div class="alert alert-danger" role="alert"><strong>Invalid license</strong><br>You have entered an invalid license key.</div>':"")+'<div id="pay"><div id="pay_info"><strong class="license-header">Purchase a <a href="https://www.files.gallery/docs/license/" target="_blank" tabIndex="-1">license</a> to unlock features!</strong><a class="license-small" href="https://www.files.gallery/" target="_blank" tabIndex="-1">www.files.gallery</a>\t\t'+(t='<div class="license-features">',["Remove this popup","Upload","Download folder zip","Code and text editor","Create new file","Create new folder","Rename","Delete","Duplicate file","Panorama viewer","Dedicated support","More features coming!"].forEach((function(e){t+='<div class="license-feature">'+F.get_svg_icon("check")+e+"</div>"})),t+'</div><div class="license-small">* After purchase, you will receive <strong>license key</strong> by email.</div><a href="https://license.files.gallery/')+(location.search.includes("test=1")?"?test=1":"")+'" target="_blank" class="btn btn-success text-light" id="buy_button" tabIndex="-1">BUY LICENSE<span class="buy-button-price">$39.00</span></a>\t\t</div></div>\t\t<form id="license_form" novalidate>\t\t\t<input id="license_key" class="form-control" type="text" placeholder="LICENSE-KEY" tabIndex="-1" required>\t\t\t<button id="continue_free" type="button" class="btn btn-light">No thanks!</button>\t\t\t<button id="license_save_button" type="submit" class="btn btn-success text-light" style="display:none;">Save</button>\t\t</form>',a=(Swal.fire({html:i,width:"30em",showConfirmButton:!1,customClass:{popup:"license-popup",htmlContainer:"license-container"},didOpen:setTimeout(q,100)}),_id("license_form")),n=a.parentNode,o=_id("buy_button"),l=_id("license_key"),s=_id("license_save_button"),r=_id("continue_free"),c=_id("pay"),p=new RegExp(S("XkYxLVtBLVowLTldezR9LVtBLVowLTldezR9LVtBLVowLTldezR9LVtBLVowLTldezR9LVtBLVowLTldezR9LVtBLVowLTldezR9JA=="));function d(e){n.style.cssText=e?"pointer-events:none;opacity:.5":""}function m(e){var t=l.value.trim(),i=t&&p.test(t),a="submit"===e.type;l.classList.toggle("is-valid",i),l.classList.toggle("is-invalid",(t||a)&&!i),s.style.display=i?"":"none",r.style.display=i?"none":"",a&&(e.preventDefault(),e.stopPropagation(),i&&(d(1),T({params:S("YWN0aW9uPWxpY2Vuc2Uma2V5PQ")+t,json_response:!0,complete:function(e,t,i){i&&e.success?(J=!0,ie.fire("License saved!")):(d(0),alert("Failed to save license key"))}})))}o.addEventListener("click",(e=>{var t=_h.popup(e,800,1e3,o.href,"buy");window.addEventListener("message",(e=>{e.source===t&&/^https:\/\/.*(files|photo)\.gallery/.test(e.origin)&&(c.innerHTML="<p>Thanks for purchasing! Please "+(e.data?"save your license key":"check your email")+".</p>",e.data?(l.value=e.data,l.dispatchEvent(new Event("input",{bubbles:!0})),s.focus()):l.focus())}),!1)})),w(r,(e=>Swal.close())),w(a,m,"input"),w(a,m,"submit")}
        */

回到浏览器刷新,因为有缓存,依然还是有弹窗,弹窗不在。

可能要多刷新几次,或者强刷。

三、css本地化

将files.css下载到css/files.css,理论上可大幅提升呈现速度

wget https://cdn.jsdelivr.net/npm/files.photo.gallery@0.6.0/css/files.css
<!--link href="<?php echo config::$assets ?>files.photo.gallery@<?php echo config::$version ?>/css/files.css" rel="stylesheet"-->
#改为:
<link href="css/files.css" rel="stylesheet">

四、本地自托管服务

普通页面依赖于网络托管js和css,但有些情况下访问太慢,可以自建托管服务:

自托管(以下内容从官方自动翻译而来,自行理解)

默认情况下,所有 Javascript 和 CSS 资产都是从JsDelivr CDN加载的。这可确保无论访问者的地理位置如何,资产都能快速加载,并且文件库在单个文件中保持可移植性。但是,在某些情况下,将资产自托管在您自己的服务器上可能会有所帮助。

  • 允许文件库在没有互联网连接的情况下工作。
  • 如果 JsDelivr CDN 速度慢或不可靠,例如在中国境内。
  • 出于其他隐私原因。

使用说明

1. 下载资产

下载与您的文件库版本相对应的资产 ZIP。例如,如果您使用的是 version 0.6.0,请使用下面的下载链接。如果您使用的是其他版本,请替换0.6.0为您的版本号。下载与您正在使用的版本相匹配的资产很重要,因为包含的资产将取决于文件库版本,并且可能会随着新版本的变化而变化。

https://cdn.jsdelivr.net/npm/files.photo.gallery@0.6.0/_files/assets/assets.zip

2.解压

解压缩,assets.zip以便所有资产都包含在_files/assets相对于您的文件库安装的内部。你的目录看起来像这样:

├── _files
│   └── assets
│       ├── file-saver@2.0.5
│       ├── @uppy
│       ├── files.photo.gallery@0.6.0
│       └── ...

3. 分配assets配置选项

最后,将assets配置选项指向您的_files/assets目录。这将有效地导致文件库从该位置加载所有资产,而不是从 jsDelivr CDN。

'assets' => '_files/assets',

这里的设置很有意思,也可以在index.php内将assets变量改assets的路径
//if($is_doc) self::$assets = empty(self::$config[‘assets’]) ? ‘https://cdn.jsdelivr.net/npm/‘ : rtrim(self::$config[‘assets’], ‘/‘) . ‘/‘;
https://cdn.jsdelivr.net/npm/,改为_files/assets,再将里面的files.js替换为去除授权弹窗的文件,就变为全部js自托管了。速度杠杠的,毕竟大多数情况下都是自己用。

升级

每当您升级文件库时,您都需要重复步骤 #1 和 #2

另类资产路径

该路径_files/assets是存储文件库资产的推荐位置,但您可以使用完全不同的路径。例如,如果您的服务器上有多个文件库安装,您可能希望从共享位置提供资产。一些例子:

// serve assets from an absolute location on your host, which may then be re-used for multiple Files gallery installations.
'assets' => '/files_assets',

// basically the same as above, but includes the hostname, in which case you could share the assets for multiple Files gallery installations across different domains.
'assets' => 'https://yourhost.com/files_assets',

// You could also use paths relative to your Files gallery installation.
'assets' => '../../files_assets',

// You could also upload assets to your own CDN service.
'assets' => 'https://files.alicdn.com/assets',

// Or simply re-assign the default CDN url from cdn.jsdelivr.net to fastly.jsdelivr.net. This is a nice trick for example if China decides to temporarily block one domain but not the other
'assets' => 'https://fastly.jsdelivr.net/npm',

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 910009183@qq.com

×

喜欢就点赞,疼爱就打赏