Upload media files to iDrivee2 (S3-compatible storage) with enterprise-grade security and logging.
Information
Author:
ROBOTSTXTDownload
Price:
€0.00Requirements
Version:
1.4.1WordPress:
5.3–
7.1PHP >=
8.1Changelog
1.4.1
Release date: 2026-08-10
Highlights
- Security hardening, data preservation option, and WP-CLI commands
- 66 tests (up from 38), 100% coverage of tested classes
Added
- Data preservation option — checkbox under Settings → iDrivee2 to opt in to data deletion on uninstall (default: preserve)
- WP-CLI commands:
wp idrivee2 test-connection,wp idrivee2 cleanup-local-files,wp idrivee2 stats --days=N
Security
- Logger: validate IP with
filter_var( FILTER_VALIDATE_IP )instead ofsanitize_text_field - Admin page:
wp_unslash()at read point for$_POST['test_file'] - Cron cleanup:
wp_delete_file()replacesWP_Filesystem()(cron-safe, no credentials needed) - Uninstall: data preservation is opt-in per AGENTS policy (default: preserve all data)
Changed
- WordPress minimum corrected 4.1 → 5.3 (wp-compat verified)
- Uninstall:
delete_post_meta_by_key()replaces raw SQL robotstxt-updater.phpdocumented as EXTERNAL DEPENDENCY
Compatibility
- WordPress: 5.3 – 7.1
- PHP: 8.1 – 8.5
Tests
- PHP Coding Standards: 3.13.5 (0 errors)
- WordPress Coding Standards: 3.3.0 (0 violations)
- PHPStan: Level 9, 0 errors
- PHPUnit: 66 tests, 109 assertions
1.3.0
Release date: 2026-07-18
Highlights
- New image sub-sizes control: ship less data per upload, ideal for large camera files. Reduces work in both the WP 7.1 client-side path (browser) and the server-side path.
Added
- Settings field Image Sub-sizes under Settings → iDrivee2 with three modes:
all(default),thumbnail(only the default thumbnail),none(no sub-sizes). IDRIVEE2_MEDIA_SUBSIZES_MODEwp-config.php constant — same priority pattern as the S3 credentials; the field becomes read-only when set.- In
thumbnailandnonemodes thebig_image_size_thresholdfilter is also disabled, so WordPress no longer creates a-scaledderivative for images larger than 2560px.
Security
composer auditCVEs resolved:guzzlehttp/guzzle7.11 → 7.15,guzzlehttp/psr72.11 → 2.13,mtdowling/jmespath.php2.8 → 2.9 (CVE-2026-55767 / 55568 / 55766 / 54133).
Tooling
bin/preflight.shadded — automated pre-deploy verification per AGENTS-testing-build-deployment.md (PHPCS, PHPStan, PHPCompatibility, PHPUnit + coverage, composer audit, candidate ZIP inspection)..claude/settings.jsonadded — mechanical deny rules fordeploy.sh,git push/tag/mergeper AGENTS.md.
Compatibility
- WordPress: 4.1 – 7.1
- PHP: 8.1 – 8.5
Tests
- PHP Coding Standards: 3.13.5 (0 errors)
- WordPress Coding Standards: 3.3.0 (0 violations)
- PHPStan: Level 9, 0 errors
- PHPUnit: 38 tests, 60 assertions
1.2.1
Release date: 2026-06-05
Fixed
- Infinite recursion on image upload —
wp_update_post()(called to update the attachment GUID after S3 upload) was firing theedit_attachmentWordPress action, which re-triggered the upload method, which calledwp_update_post()again, creating infinite recursion. Xdebug killed the process at 512 stack frames, WordPress reported “The server cannot process the image”. Fixed by: (1) removing theedit_attachmenthook —wp_update_attachment_metadatacovers all new-upload scenarios; (2) adding a static re-entry guard ($in_progressper attachment ID) as a safety net.
- Fatal error: fclose() on already-closed stream — The AWS SDK (via Guzzle) closes file streams automatically after reading them for upload. The
finallyblock was attempting tofclose()streams that were already closed, throwingTypeError: fclose(): Argument #1 ($stream) must be an open stream resource. Fixed by checkingis_resource($fh)before callingfclose().
Compatibility
- WordPress: 4.1 – 7.1
- PHP: 8.1 – 8.5
Tests
- PHP Coding Standards: 3.13.5 (0 errors)
- WordPress Coding Standards: 3.3.0 (0 violations)
- PHPStan: Level 9, 0 errors
- PHPUnit: 22 tests, 54 assertions
1.2.0
Release date: 2026-06-02
Highlights
- Media uploads dramatically faster: concurrent S3 uploads + streaming from disk
Performance
- Concurrent uploads via AWS CommandPool (default 5, configurable via IDRIVEE2_UPLOAD_CONCURRENCY)
- Files now stream directly from disk (fopen + resource) instead of loading fully into memory
- Removed per-file headObject pre-check (eliminates N extra HTTP round-trips per image)
- Single DB write for upload stats per attachment (replaces one write per file)
- Hook priority lowered from 999 to 10
Compatibility
- WordPress: 4.1 – 7.1
- PHP: 8.1 – 8.5
Tests
- PHP Coding Standards: 3.13.5 (0 errors)
- WordPress Coding Standards: 3.3.0 (0 violations)
- PHPStan: Level 9, 0 errors
- PHPUnit: 22 tests, 54 assertions
1.1.4
Release date: 2026-06-02
Highlights
- Full dev tooling setup (PHPCS, PHPStan level 9, PHPUnit) and first test suite
- WordPress 7.1 and PHP 8.5 compatibility declared
Added
- Composer dev tooling: PHPCS/WPCS, PHPStan (level 9), PHPUnit, PHPCompatibility
- phpstan.neon, phpcs.xml, phpunit.xml configuration
- PHPUnit test suite (22 tests, 54 assertions): plugin headers, Config, Rate_Limiter
- bin/deploy.sh: automated ZIP generation with production vendor only
- docs/: db-migrations.md, known-issues.md
Changed
- Tested up to WordPress 7.1; PHP compatibility extended to 8.5
- PHPStan level upgraded from 8 to 9
IDRIVEE2_MEDIA_VERSIONconstant defined in plugin main file; replacesget_file_data()call in enqueue- Admin page: proper
sanitize_key()for$_GET['page'], type-check for$_POST['test_file'] - deploy.sh: switched from
composer updatetocomposer installfor reproducible builds from lock file - Logger stats: switched to
time() - ($n x DAY_IN_SECONDS)arithmetic for consistent UTC dates - uninstall.php: variable renamed to satisfy WP prefix naming rules
Fixed
- WP_Filesystem null guard before file operations in Media_Uploader
- Type-safety on all
get_option()/get_transient()results (guards against mixed types) - Rate_Limiter arithmetic: transient value narrowed to int before subtraction
- robotstxt-updater.php: short ternary operators replaced,
serialize()annotated - Media_Uploader deletion queue: malformed
timestamp=0entries now requeued instead of deleted immediately - Logger: UTC-consistent date arithmetic in both
track_s3_operation()andget_s3_stats()
Compatibility
- WordPress: 6.8 – 7.1
- PHP: 8.2 – 8.5
Tests
- PHP Coding Standards: 3.13.5 (0 errors)
- WordPress Coding Standards: 3.3.0 (0 violations)
- PHPStan: Level 9, 0 errors
- PHPCompatibility scan: 8.2-8.5
1.1.3
Release date: 2026-02-04
Highlights
- Critical bug fix for namespace issue causing fatal error
Fixed
- Critical namespace issue with Robotstxt_Updater class causing fatal error
- Fatal error “Class ‘iDrivee2MediaRobotstxt_Updater’ not found” resolved
- Added global namespace prefix (`
) toRobotstxt_Updater::init()` call in main plugin file - Plugin now loads correctly without PHP fatal errors
Technical Details
- Issue:
Robotstxt_Updaterclass is defined in global namespace but was called from withiniDrivee2Medianamespace - Solution: Changed
Robotstxt_Updater::init()toRobotstxt_Updater::init()to explicitly reference global namespace - Location: idrivee2-media-upload.php line 67
Compatibility
- WordPress: 6.8 – 6.9
- PHP: 8.2 – 8.4
- MariaDB: 10.6+
Tests
- PHP Coding Standards: 0 errors
- WordPress Coding Standards (WPCS): 3.3
- PHPStan: Level 8 (0 errors)
- PHPCompatibility: 8.2-8.4
1.1.2
Release date: 2026-02-04
Highlights
- Build system improvements for consistent PHP 8.2+ deployments
Changed
- Deployment script updated to use PHP 8.2 as platform base for production builds
- Now uses
composer update --no-devinstead ofcomposer install --no-dev - Temporarily configures
platform.php 8.2during build for consistent dependency resolution - Platform configuration cleaned up after build completes
- Deploy script updated to bin/deploy.sh version 1.1.0
Improved
- Production packages now guarantee PHP 8.2+ compatibility regardless of development environment PHP version
- Build consistency ensures reliable deployments across different server environments with varying PHP versions
- Using
composer updateensures latest compatible versions for target PHP version - Dependency resolution is consistent and predictable
Compatibility
- WordPress: 6.8 – 6.9
- PHP: 8.2 – 8.4
- MariaDB: 10.6+
Tests
- PHP Coding Standards: 0 errors
- WordPress Coding Standards (WPCS): 3.3
- PHPStan: Level 8 (0 errors)
- PHPCompatibility: 8.2-8.4
1.1.1
Release date: 2026-02-04
Highlights
- Deployment script improvements to ensure production packages are complete
Fixed
- Deployment script now includes essential files in production packages
- update.json (auto-update system) now included in deploy
- robotstxt-updater.php (auto-update handler) now included in deploy
- readme.txt (WordPress.org documentation) now included in deploy
- changelog.txt (full changelog) now included in deploy
- Updated script documentation and output messages
Improved
- Production packages now contain all files required for automatic updates from Gitea
- Deploy script version updated to 1.1.0
Compatibility
- WordPress: 6.8 – 6.9
- PHP: 8.2 – 8.4
- MariaDB: 10.6+
Tests
- PHP Coding Standards: 0 errors
- WordPress Coding Standards (WPCS): 3.3
- PHPStan: Level 8 (0 errors)
- PHPCompatibility: 8.2-8.4
1.1.0
Release date: 2026-02-04
Highlights
- Configuration and consistency improvements for PHP 8.2+ compatibility
- Updated plugin repository URLs to Gitea
- Fixed text domain consistency across all files
Changed
- Added explicit PHP version requirement (>=8.2) to composer.json
- Updated update.json with correct plugin information
- Fixed Text Domain in robotstxt-updater.php to match plugin slug (idrivee2-media-upload)
- Migrated repository from GitHub to Gitea (git.robotstxt.es)
- Added Gitea Plugin URI and Primary Branch headers
Fixed
- Composer now validates PHP version during dependency installation
- Plugin update system correctly identifies the plugin
- Translations properly loaded for updater error messages
Improved
- All text domains now consistently use ‘idrivee2-media-upload’
- Update metadata accurately reflects plugin information
Compatibility
- WordPress: 6.8 – 6.9
- PHP: 8.2 – 8.4
- MariaDB: 10.6+
Tests
- PHP Coding Standards: 0 errors
- WordPress Coding Standards (WPCS): 3.3
- PHPStan: Level 8 (0 errors)
- PHPCompatibility: 8.2-8.4
1.0.0
Release date: 2026-02-03
Highlights
- First stable production-ready release
- Enterprise-grade security with comprehensive logging
- OWASP Top 10 (2021) compliance
- PHPStan level 8 compliance with zero errors
- Security rating: A+ (Excellent)
Added
- Security logging system with comprehensive audit trail
- Rate limiting protection (60s users, 30s admins)
- S3 operation statistics tracking (30-day retention)
- Logger class for security and operations logging
- Rate_Limiter class for abuse prevention
- Comprehensive security audit documentation (7,500+ lines)
- Code quality report with metrics (3,200+ lines)
Changed
- Capability checks switched from role checks to manage_options
- Type safety with strict type hints throughout
- Error messages now user-friendly with translations
- Admin interface shows rate limit feedback
Fixed
- All 17 PHPStan level 8 type safety issues resolved
- Array type specifications added to all methods
- Null handling for AWS error messages
- Return type declarations match actual returns
- All capability checks use manage_options
Security
- OWASP Top 10 (2021) 100% compliance
- Enhanced nonce validation
- Comprehensive input sanitization and output escaping
- Security logging for all critical operations
- Rate limiting to prevent brute force attacks
Compatibility
- WordPress: 6.8 – 6.9
- PHP: 8.2 – 8.4
- MariaDB: 10.6+
Tests
- PHP Coding Standards: 0 errors
- WordPress Coding Standards (WPCS): 3.3
- PHPStan: Level 8 (0 errors)
- PHPCompatibility: 8.2-8.4
0.3.0
Release date: 2025-02-03
Highlights
- Complete refactoring to class-based architecture
- Modular file structure with dependency injection
- Added PHPUnit test framework
- Moved from Media to Settings menu
Added
- Settings page in WordPress Admin (Settings → iDrivee2)
- Timestamped test files (test-YYYYMMDDHHMMSS.txt)
- Persistent test files with delete capability
- Database-stored configuration option
- Hybrid configuration (wp-config.php + database)
- Class-based architecture with 6 classes
- PHPUnit test structure
- PHPStan static analysis
- Deployment script (bin/deploy.sh)
- Uninstall script
- Composer scripts (test, phpcs, phpstan, lint)
Changed
- Menu location from Media → iDrivee2 to Settings → iDrivee2
- Architecture from functional to object-oriented
- JavaScript version from hardcoded to dynamic
Fixed
- Code duplication eliminated (7 instances)
- WordPress Coding Standards violations
- PHP compatibility issues
- Type safety with strict declarations
Compatibility
- WordPress: 6.7 – 6.9
- PHP: 8.2 – 8.4
- MariaDB: 10.6+
Tests
- PHP Coding Standards: 0 errors
- WordPress Coding Standards (WPCS): 3.3
- PHPStan: Basic structure added
- PHPCompatibility: 8.2+
0.1.13
Release date: 2024-XX-XX
Highlights
- Initial public release
- Basic S3-compatible storage integration
Added
- Automatic media upload to S3
- Local file deletion after upload
- CDN URL rewriting
- WordPress admin testing interface
- Configuration via wp-config.php constants
- Multisite support
Compatibility
- WordPress: 6.5+
- PHP: 7.4+
- MariaDB: 10.6+