{"id":377288,"date":"2026-09-28T13:27:55","date_gmt":"2026-09-28T13:27:55","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/fruti-serialized-data-audit\/"},"modified":"2026-09-28T14:45:40","modified_gmt":"2026-09-28T14:45:40","slug":"fruti-serialized-data-audit","status":"publish","type":"plugin","link":"https:\/\/es-gt.wordpress.org\/plugins\/fruti-serialized-data-audit\/","author":23575675,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1.2","requires":"6.0","requires_php":"8.1","requires_plugins":null,"header_name":"Fruti Serialized Data Audit","header_author":"Fruti Labs","header_description":"Scan a WordPress SQL dump before import and detect structurally broken PHP serialized values.","assets_banners_color":"0f2f35","last_updated":"2026-09-28 14:45:40","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":58,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"frutilabs","date":"2026-09-28 14:45:40","revision":3717392}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3717392,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3717392,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3717392,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3717392,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3717392,"resolution":"1","location":"assets","locale":"","width":1440,"height":1000},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3717392,"resolution":"2","location":"assets","locale":"","width":1440,"height":940}},"screenshots":{"1":"The audit result after a run: how many structurally broken payloads were found in the uploaded dump.","2":"The findings table: line, table, reason and snippet for every broken payload, read-only and nothing changed."}},"plugin_section":[],"plugin_tags":[153,94,4155,283203,283204],"plugin_category":[59],"plugin_contributors":[283185],"plugin_business_model":[],"class_list":["post-377288","plugin","type-plugin","status-publish","hentry","plugin_tags-database","plugin_tags-debug","plugin_tags-migration","plugin_tags-serialized-data","plugin_tags-unserialize","plugin_category-utilities-and-tools","plugin_contributors-frutilabs","plugin_committers-frutilabs"],"banners":{"banner":"https:\/\/ps.w.org\/fruti-serialized-data-audit\/assets\/banner-772x250.png?rev=3717392","banner_2x":"https:\/\/ps.w.org\/fruti-serialized-data-audit\/assets\/banner-1544x500.png?rev=3717392","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/fruti-serialized-data-audit\/assets\/icon-128x128.png?rev=3717392","icon_2x":"https:\/\/ps.w.org\/fruti-serialized-data-audit\/assets\/icon-256x256.png?rev=3717392","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/fruti-serialized-data-audit\/assets\/screenshot-1.png?rev=3717392","caption":"The audit result after a run: how many structurally broken payloads were found in the uploaded dump."},{"src":"https:\/\/ps.w.org\/fruti-serialized-data-audit\/assets\/screenshot-2.png?rev=3717392","caption":"The findings table: line, table, reason and snippet for every broken payload, read-only and nothing changed."}],"raw_content":"<!--section=description-->\n<p>A plain find-and-replace on a WordPress database, or a hand-edited export, changes the text inside\nserialized values but not the byte-length prefix PHP stored with every string. The import then\nreports success, and widgets, theme settings, page-builder layouts or plugin options quietly\ndisappear. This plugin reads a <code>.sql<\/code> dump, parses every serialized payload it finds, and lists the\nones that are structurally broken, with the line number, the table it belongs to, the reason and a\nshort snippet.<\/p>\n\n<p>Detected structural problems:<\/p>\n\n<ul>\n<li><code>string_length_mismatch<\/code> - a string's declared byte length no longer matches its content, the\nclassic result of a naive search-and-replace or of a UTF-8\/latin1 conversion.<\/li>\n<li><code>count_mismatch<\/code> - an array or object declares more items than it contains.<\/li>\n<li><code>truncated<\/code> - the payload ends in the middle of a structure.<\/li>\n<li><code>invalid_type<\/code> - a payload starts but the expected next token is not a valid serialized value.<\/li>\n<\/ul>\n\n<p>Supported serialization tokens: <code>N<\/code>, <code>b<\/code>, <code>i<\/code>, <code>d<\/code>, <code>s<\/code>, <code>a<\/code>, <code>O<\/code>, <code>r<\/code>, <code>R<\/code>, <code>E<\/code> and <code>C<\/code>, in both\nplain and <code>mysqldump<\/code>-escaped form. <code>C:<\/code> payloads are treated as opaque bytes and are never parsed\nrecursively.<\/p>\n\n<p>The plugin never modifies your data. It does not import the dump, does not connect to the database,\ndoes not execute SQL and does not write a repaired file. It only reports.<\/p>\n\n<h4>How to use it<\/h4>\n\n<ol>\n<li>Export the database you are about to import: <code>mysqldump -u user -p dbname &gt; dump.sql<\/code>.<\/li>\n<li>Open Tools -&gt; Fruti Serialized Data Audit, choose that <code>.sql<\/code> file and press Run Audit.<\/li>\n<li>Read the summary and the list of broken payloads: status, table, line, reason and snippet.<\/li>\n<li>Fix the cause with <code>wp search-replace<\/code> or a serialization-aware replacement, export a fresh dump\nand audit it again.<\/li>\n<\/ol>\n\n<h4>Privacy<\/h4>\n\n<p>The uploaded SQL file is processed locally on your own WordPress server. It is analysed in PHP's\nupload temporary file: it is not copied into the media library, not placed in <code>wp-content\/uploads<\/code>,\nnot saved in the plugin directory, not stored in the database and not written to logs or cache. The\nplugin makes no network requests, sends no telemetry and does not transmit the dump anywhere.<\/p>\n\n<h4>Support<\/h4>\n\n<p>Questions, bug reports and support: hello@fruti.lt<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/<\/code>, or install the ZIP through\nPlugins -&gt; Add New -&gt; Upload Plugin.<\/li>\n<li>Activate the plugin through the Plugins screen.<\/li>\n<li>Go to Tools -&gt; Fruti Serialized Data Audit.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20the%20plugin%20change%20or%20repair%20my%20dump%3F\"><h3>Does the plugin change or repair my dump?<\/h3><\/dt>\n<dd><p>No. It is strictly read-only and reports findings only. Fix the underlying cause (use\n    wp search-replace or a serialization-aware replacement), then export a new dump and audit it again.<\/p><\/dd>\n<dt id=\"which%20file%20types%20are%20accepted%3F\"><h3>Which file types are accepted?<\/h3><\/dt>\n<dd><p>Only <code>.sql<\/code>. Archives such as <code>.zip<\/code> or <code>.gz<\/code> are not unpacked: extract the dump first.<\/p><\/dd>\n<dt id=\"what%20happens%20with%20very%20large%20dumps%3F\"><h3>What happens with very large dumps?<\/h3><\/dt>\n<dd><p>The dump is read into memory for analysis, so extremely large files may exceed the memory limit of\nyour server. The plugin refuses files above 256 MB and shows a message; split larger dumps and audit\nthe parts separately.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20send%20my%20dump%20anywhere%3F\"><h3>Does the plugin send my dump anywhere?<\/h3><\/dt>\n<dd><p>No. Everything happens inside your own admin request on your own server. There is no external\nservice, no account, no API call and no telemetry, and the uploaded file is discarded when the\nrequest ends.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First release. Bundles parser core 1.0.4, which supports <code>N<\/code>, <code>b<\/code>, <code>i<\/code>, <code>d<\/code>, <code>s<\/code>, <code>a<\/code>, <code>O<\/code>, <code>r<\/code>,\n  R, <code>E<\/code> and <code>C<\/code> tokens in plain and <code>mysqldump<\/code>-escaped form.<\/li>\n<\/ul>","raw_excerpt":"Audit SQL dumps for broken PHP serialized values before import. Reports findings only, never changes data.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/es-gt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/377288","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/es-gt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/es-gt.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/es-gt.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=377288"}],"author":[{"embeddable":true,"href":"https:\/\/es-gt.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/frutilabs"}],"wp:attachment":[{"href":"https:\/\/es-gt.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=377288"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/es-gt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=377288"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/es-gt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=377288"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/es-gt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=377288"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/es-gt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=377288"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/es-gt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=377288"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}