sohophp / sofinder
Compatibility meta package for the SoFinder Symfony bridge
Package info
Type:metapackage
pkg:composer/sohophp/sofinder
Requires
- php: ^8.2
- sohophp/sofinder-symfony: v1.0.0
Requires (Dev)
- guzzlehttp/psr7: ^2.7
- nyholm/psr7: ^1.8
- phpstan/phpstan: ^2.1
- phpunit/phpunit: ^11.5
- sohophp/sofinder-psr15: v1.0.0
Suggests
- ext-gd: Required for thumbnails and image editing
- ext-imagick: Adds ICO processing support when its ImageMagick coder is installed
- ext-pdo: Enables the optional multi-node shared database state store
- ext-redis: Enables the optional multi-node shared Redis state store
- ext-zip: Required for ZIP archive downloads
- symfony/messenger: Enables asynchronous maintenance and document preview jobs
Conflicts
- sohophp/sofinder-legacy: *
This package is auto-updated.
Last update: 2026-08-29 07:49:40 UTC
README
Traditional Chinese: README.zh-TW.md
SoFinder is an original MIT-licensed file manager for PHP 8.2 through 8.5. It provides a framework-independent core, a Symfony 6.4/7.4 bundle, and a React user interface.
The project is independently designed and does not contain code, artwork,
translations, styles, or other assets from proprietary file managers.
Runtime dependency notices are recorded in THIRD_PARTY_NOTICES.md.
Symfony installation
Register SohoPHP\SoFinder\SoFinderBundle, import
@SoFinderBundle/Resources/config/routes.yaml, and configure one or more
resource types under so_finder.resources. See docs/symfony.md.
Implemented capabilities include authenticated browsing, search, upload, download, folder creation, rename, recoverable deletion, copy/move with automatic conflict names, server-bounded pagination, name/size/date sorting, grid/list views, multi-select and bounded batch copy/move/delete with per-entry results, folder-tree navigation, context/long-press menus, clipboard and targeted drag and drop, per-file/chunked upload progress, cancellation, explicit conflict replacement, cached thumbnails, EXIF-aware image rotation and proportional resize, Canvas-based cropping, derived-image presets, bounded ZIP downloads, responsive layout, English, Simplified Chinese, Traditional Chinese, and CKEditor 4 browse/upload adapters.
Resources may define byte quotas, required Symfony roles and operation-specific
role overrides. Completed mutations emit structured PSR-3 audit log entries.
Per-user favorites, tags, and 50 recent entries are stored atomically through a
replaceable metadata store interface.
The Symfony integration also includes a validated theme configuration, a
tagged plugin descriptor registry, keyboard file navigation, visible focus,
and screen-reader selection announcements. See docs/plugins.md for the
public extension contract.
Image details report decoded pixel dimensions. Image edits default to an automatically named copy; overwrite is explicit. Cropping supports zoom, pan, eight handles, ratios, keyboard/numeric tuning, undo/redo and comparison. A per-browser gear menu controls optional image tools; rotation and preset sizes are hidden by default. Copy and move use a folder picker that can navigate the complete configured resource while the server continues to enforce its path sandbox and ACLs. Each resource can independently limit Unicode file-name length, folder-name length, and folder depth. These limits are enforced for upload, folder creation, rename, copy, and move, including the descendants of transferred folder trees.
Uploads use a private quarantine, actual-byte limits, active-content inspection
and full image decoding before atomic publication. SoFinder also provides
inherited path ACLs, public/proxy delivery, Range/ETag responses, operation
gates, structured failure audits and a private 30-day recycle bin. Run
sofinder:security:audit during deployment and schedule
sofinder:trash:cleanup and sofinder:uploads:cleanup when using an external
scheduler. Bounded inline maintenance is the default; see
docs/maintenance.md and docs/security.md.
Image processing supports web-embeddable JPEG, PNG, GIF, WebP, AVIF, BMP and ICO, using GD when available and an optional Imagick ICO fallback. Decoded images are limited to 50 million pixels and edits preserve the original file format and extension. HEIC, HEIF and TIFF may be stored in a general file resource but are not decoded, previewed or edited. Thumbnail cache entries expire after 30 days and are capped at 5,000 files. ZIP downloads accept at most 100 selected roots, 1,000 total entries and 512 MB.
Development
composer install
vendor/bin/phpunit
composer phpstan
cd frontend
corepack pnpm install
corepack pnpm build
corepack pnpm test:unit
The supported storage extension contract is documented in
docs/storage-adapters.md; public PHP contracts, HTTP compatibility and
versioning are documented in docs/php-contracts.md, docs/http-api.md and
docs/versioning.md. Supported raster codecs and their runtime requirements
are listed in docs/image-formats.md. Runnable Symfony 6.4 and 7.4
installation variants are under examples/symfony.