{"id":327052,"date":"2026-06-16T09:22:18","date_gmt":"2026-06-16T09:22:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/sbr-simple-backup-restore\/"},"modified":"2026-07-27T10:24:25","modified_gmt":"2026-07-27T10:24:25","slug":"sbr-simple-backup-restore","status":"publish","type":"plugin","link":"https:\/\/cor.wordpress.org\/plugins\/sbr-simple-backup-restore\/","author":23517390,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"4.1.0","stable_tag":"4.1.0","tested":"7.0.2","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"SBR Simple Backup & Restore","header_author":"The Road Agency","header_description":"Fast local WordPress backups, upload-only storage, and manual restore from one clean admin screen.","assets_banners_color":"","last_updated":"2026-07-27 10:24:25","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/theroad.tn\/","rating":5,"author_block_rating":0,"active_installs":0,"downloads":157,"num_ratings":1,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"4.0.1":{"tag":"4.0.1","author":"tragency","date":"2026-06-16 09:32:46"},"4.1.0":{"tag":"4.1.0","author":"tragency","date":"2026-07-27 10:24:25"}},"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":0,"5":1},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3574272,"resolution":"128x128","location":"assets","locale":"","width":512,"height":512},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3574272,"resolution":"256x256","location":"assets","locale":"","width":512,"height":512}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["4.0.1","4.1.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3625695,"resolution":"1","location":"assets","locale":"","width":2384,"height":1316}},"screenshots":{"1":"SBR Simple Backup &amp; Restore admin screen with backup, upload, saved backups, restore, download, and delete actions."}},"plugin_section":[],"plugin_tags":[151,10718,4155,152,23756],"plugin_category":[59],"plugin_contributors":[267339],"plugin_business_model":[],"class_list":["post-327052","plugin","type-plugin","status-publish","hentry","plugin_tags-backup","plugin_tags-database-backup","plugin_tags-migration","plugin_tags-restore","plugin_tags-site-migration","plugin_category-utilities-and-tools","plugin_contributors-tragency","plugin_committers-tragency"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/sbr-simple-backup-restore\/assets\/icon-128x128.png?rev=3574272","icon_2x":"https:\/\/ps.w.org\/sbr-simple-backup-restore\/assets\/icon-256x256.png?rev=3574272","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/sbr-simple-backup-restore\/assets\/screenshot-1.png?rev=3625695","caption":"SBR Simple Backup &amp; Restore admin screen with backup, upload, saved backups, restore, download, and delete actions."}],"raw_content":"<!--section=description-->\n<p>SBR Simple Backup &amp; Restore is built for site owners who want a direct backup workflow without extra services, scheduling screens, or unnecessary settings.<\/p>\n\n<p>Create a backup, upload a backup file, keep backups in one list, and restore only when you choose.<\/p>\n\n<p>Main features:<\/p>\n\n<ul>\n<li>Create a full backup ZIP containing WordPress files and the database.<\/li>\n<li>Upload a backup ZIP without restoring it immediately.<\/li>\n<li>Keep uploaded and created backups in a saved backups list.<\/li>\n<li>Restore any saved backup manually using its Restore button.<\/li>\n<li>Download or delete saved backups from the same screen.<\/li>\n<li>Follow long-running jobs with percentage progress.<\/li>\n<li>Use chunked admin jobs to reduce timeout risk on shared hosting.<\/li>\n<li>Use low-memory streaming for backups, uploads, downloads, and restore operations.<\/li>\n<li>Write backup archives with an append-only writer, so each chunk only costs the bytes it adds.<\/li>\n<li>Resume a backup safely after a timeout: an interrupted chunk is discarded instead of corrupting the archive.<\/li>\n<li>Migrate between installations with different table prefixes and different website addresses.<\/li>\n<li>Rewrite addresses inside serialized and nested serialized data without breaking it.<\/li>\n<li>Verify a finished archive before it appears in the backups list.<\/li>\n<\/ul>\n\n<p>The plugin is focused on local backup and restore. It does not include cloud storage, scheduling, tracking scripts, remote services, or third-party libraries.<\/p>\n\n<p>Developed by The Road Agency.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin ZIP from Plugins &gt; Add New &gt; Upload Plugin.<\/li>\n<li>Activate SBR Simple Backup &amp; Restore.<\/li>\n<li>Open SBR Simple Backup &amp; Restore from the bottom of the WordPress admin menu.<\/li>\n<li>Click Create Backup, or upload a backup ZIP and restore it later from the saved backups list.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20include%20all%20files%20and%20the%20database%3F\"><h3>Does this plugin include all files and the database?<\/h3><\/dt>\n<dd><p>Yes. A backup created by the plugin contains the WordPress files and a database export inside one ZIP file.<\/p><\/dd>\n<dt id=\"does%20upload%20automatically%20restore%20the%20backup%3F\"><h3>Does upload automatically restore the backup?<\/h3><\/dt>\n<dd><p>No. Upload is save-only. Uploaded backups appear in the saved backups list, where you can restore them manually.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20require%20ziparchive%3F\"><h3>Does the plugin require ZipArchive?<\/h3><\/dt>\n<dd><p>Creating and downloading a backup does not require it, because the plugin writes\nthe archive itself. Uploading and restoring a backup do require the PHP zip\nextension, because those steps read an existing ZIP file.<\/p><\/dd>\n<dt id=\"is%20wp-config.php%20included%20in%20the%20backup%3F\"><h3>Is wp-config.php included in the backup?<\/h3><\/dt>\n<dd><p>No, on purpose. A restore never writes wp-config.php back, so including it would\nonly place the database credentials inside a file you may download or move\naround. Keep a separate copy of wp-config.php for a bare-metal rebuild.<\/p><\/dd>\n<dt id=\"can%20a%20restore%20damage%20other%20applications%20sharing%20the%20database%3F\"><h3>Can a restore damage other applications sharing the database?<\/h3><\/dt>\n<dd><p>No. A restore only runs recognised statements, and only against tables whose\nnames start with this installation's table prefix. Anything else is skipped and\nreported as a warning.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20a%20backup%20or%20restore%20is%20interrupted%3F\"><h3>What happens if a backup or restore is interrupted?<\/h3><\/dt>\n<dd><p>A backup records a checkpoint after every chunk and resumes from it, discarding\nany partly written data. A restore reports progress per step; if the browser is\nclosed during the database import, reopen the plugin screen and start the restore\nagain from the same backup.<\/p><\/dd>\n<dt id=\"is%20the%20plugin%20connected%20to%20an%20external%20service%3F\"><h3>Is the plugin connected to an external service?<\/h3><\/dt>\n<dd><p>No. The plugin does not call external APIs, does not include tracking, and does not send backup data to a remote service.<\/p><\/dd>\n<dt id=\"are%20the%20included%20assets%20gpl%20compatible%3F\"><h3>Are the included assets GPL compatible?<\/h3><\/dt>\n<dd><p>Yes. The plugin code and included assets are licensed under GPLv2 or later unless another GPL-compatible license is explicitly stated.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>4.1.0<\/h4>\n\n<p>Correctness and safety release. Verified end to end against WordPress 6.8 and\nMariaDB 10.11, including a cross-prefix, cross-address migration.<\/p>\n\n<p>Data integrity:\n* Fixed values being written to the database export through an escaping helper that also applies WordPress's internal placeholder escaping. Backslashes could be dropped and binary data could change length.\n* Binary and non-UTF-8 values are now exported as hex literals, so blob columns are reproduced byte for byte.\n* Fixed address replacement inside nested serialized data. A serialized string stored inside a serialized array kept its old length prefix and could no longer be unserialized.\n* Fixed a table whose first primary key is 0 having its DROP and CREATE written twice, which discarded rows already exported.\n* Fixed the database export using the per-site table prefix, which left the shared users and site tables out of a multisite backup.\n* The database export now uses a quote-aware statement reader, so a semicolon inside a value cannot split a statement.<\/p>\n\n<p>Reliability:\n* Fixed two workers advancing the same backup at once. Progress is now guarded by a file lock, and only one place schedules the follow-up run.\n* Backup archives are written by an append-only writer instead of reopening and rewriting the whole ZIP on every chunk, which prevented large sites from ever finishing. ZIP64 is supported for archives over 4 GB or with more than 65535 entries.\n* Fixed an upload chunk that was retried after a lost response being appended twice and corrupting the uploaded ZIP. Chunks are now written at an explicit byte offset.\n* Fixed a restore hanging forever when a value matched the old address case-insensitively but was not changed by a case-sensitive replacement. Replacement now advances by primary key.\n* A job that stops making progress is reported as stalled and can be cancelled, instead of showing \"running\" indefinitely.\n* Progress is driven from the status request when neither the originating request nor WP-Cron is able to continue the job.\n* Files that change size or disappear while being packed are skipped and reported, instead of failing the whole backup.<\/p>\n\n<p>Safety:\n* A restore only executes recognised statements, and only against tables carrying this installation's prefix. Anything else is skipped and reported.\n* wp-config.php is excluded from backups, so database credentials are not carried inside a downloadable archive.\n* Symbolic links are neither archived nor written back during a restore.\n* Restoring now asks for a typed confirmation, because it cannot be undone.\n* Finished archives are opened and checked before they are published to the backups list.\n* Directory protection files now cover both Apache 2.2 and Apache 2.4 syntax.<\/p>\n\n<p>Interface:\n* Progress bars are now driven per animation frame instead of jumping only when a step reports in, so a running job no longer looks frozen between updates.\n* The bar carries a moving highlight while a job is active, and turns green on success or red on failure.\n* Job status is polled more often at the start and then backs off, so the first feedback arrives quickly without adding load for the rest of the job.\n* The bar can drift a few points ahead of the last confirmed value to stay in motion, but it is capped short of the finish line and never displays 100% before the job actually completes.\n* Motion is reduced automatically when the operating system asks for it.<\/p>\n\n<p>Other:\n* Creating a backup no longer needs the PHP zip extension.\n* Home and site addresses are rewritten separately, which fixes installations living in a subdirectory.\n* Scheduled events are cleared on deactivation.<\/p>\n\n<h4>2.2.0<\/h4>\n\n<ul>\n<li>Updated internal prefixes to the longer tragency_sbr namespace for WordPress.org review.<\/li>\n<li>Reworked dynamic database queries to use WordPress identifier placeholders where supported.<\/li>\n<\/ul>\n\n<h4>2.1.0<\/h4>\n\n<ul>\n<li>Fixed Plugin Check issues from the V2 package.<\/li>\n<li>Removed the manual text-domain loader that WordPress.org does not require.<\/li>\n<li>Replaced parse_url() with wp_parse_url().<\/li>\n<li>Escaped admin notice output and documented the binary ZIP stream exception.<\/li>\n<li>Added validated SQL identifier handling around dynamic backup and restore database queries.<\/li>\n<li>Added restore SQL statement validation for SBR backup imports.<\/li>\n<li>Documented expected backup\/restore-only PHPCS exclusions for streaming file I\/O and direct database maintenance.<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Cleaned the plugin for a lean V2 release.<\/li>\n<li>Removed unused legacy backup-step AJAX code.<\/li>\n<li>Removed inline admin menu CSS and kept a real compact menu icon asset.<\/li>\n<li>Kept the core features: background backup, upload-only storage, saved backups list, restore, download, delete, and progress notices.<\/li>\n<li>Kept unique V2 class naming to avoid conflicts with older test builds.<\/li>\n<\/ul>\n\n<h4>1.7.1<\/h4>\n\n<ul>\n<li>Replaced the large admin menu image with a compact 20x20 icon inspired by the plugin logo.<\/li>\n<li>Kept the full logo inside the plugin admin page.<\/li>\n<\/ul>\n\n<h4>1.7.0<\/h4>\n\n<ul>\n<li>Fixed possible class-name conflicts during installation when older versions are still active.<\/li>\n<li>Added background backup continuation so backups can keep running after leaving the plugin page.<\/li>\n<li>Added admin notices for running, completed, and failed backup jobs.<\/li>\n<\/ul>\n\n<h4>1.6.1<\/h4>\n\n<ul>\n<li>Removed the Plugin URI header so the plugin and author URI values are not duplicated.<\/li>\n<li>Kept the Author URI as The Road Agency website.<\/li>\n<\/ul>\n\n<h4>1.6.0<\/h4>\n\n<ul>\n<li>Updated the plugin name to SBR Simple Backup &amp; Restore for a more distinctive WordPress.org submission name.<\/li>\n<li>Kept The Road Agency as the author and publisher.<\/li>\n<li>Kept the clean bottom admin menu, branded logo, and fast backup\/restore engine.<\/li>\n<\/ul>\n\n<h4>1.5.0<\/h4>\n\n<ul>\n<li>Updated public plugin metadata for The Road Agency.<\/li>\n<li>Kept the clean Simple Backup &amp; Restore interface and bottom admin menu placement.<\/li>\n<li>Added branded logo and menu icon assets licensed under GPLv2 or later.<\/li>\n<li>Cleaned public readme wording and plugin headers.<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>Added GPL license file and asset license notice.<\/li>\n<li>Added WordPress.org-style readme sections and FAQ.<\/li>\n<li>Moved admin JavaScript and CSS into registered admin assets.<\/li>\n<li>Added text domain loading and broader internationalization support.<\/li>\n<li>Removed unauthenticated restore access.<\/li>\n<li>Added stronger random backup filenames.<\/li>\n<li>Added additional directory access protection files.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Added Simple Backup &amp; Restore branding and admin menu logo.<\/li>\n<li>Moved the plugin to a bottom admin menu item.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Added a faster backup and restore engine.<\/li>\n<li>Added streamed download handling.<\/li>\n<li>Added upload-only backup storage and restore buttons.<\/li>\n<\/ul>","raw_excerpt":"Fast local WordPress backups, upload-only storage, and manual restore from one clean admin screen.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/cor.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/327052","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cor.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/cor.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/cor.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=327052"}],"author":[{"embeddable":true,"href":"https:\/\/cor.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/tragency"}],"wp:attachment":[{"href":"https:\/\/cor.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=327052"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/cor.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=327052"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/cor.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=327052"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/cor.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=327052"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/cor.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=327052"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/cor.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=327052"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}