Self-hosted service
icret/EasyImages2.0 avatar
icret/EasyImages2.0

EasyImages2.0: a database-free PHP image host you configure through files

简单图床 - 一款功能强大无数据库的图床 2.0版

3,791 stars535 forksPHPGPL-2.0

At a glance

What is it?
EasyImages2.0 is a PHP image upload and hosting script aimed at single-operator or guest-upload sites. It stores settings in files rather than a database, which keeps deployment small but puts the burden of protection on the web server configuration.
Who is it for?
Adopt EasyImages2.0 if you run a single-operator or guest-upload image host and can serve the config directory as non-executable, non-readable static files. Do not adopt it for multi-user or complex scenarios; the README states it is not suitable for those.
Can I use it commercially?
Yes, with conditions. GPL-2.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 38 days ago.
What is it written in?
Mainly PHP, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 27, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What EasyImages2.0 is and who it is for

EasyImages2.0 is a PHP image hosting script that has been developed since July 2018, according to the README. It accepts uploads, stores the files, and returns the resulting image URL in several formats: plain URL, Markdown, BBCode and HTML. The repository is not archived, and the last push was on 2026-08-22. The most recent release listed is 2.8.6, published on 2025-03-24.

The README is unusually direct about scope. It states that the program has very low environment requirements and is suited to a single scenario (guest uploads) and personal use, and that it is not suitable for multi-user or complex scenarios. That sentence is the whole adoption decision in one line. This is a tool for one person, or for one person who lets anonymous visitors upload, not a shared platform with accounts, quotas per tenant or billing.

The feature list supports that reading. There is an API, an option to require login before uploading, image quality and compression settings, text and image watermarks, forced width or height, conversion to a chosen format, minimum width and height limits, uploads of file types other than images, online image management, site statistics, advertising slots, a content-moderation check, custom code injection, upload IP allow and block lists, IP geolocation in upload logs, a daily upload cap, and the ability to create upload-only users. Most of these are switches an operator sets once, not features an end user interacts with.

How it works without a database

The name of the project is the architecture. There is no database layer in the repository tree. The top-level entries are directories such as admin/, api/, app/, config/, docs/, i/, install/ and public/, plus index.php. Settings live in the config/ directory as files, and the application reads them at request time.

The upload path runs from a browser form or an HTTP request to the API endpoint. The image is processed by the bundled class.upload.php library from verot, which the README credits under acknowledgements, and the admin interface is built on ZUI, also credited there. That library is where the quality, compression, resize, watermark and format-conversion options are applied before the file is written to storage. The README notes that the file upload view offers list management and batch upload, that drag and drop needs HTML5 support, and that older browsers fall back to Flash and Silverlight.

The trade-off is visible in the directory layout. With no database, there is also no schema to migrate and no SQL credentials to leak, and the whole application can be copied between hosts as files. The cost is that anything the application needs to persist beyond the images themselves, such as upload logs, statistics and settings, has to be written to disk, and the security of the installation depends on the web server refusing to serve those files. The repository ships a SECURITY.md at the top level and a separate security configuration document under docs/, which is a reasonable signal that the maintainer treats this as the main risk area rather than an afterthought.

Installing EasyImages2.0 and making a first upload

The README points to a dedicated installation document at docs/安装图床.md and lists a recommended environment of Nginx with PHP 7.0 or newer on Linux. The minimum is PHP 5.6. The README is explicit that PHP must have the Fileinfo, iconv, zip, mbstring and openssl extensions, and that missing extensions will cause uploads and image deletion to fail. Check that before anything else, because a missing extension produces a broken install rather than a clear error.

The README does not give a command-line installer. Installation is done by placing the repository files under a web root and opening the install/ directory in a browser; the README's table of contents links to docs/安装图床.md for the full steps and to docs/安全配置.md for hardening. The README also lists third-party installation guides under docs/三方安装指南.md, including Docker, but does not document the commands itself.

Once installed, the first real use is a single upload through the web interface at index.php, or a request to the API documented in docs/API.md. The API returns the image URL along with Markdown, BBCode and HTML variants, which is the point of the tool for anyone writing documentation or forum posts. If you want the API to be the only entry point, the README lists a setting to require login before uploading, which turns the public form off and leaves authenticated uploads. The README does not document rollback or uninstall steps, so plan the config/ directory as something you back up before upgrades rather than something you can regenerate.

Where EasyImages2.0 is the wrong tool

The README answers this itself. It says the program suits a single scenario (guest uploads) and personal use, and is not suitable for multi-user or complex scenarios. Anyone who needs per-user accounts, storage quotas, team permissions or an audit trail tied to identities should look elsewhere; the closest thing here is creating upload-only users and an IP allow and block list, which is not the same as a multi-tenant system.

The second limitation is operational. A file-based configuration means the security boundary is the web server, not the application. If config/ is reachable over HTTP and the server executes or serves its contents, the installation is exposed. The project ships a security document, but the README does not state that the installer enforces this for you, so it is on the operator to confirm. Treat the documented security configuration as required reading, not optional hardening.

The third is the maintainer's own warning. The README says, in effect, that the author writes bugs, that bug reports go to the issues page, and that anyone who wants stability should download the stable release. That is a candid statement about release discipline: the master branch is not the place to run a public image host. The last push was on 2026-08-22 while the newest listed release is 2.8.6 from 2025-03-24, so branch and release are not the same thing and the README tells you which one to pick.

EasyImages2.0 compared with a full gallery application

The nearest alternative in kind is a self-hosted gallery or media manager built on a database, such as Piwigo or a similar PHP gallery. The difference is not the feature list; it is what each one assumes about its users. A gallery application is designed around accounts, albums, permissions and a relational store for metadata. It expects a database server, and it gives you query-driven browsing, tagging and per-user access as first-class features.

EasyImages2.0 goes the other way. It drops the database entirely, keeps settings in files, and concentrates on the upload-to-URL path: process the image, store it, hand back a link in the format the caller asked for. For a personal image host or a guest upload endpoint, that is a smaller surface to run and back up. For anything where you need to search, tag, or grant selective access to a library, the gallery application is the right shape and EasyImages2.0 is not.

A second alternative is object storage with a signed-upload flow, where the application never touches the bytes. That removes the PHP image-processing step entirely, but you also lose the watermarking, resizing and format conversion that the bundled class.upload.php library provides, and you take on a cloud dependency. The choice comes down to whether you want image processing in your own PHP process or not.

Maintenance, upgrades and the GPL-2.0 licence

The project is licensed GPL-2.0, with copyright attributed to the EasyImage developer, Icret, from 2018. GPL-2.0 is a copyleft licence. If you distribute a modified version of this program, the licence's terms apply to that distribution, and the repository's LICENSE file is the governing text. This article is not legal advice; read the licence and, if you plan to redistribute a modified build, get proper advice.

Running it yourself and not distributing it is the common case and the one the README describes. The maintenance cost is low in one sense and non-zero in another. There is no database to migrate, so upgrades are file replacements plus whatever the update document at docs/图床更新升级.md prescribes. The README does not document rollback, so back up config/ and your image directory before an upgrade rather than assuming you can revert by swapping files back.

Release cadence is uneven. The listed releases are 2.8.6 on 2025-03-24, 2.8.5 on 2024-06-14 and 2.8.4 on 2024-02-10, while the last push to the repository was on 2026-08-22. That gap between the newest release and the newest commit is the practical question for anyone deploying: pin to a tagged release, and check the update document before moving to a newer tag.

Editorial conclusion

Adopt EasyImages2.0 if you run a single-operator or guest-upload image host and can serve the config directory as non-executable, non-readable static files. Do not adopt it for multi-user or complex scenarios; the README states it is not suitable for those. Before deploying, verify that your PHP build includes Fileinfo, iconv, zip, mbstring and openssl, and confirm your web server blocks HTTP access to config/.

Frequently asked questions

Does EasyImages2.0 need a database?

No. The project name and its description state it is database-free, and the repository tree has no database layer; settings are read from the config/ directory. That is also why protecting config/ at the web server level matters.

What PHP version and extensions does EasyImages2.0 require?

The README gives a minimum of PHP 5.6 and recommends PHP 7.0 or newer, with Nginx and Linux as the recommended environment. It also states that the Fileinfo, iconv, zip, mbstring and openssl extensions are required, and that missing extensions will cause uploads and image deletion to fail.

Can EasyImages2.0 be used by multiple users?

The README states the program is suited to a single scenario (guest uploads) and personal use, and is not suitable for multi-user or complex scenarios. It does offer upload-only users and IP allow and block lists, but those are not a multi-tenant permission system.

Which version of EasyImages2.0 should be installed?

The README advises downloading the stable release if you want stability, and points bug reports to the issues page. The newest listed release is 2.8.6 from 2025-03-24, while the last push to the repository was on 2026-08-22, so the branch and the release are not the same code.

Official sources

  1. icret/EasyImages2.0 on GitHub
  2. License: GPL-2.0
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/icret-easyimages2-0.svg)](https://hysenlabs.com/projects/icret-easyimages2-0)