1
0
mirror of https://github.com/prasathmani/tinyfilemanager.git synced 2025-10-09 06:16:22 +02:00

4 Commits

Author SHA1 Message Date
ner0
15fc685f96 Bring offline branch up to speed with master (#1037)
* publish additional docker tags (#975)

* Update Romanian translations (#981)

* Update tinyfilemanager.php

* Prevent logout issue after page was cached (#1004)

Logout may not work otherwise, browser reloads cached page from disk instead of sending GET request ?logout=1 to server.

* tell git to always commit .php in unix-newlines (#1017)

so hopefully we don't get a repeat of https://github.com/prasathmani/tinyfilemanager/pull/994#issuecomment-1502035505

* Check if posix_getpwuid/posix_getgrgid calls were successful (#1023)

* use stream_copy_to_stream (#1014)

* use stream_copy_to_stream

it's simpler, and should be faster.
For example, stream_copy_to_stream can use sendfile ( https://man7.org/linux/man-pages/man2/sendfile.2.html ) on operating systems supporting it, which is faster and use less RAM than fread()+fwrite() (because it avoids copying data to/from userland, doing the copy entirely in-kernel~)

* fix loop early return, and workaround bug

* use feof

ref https://github.com/prasathmani/tinyfilemanager/issues/1016#issuecomment-1502081506

* added bengali translation (#1018)

* Fix upload of existing files (#1026)

* Fix typo. (#1028)

* login (Redirecting to Main domain of website instead of tfm.php) fix (#1031)

When logged in it takes to the website's main URL. For example, if I have tfm in www.example.com/tfm/index.php (index.php is tfm) then after logging in it redirects to www.example.com and then have to press back on the browser then it takes to www.example.com/tfm/index.php

* Add configurable path display modes for better privacy and clarity (#1034)

* Resize preview image and implement zoom in/out (#1036)

* Resize preview image and implement zoom in/out

* Remove redundant class name

---------

Co-authored-by: ssams <6338356+ssams@users.noreply.github.com>
Co-authored-by: Sergiu Bivol <sergiu@cip.md>
Co-authored-by: Prasath Mani <prasathmani@users.noreply.github.com>
Co-authored-by: divinity76 <divinity76@gmail.com>
Co-authored-by: Micha Ober <github@ober-mail.de>
Co-authored-by: Joy Biswas <74253956+joybiswas007@users.noreply.github.com>
Co-authored-by: Micha Ober <git@ober-mail.de>
Co-authored-by: Caleb Mazalevskis <maikuolan@gmail.com>
Co-authored-by: xololunatic <97784387+xololunatic@users.noreply.github.com>
Co-authored-by: DannyDaemonic <DannyDaemonic@gmail.com>
2023-05-07 11:54:33 +05:30
Micha Ober
e179367cbc Fix filename for DataTables (#1024) 2023-04-21 10:04:14 +05:30
Prasath Mani
5738e8c164 Merge branch 'master' of https://github.com/prasathmani/tinyfilemanager into offline 2023-02-22 07:21:08 +05:30
Prasath Mani
6ae693b1fb Add 0FFL1NE support 2023-02-22 07:18:44 +05:30
23 changed files with 5414 additions and 2698 deletions

View File

@@ -12,7 +12,7 @@ FROM php:7.4-cli-alpine
# if run in China
# RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
RUN apk add --no-cache \
RUN apk add \
libzip-dev \
oniguruma-dev

View File

@@ -7,11 +7,7 @@
[![Paypal](https://img.shields.io/badge/Donate-Paypal-lightgrey.svg?style=flat-square)](https://www.paypal.me/prasathmani)
![GitHub Sponsors](https://img.shields.io/github/sponsors/prasathmani)
> TinyFileManager is a versatile web-based PHP file manager designed for simplicity and efficiency. This lightweight single-file PHP application can be effortlessly integrated into any server directory, allowing users to store, upload, edit, and manage files and folders directly through their web browser.
With multi-language support and compatibility with PHP 5.5+, TinyFileManager enables the creation of individual user accounts, each with its dedicated directory. The platform also includes built-in functionality for handling text files using the Cloud9 IDE.
Featuring syntax highlighting for over 150 languages and more than 35 themes, TinyFileManager offers a comprehensive solution for file management in an online environment.
<sub>**Caution!** _Avoid utilizing this script as a standard file manager in public spaces. It is imperative to remove this script from the server after completing any tasks._</sub>
> TinyFileManager is web based PHP file manager and it is a simple, fast and small size in single-file PHP file that can be dropped into any folder on your server, multi-language ready web application for storing, uploading, editing and managing files and folders online via web browser. The Application runs on PHP 5.5+, It allows the creation of multiple users and each user can have its own directory and a build-in support for managing text files with cloud9 IDE and it supports syntax highlighting for over 150+ languages and over 35+ themes.
## Demo
@@ -48,23 +44,81 @@ To enable/disable authentication set `$use_auth` to true or false.
### :loudspeaker: Features
- :cd: **Open Source:** Lightweight, minimalist, and extremely simple to set up.
- :iphone: **Mobile Friendly:** Optimized for touch devices and mobile viewing.
- :information_source: **Core Features:** Easily create, delete, modify, view, download, copy, and move files.
- :arrow_double_up: **Advanced Upload Options:** Ajax-powered uploads with drag-and-drop support, URL imports, and multi-file uploads with extension filtering.
- :file_folder: **Folder & File Management:** Create and organize folders and files effortlessly.
- :gift: **Compression Tools:** Compress and extract files in `zip` and `tar` formats.
- :sunglasses: **User Permissions:** User-specific root folder mapping and session-based access control.
- :floppy_disk: **Direct URLs:** Easily copy direct URLs for files.
- :pencil2: **Code Editor:** Includes Cloud9 IDE with syntax highlighting for 150+ languages and 35+ themes.
- :page_facing_up: **Document Preview:** Google/Microsoft document viewer for PDF/DOC/XLS/PPT, supporting previews up to 25 MB.
- :zap: **Security Features:** Backup capabilities, IP blacklisting, and whitelisting.
- :mag_right: **Search Functionality:** Use `datatable.js` for fast file search and filtering.
- :file_folder: **Customizable Listings:** Exclude specific folders and files from directory views.
- :globe_with_meridians: **Multi-language Support:** Translations available in 35+ languages with `translation.json`.
- :bangbang: **And Much More!**
- :cd: Open Source, light and extremely simple
- :iphone: Mobile friendly view for touch devices
- :information_source: Basic features likes Create, Delete, Modify, View, Download, Copy and Move files
- :arrow_double_up: Ajax Upload, Ability to drag & drop, upload from URL, multiple files upload with file extensions filter
- :file_folder: Ability to create folders and files
- :gift: Ability to compress, extract files (`zip`, `tar`)
- :sunglasses: Support user permissions - based on session and each user root folder mapping
- :floppy_disk: Copy direct file URL
- :pencil2: Cloud9 IDE - Syntax highlighting for over `150+` languages, Over `35+` themes with your favorite programming style
- :page_facing_up: Google/Microsoft doc viewer helps you preview `PDF/DOC/XLS/PPT/etc`. 25 MB can be previewed with the Google Drive viewer
- :zap: Backup files and IP blacklist and whitelist
- :mag_right: Search - Search and filter files using `datatable js`
- :file_folder: Exclude folders and files from listing
- :globe_with_meridians: Multi-language(32+) support and for translations `translation.json` is file required
- :bangbang: lots more...
### [Deploy by Docker](https://github.com/prasathmani/tinyfilemanager/wiki/Deploy-by-Docker)
## Deploy by Docker
Make sure you have **already installed docker**, [Install reference](https://docs.docker.com/engine/install/)
> **Notice:** Your need an absolute path, and it will be served by tinyfilemanager.
>
> If you want to serve this project at **raspberry pi or another special platform**, you can download project and **build image by yourself**.
You can execute this following commands:
```shell
$ docker run -d -v /absolute/path:/var/www/html/data -p 80:80 --restart=always --name tinyfilemanager tinyfilemanager/tinyfilemanager:master
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
648dfba9c0ff tinyfilemanager/tinyfilemanager:master "docker-php-entrypoi…" 4 minutes ago Up 4 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp tinyfilemanager
```
Access `http://127.0.0.1/` and enter default username and password, then enjoy it.
DockerHub: [https://hub.docker.com/r/tinyfilemanager/tinyfilemanager](https://hub.docker.com/r/tinyfilemanager/tinyfilemanager)
#### How to change config within docker
Origin:
```php
// Root path for file manager
// use absolute path of directory i.e: '/var/www/folder' or $_SERVER['DOCUMENT_ROOT'].'/folder'
$root_path = $_SERVER['DOCUMENT_ROOT'];
// Root url for links in file manager.Relative to $http_host. Variants: '', 'path/to/subfolder'
// Will not working if $root_path will be outside of server document root
$root_url = '';
```
Modified:
```php
// Root path for file manager
// use absolute path of directory i.e: '/var/www/folder' or $_SERVER['DOCUMENT_ROOT'].'/folder'
$root_path = $_SERVER['DOCUMENT_ROOT'].'/data';
// Root url for links in file manager.Relative to $http_host. Variants: '', 'path/to/subfolder'
// Will not working if $root_path will be outside of server document root
$root_url = 'data/';
```
Then, change another config what you want, and add a new volume `-v /absolute/path/index.php:/var/www/html/index.php` in `docker run` command, like this:
```shell
$ docker run -d -v /absolute/path:/var/www/html/data -v /absolute/path/index.php:/var/www/html/index.php -p 80:80 --restart=always --name tinyfilemanager tinyfilemanager/tinyfilemanager:master
```
#### Stop running
If you want to stop a running docker service, or you want to restart a service, you should stop it first, or you got `docker: Error response from daemon: Conflict. The container name "/tinyfilemanager" is already in use by container ...` problem. You can execute this command:
```shell
$ docker rm -f tinyfilemanager
```
### <a name=license></a>License, Credit

View File

@@ -4,7 +4,7 @@
The team takes security bugs seriously. We appreciate your efforts to responsibly disclose your findings, and will make every effort to acknowledge your contributions.
To report a security issue, email ccpprogrammers[at]gmail[dot]com and include the word "SECURITY" in the subject line.
To report a security issue, email ccpprogrammers[at]gmail.com and include the word "SECURITY" in the subject line.
The team will send a response indicating the next steps in handling your report. After the initial reply to your report you will be kept informed of the progress towards a fix and full announcement.

File diff suppressed because one or more lines are too long

7
assets/css/bootstrap.min.css vendored Normal file

File diff suppressed because one or more lines are too long

1
assets/css/dropzone.min.css vendored Normal file

File diff suppressed because one or more lines are too long

4
assets/css/font-awesome.min.css vendored Normal file

File diff suppressed because one or more lines are too long

1
assets/css/vs.min.css vendored Normal file
View File

@@ -0,0 +1 @@
pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#fff;color:#000}.hljs-comment,.hljs-quote,.hljs-variable{color:green}.hljs-built_in,.hljs-keyword,.hljs-name,.hljs-selector-tag,.hljs-tag{color:#00f}.hljs-addition,.hljs-attribute,.hljs-literal,.hljs-section,.hljs-string,.hljs-template-tag,.hljs-template-variable,.hljs-title,.hljs-type{color:#a31515}.hljs-deletion,.hljs-meta,.hljs-selector-attr,.hljs-selector-pseudo{color:#2b91af}.hljs-doctag{color:grey}.hljs-attr{color:red}.hljs-bullet,.hljs-link,.hljs-symbol{color:#00b0e8}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 434 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

17
assets/js/ace.js Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

7
assets/js/bootstrap.bundle.min.js vendored Normal file

File diff suppressed because one or more lines are too long

22
assets/js/datatables.min.js vendored Normal file

File diff suppressed because one or more lines are too long

1
assets/js/dropzone.min.js vendored Normal file

File diff suppressed because one or more lines are too long

1361
assets/js/highlight.min.js vendored Normal file

File diff suppressed because one or more lines are too long

2
assets/js/jquery-3.6.1.min.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +1,6 @@
{
"appName": "Tiny File Manager",
"version": "2.6",
"version": "2.5.1",
"language": [
{
"name": "Română",
@@ -863,10 +863,10 @@
"Rename": "Umbenennen",
"CopyTo": "Kopieren nach",
"DirectLink": "Direktlink",
"UploadingFiles": "Dateien hochladen",
"UploadingFiles": "Datei hochladen",
"ChangePermissions": "Berechtigungen ändern",
"Copying": "Kopieren",
"CreateNewItem": "Neues Element erstellen",
"CreateNewItem": "Neue Datei erstellen",
"Name": "Name",
"AdvancedEditor": "Erweiterter Editor",
"RememberMe": "Eingeloggt bleiben",
@@ -933,7 +933,7 @@
"already exists": "existiert bereits",
"Error while moving from": "Fehler beim Verschieben aus",
"Create archive?": "Archiv erstellen?",
"Invalid file or folder name": "Ungültiger Datei- oder Ordnername",
"Invalid file or folder name": "Ungältiger Datei- oder Ordnername",
"Archive unpacked": "Archive entpackt",
"File extension is not allowed": "Dateityp nicht erlaubt",
"Root path": "Quellverzeichnis",
@@ -948,7 +948,7 @@
"Search file in folder and subfolders...": "Suchen in Ordnern und Unterordnern...",
"Access denied. IP restriction applicable": "Zugriff verweigert - IP-Beschränkung.",
"Invalid characters in file or folder name": "Unzulässige Zeichen im Datei- oder Ordnernamen",
"Operations with archives are not available": "Archiv-Funktionen nicht verfügbar",
"Operations with archives are not available": "Archiv-Funktionen nicht verfägbar",
"File or folder with this path already exists": "Datei oder Ordner mit diesem Pfad existiert bereits",
"Moved from": "Verschoben aus"
}
@@ -1393,8 +1393,8 @@
}
},
{
"name": "Português Brasileiro",
"code": "pt_BR",
"name": "Português",
"code": "pt",
"translation": {
"AppName": "Gerenciador de arquivos Tiny",
"AppTitle": "Gerenciador de arquivos",
@@ -1512,123 +1512,7 @@
"Moved from": "Movido de",
"Created": "Criado",
"You are logged in": "Você está logado",
"Login failed. Invalid username or password": "Falha na autenticação. nome de usuário ou senha inválidos",
"Are you sure want to rename?": "Tem certeza de que deseja renomear?",
"Are you sure want to": "Tem certeza de que deseja"
}
},
{
"name": "Português Europeu",
"code": "pt_PT",
"translation": {
"AppName": "Gestor de Ficheiros",
"AppTitle": "Gestor de Ficheiros",
"Login": "Iniciar sessão",
"Username": "Nome de utilizador",
"Password": "Palavra-passe",
"Logout": "Terminar sessão",
"Move": "Mover",
"Copy": "Copiar",
"Save": "Guardar",
"SelectAll": "Seleccionar tudo",
"UnSelectAll": "Desseleccionar tudo",
"File": "Ficheiro",
"Back": "Voltar",
"Size": "Tamanho",
"Perms": "Permissões",
"Modified": "Modificado",
"Owner": "Proprietário",
"Search": "Procurar",
"NewItem": "Novo item",
"Folder": "Pasta",
"Delete": "Eliminar",
"Rename": "Renomear",
"CopyTo": "Copiar para",
"DirectLink": "Ligação directa",
"UploadingFiles": "A enviar ficheiros",
"ChangePermissions": "Alterar permissões",
"Copying": "A copiar",
"CreateNewItem": "Criar novo item",
"Name": "Nome",
"AdvancedEditor": "Editor avançado",
"Actions": "Acções",
"Folder is empty": "A pasta está vazia",
"Upload": "Enviar",
"Cancel": "Cancelar",
"InvertSelection": "Inverter selecção",
"DestinationFolder": "Pasta de destino",
"ItemType": "Tipo de item",
"ItemName": "Nome do item",
"CreateNow": "Criar agora",
"Download": "Descarregar",
"Open": "Abrir",
"UnZip": "Descomprimir",
"UnZipToFolder": "Descomprimir para pasta",
"Edit": "Editar",
"NormalEditor": "Editor normal",
"BackUp": "Cópia de segurança",
"SourceFolder": "Pasta de origem",
"Files": "Ficheiros",
"Change": "Alterar",
"Settings": "Definições",
"Language": "Idioma",
"ErrorReporting": "Relatório de erros",
"ShowHiddenFiles": "Mostrar ficheiros ocultos",
"Help": "Ajuda",
"Created": "Criado",
"Help Documents": "Documentos de ajuda",
"Report Issue": "Comunicar problema",
"Generate": "Gerar",
"FullSize": "Tamanho total",
"HideColumns": "Ocultar colunas de permissões/proprietário",
"You are logged in": "Sessão iniciada",
"Nothing selected": "Nenhum ficheiro seleccionado seleccionado",
"Paths must be not equal": "Os caminhos não podem ser iguais",
"Renamed from": "Renomeado de",
"Archive not unpacked": "Arquivo não descomprimido",
"Deleted": "Eliminado",
"Archive not created": "Arquivo não criado",
"Copied from": "Copiado de",
"Permissions changed": "Permissões alteradas",
"to": "para",
"Saved Successfully": "Guardado com sucesso",
"not found!": "não encontrado!",
"File Saved Successfully": "Ficheiro guardado com sucesso",
"Archive": "Arquivo",
"Permissions not changed": "Permissões não alteradas",
"Select folder": "Seleccionar pasta",
"Source path not defined": "Caminho de origem não definido",
"already exists": "já existe",
"Error while moving from": "Erro ao mover de",
"Create archive?": "Deseja criar um arquivo?",
"Invalid file or folder name": "Nome de ficheiro ou pasta inválido",
"Archive unpacked": "Arquivo descomprimido",
"File extension is not allowed": "Extensão de ficheiro não permitida",
"Root path": "Caminho raiz",
"Error while renaming from": "Erro ao renomear de",
"File not found": "Ficheiro não encontrado",
"Error while deleting items": "Erro ao eliminar itens",
"Moved from": "Movido de",
"Generate new password hash": "Gerar novo hash de palavra-passe",
"Login failed. Invalid username or password": "Falha na autenticação. Nome de utilizador ou palavra-passe inválido",
"password_hash not supported, Upgrade PHP version": "password_hash não suportado. Actualize a versão do PHP",
"Advanced Search": "Pesquisa avançada",
"Error while copying from": "Erro ao copiar de",
"Invalid characters in file name": "Caracteres inválidos no nome do ficheiro",
"FILE EXTENSION HAS NOT SUPPORTED": "A EXTENSÃO DO FICHEIRO NÃO É SUPORTADA",
"Selected files and folder deleted": "Ficheiros e pasta seleccionados eliminados",
"Error while fetching archive info": "Erro ao obter informações do arquivo",
"Delete selected files and folders?": "Deseja eliminar os ficheiros e pastas seleccionados?",
"Search file in folder and subfolders...": "Procurar ficheiro na pasta e subpastas...",
"Access denied. IP restriction applicable": "Acesso negado. Restrição de IP activa",
"Invalid characters in file or folder name": "Caracteres inválidos no nome do ficheiro ou da pasta",
"Operations with archives are not available": "As operações com arquivos não estão disponíveis",
"File or folder with this path already exists": "Já existe um ficheiro ou pasta com este caminho",
"Are you sure want to rename?": "Tem a certeza que deseja renomear?",
"Are you sure want to": "Tem a certeza que deseja",
"Date Modified": "Data de modificação",
"File size": "Tamanho do ficheiro",
"MIME-type": "Tipo MIME"
"Login failed. Invalid username or password": "Falha na autenticação. nome de usuário ou senha inválidos"
}
},
{
@@ -2648,14 +2532,14 @@
"Operations with archives are not available": "Bewerkingen met archieven zijn niet beschikbaar",
"File or folder with this path already exists": "Bestand of map met dit pad bestaat al",
"Moved from": "Verplaatst van",
"a files": "bestanden",
"a files": "bestanden",
"Okay": "OK",
"Enter here...": "Voer hier in...",
"Enter new file name": "Voer nieuwe bestandsnaam in:",
"Enter new file name": "Voer nieuwe bestandsnaam in:",
"Full path": "Volledig path",
"File size": "Bestandsgrootte",
"Image sizes": "Afbeeldingsgrootte",
"Charset": "Karakterset",
"Charset": "Karakterset",
"Image": "Afbeelding",
"Audio": "Audio",
"Video": "Video",
@@ -2663,18 +2547,16 @@
"Files in archive": "Bestanden in archief",
"Total size": "Totale grootte",
"Compression": "Compressie",
"Size in archive": "Grootte in archief",
"Size in archive": "Grootte in archief",
"Invalid Token.": "Ongeldig token",
"Fullscreen": "Volledig scherm",
"Fullscreen": "Volledig scherm",
"Undo": "Ongedaan maken",
"Redo": "Opnieuw doen",
"Theme": "Thema",
"Theme": "Thema",
"Select Theme": "Kies thema",
"Select Font Size": "Kies fontgrootte",
"Are you sure want to rename?": "Weet u zeker dat u de naam wilt wijzigen?",
"Are you sure want to": "Verder gaan met",
"dark": "donker",
"light": "licht"
"Select Font Size": "Kies fontgrootte",
"Are you sure want to rename?": "Weet u zeker dat u de naam wilt wijzigen?",
"Are you sure want to": "Verder gaan met"
}
},
{