# IFM - improved file manager ## contents - [about](#about) - [features](#features) - [requirements](#requirements) - [installation](#installation) - [security information](#security-information) - [keybindings](#keybindings) - [configuration](#configuration) - [docker](#docker) - [screenshots](#screenshots) - [issues](#issues) ## About The IFM is a web-based filemanager, which comes as a single file solution using HTML5, CSS3, JavaScript and PHP. You can test a [demo here](https://ifmdemo.gitea.de/). The IFM uses the following resources: * [ACE Editor](https://ace.c9.io) * [Bootstrap v3](https://getbootstrap.com) * custom icon set generated with [Fontello](http://fontello.com/) * [jQuery](https://jquery.com) * [Mustache](https://mustache.github.io/) ## features * create/edit files and directories * copy/move files and directories * download files and directories * upload files directly, via URL or per drag & drop * extract archives (tar, tgz, tar.gz, tar.bz2, zip) * change permissions * image preview ## Requirements * Client * HTML5 and CSS3 compatible browser * activated javascript * Server * PHP >= 5.5 * extensions * bz2 * curl (for remote upload) * fileinfo * json * openssl (for remote uploads from https sources) * phar * posix * zip * zlib ## Installation Just copy the ifm.php to your webspace - thats all :) ## Security information The IFM is usually locked to it's own directory, so you are not able to go above. You can change that by setting the `root_dir` in the scripts [configuration](https://github.com/misterunknown/ifm/wiki/Configuration). By default, it is not allowed to show or edit the `.htaccess` file. This is because you can configure the IFM via environment variables. Thus if anyone has the ability to edit the `.htaccess` file, he could overwrite the active configuration. [See also](https://github.com/misterunknown/ifm/wiki/Configuration). ## Key bindings * e - edit / extract current file * hjkl - vim-style navigation (alternative to arrow keys) * g - focus the path input field (i.e. "goto") * r - refresh file table * u - upload a file * o - remote upload a file * a - show ajax request dialog * F - new file * D - new directory * cm - show copy/move dialog * / - search * a - ajax request * n - rename file * Space - select a highlighted item * Del - delete selected files * Enter - open a file or change to the directory * Ctrl-Shift-f - toggle fullscreen ace editor ## Configuration See [configuration](https://github.com/misterunknown/ifm/wiki/Configuration). ### authentication See [authentication](https://github.com/misterunknown/ifm/wiki/Authentication). ## Docker The docker image is based on the official php docker images (alpine version) and exposes port 80. ### Quickstart Build the image with this command in the top source dir: `docker build -t ifm .` Afterwards you can start the docker container as follows: `docker run --rm -d --name ifm -p 8080:80 -v /path/to/data:/var/www ifm:latest` ### Specify user/group By default IFM runs as user www-data (uid/gid 33). If you need to change that, you can set the UID and GID with the following environment variables: `docker run ... -e IFM_DOCKER_UID=1000 -e IFM_DOCKER_GID=100 ifm:latest` ### Other configuration The script is located at `/usr/local/share/webapps/ifm/index.php`. By default the `root_dir` is set to /var/www, so you can mount any directory at this location. If you want to bind the corresponding host directory, you can do the following: `docker run --rm -i -p "8080:80" -v "/var/www:/var/www" ifm` The scripts configuration can be changed by adjusting the corresponding docker environment variables listed below: | PHP config value | Docker env var | | ------------------ | -------------------------- | | `auth` | `IFM_AUTH` | | `auth_source` | `IFM_AUTH_SOURCE` | | `root_dir` | `IFM_ROOT_DIR` | | `root_public_url` | `IFM_ROOT_PUBLIC_URL` | | `tmp_dir` | `IFM_TMP_DIR` | | `timezone` | `IFM_TIMEZONE` | | `forbiddenchars` | `IFM_FORBIDDENCHARS` | | `language` | `IFM_LANGUAGE` | | `ajaxrequest` | `IFM_API_AJAXREQUEST` | | `chmod` | `IFM_API_CHMOD` | | `copymove` | `IFM_API_COPYMOVE` | | `createdir` | `IFM_API_CREATEDIR` | | `createfile` | `IFM_API_CREATEFILE` | | `edit` | `IFM_API_EDIT` | | `delete` | `IFM_API_DELETE` | | `download` | `IFM_API_DOWNLOAD` | | `extract` | `IFM_API_EXTRACT` | | `upload` | `IFM_API_UPLOAD` | | `remoteupload` | `IFM_API_REMOTEUPLOAD` | | `rename` | `IFM_API_RENAME` | | `zipnload` | `IFM_API_ZIPNLOAD` | | `showlastmodified` | `IFM_GUI_SHOWLASTMODIFIED` | | `showfilesize` | `IFM_GUI_SHOWFILESIZE` | | `showowner` | `IFM_GUI_SHOWOWNER` | | `showgroup` | `IFM_GUI_SHOWGROUP` | | `showpermissions` | `IFM_GUI_SHOWPERMISSIONS` | | `showhtdocs` | `IFM_GUI_SHOWHTDOCS` | | `showhiddenfiles` | `IFM_GUI_SHOWHIDDENFILES` | | `showpath` | `IFM_GUI_SHOWPATH` | | `contextmenu` | `IFM_GUI_CONTEXTMENU` | ## screenshots ## issues If you happen to find an error or miss a feature, you can create an issue on Github.