Correctness: the scanner now separates the requested plugin setting, the WordPress-filtered display value, the raw PHP ini values, a calculated PHP ceiling (minimum positive of upload_max_filesize/post_max_size), a multisite per-file network quota where relevant, and the best-known usable limit, instead of one blended number.
Safety: removed the unsafe upload_max_filesize = 0 / post_max_size = 0 “Unlimited” implementation. PHP treats upload_max_filesize=0 as disabling uploads, not as unlimited. Unlimited mode is now a clearly labelled practical high limit (20G), and any previously saved 0 value is migrated automatically the first time settings are loaded.
Validation: post_max_size is now automatically kept larger than upload_max_filesize by the larger of 1MB or 10% overhead, with an on-screen notice when a value is auto-adjusted.
Apply/remove results are now reported per file (.htaccess / .user.ini) as applied, unchanged, skipped, removed, or failed, and an overall partial-success state is shown instead of a single pass/fail message.
Turning off a config target now removes its existing GTS block by default; a new “preserve existing block” checkbox lets you keep it instead.
Added a one-step backup of each file’s previous contents before every plugin write, with a Restore button to undo the most recent change.
Added per-directive verification states (active, pending propagation, mismatch, not applied) that compare the requested value against the live PHP value, accounting for the .user.ini cache window on FPM/CGI hosts.
Improved filesystem error messages (missing file, unwritable file, unwritable parent directory, read/write failure) instead of a single generic failure.
Refactored the single plugin class into focused Settings, Scanner, Config Writer, and Admin classes under includes/ (same option key and .htaccess/.user.ini marked-block comments, fully backward compatible).
Added a standalone PHP test suite (tests/run-tests.php) covering settings sanitization/migration, post/upload overhead validation, marked-block add/replace/remove and backup/restore, and scanner/verification calculations, since no PHPUnit/Composer/WP-CLI is available in this environment.
Updated admin screen copy, added result/verification badges, associated custom-size fields with visible labels for screen readers, and refreshed the translation template.
1.2
Added an uninstall.php handler that removes the saved settings option and any GTS config blocks from .htaccess/.user.ini when the plugin is deleted.
1.1
Wrapped .htaccess php_value directives in to prevent 500 errors on PHP-FPM/CGI hosts.
Switched .htaccess/.user.ini reads and writes to the WP_Filesystem API.
Made the scanner labels and Yes/No values translatable, and added a Domain Path plus languages/gts-upload-limit-manager.pot translation template.
Fixed the scanner showing a confusing “8 EB” value in Unlimited mode; it now shows “Unlimited (best effort)”.
Added a confirmation prompt before removing GTS config blocks.
Enabled .htaccess writing by default alongside .user.ini so Apache/mod_php hosts apply changes immediately.
Added a “.user.ini Change Propagation” scanner row and corrected guidance that previously suggested a server restart; .user.ini changes apply automatically within PHP’s own cache window.
Resolved WordPress Plugin Check errors and warnings (direct is_writable() calls, deprecated load_plugin_textdomain() call, unverified $_GET read, readme short description length).
Updated Tested up to, added License URI, and set a dedicated Plugin URI.
Enqueued admin CSS/JS as dedicated assets and renamed the tools panel to “Included Tools”.
1.0.4
Improved the scanner labels to separate effective WordPress/media upload limit from raw Server PHP ini values.
Added selected plugin settings inside the scanner to avoid confusion when the WordPress media uploader shows the requested size but PHP still reports an older server value.
1.0.3
Added plugin header requirements so WordPress shows Required WordPress version and Required PHP version during ZIP upload/replace flow.
1.0.2
Added quick Settings link on the Plugins page.
1.0.1
Kept plugin fully free.
Added Unlimited (best effort) mode.
Added custom upload, post, and memory size fields.