How to Fix WP Migrate Lite Export Completing With an Incomplete ZIP File

A WP Migrate Lite export may occasionally appear to finish successfully, while the downloaded ZIP file is much smaller than the size displayed by the plugin. The automatic download may also fail, or the ZIP file may be corrupted and impossible to extract.

A typical report looks like this:

The export job shows as complete, but the ZIP file is only a fraction of the listed size and the automatic download fails.

WP Migrate Lite can package the WordPress database, media uploads, themes, plugins, WordPress core files, and other selected files into one downloadable ZIP archive. After the export is assembled, the plugin automatically starts the browser download.

When the progress screen says “complete” but the archive is incomplete, the failure usually happened during one of two separate stages:

  1. The server failed to finish building the ZIP archive.
  2. The ZIP was created correctly, but the browser failed to download the complete file.

This guide will help you identify which stage failed and fix the underlying problem.

Important: The original support report had not received an official reply at the time this article was prepared. The steps below cover the most likely causes based on WP Migrate documentation, previous support cases, and standard WordPress server troubleshooting.

Quick Fix Checklist

Try these steps in this order:

  1. Update WP Migrate Lite, WordPress, and PHP.
  2. Test a database-only export.
  3. Export fewer files at a time.
  4. Increase WP Migrate’s Maximum Request Size.
  5. Increase the WordPress and PHP memory limits.
  6. Check available disk space and server inodes.
  7. Verify that the WP Migrate temporary directory is writable.
  8. Check the WP Migrate Diagnostic Info and Error Log.
  9. Check wp-content/debug.log and the server error log.
  10. Retry the download in another browser.
  11. Temporarily disable security, firewall, and caching restrictions.
  12. Transfer the database and files separately if the full-site export still fails.

First, Check Whether the ZIP Is Actually Corrupted

A ZIP archive can legitimately be much smaller than the original files because ZIP compression reduces the stored size. A smaller file alone does not necessarily mean that the export failed.

However, the archive is probably incomplete when:

  • The downloaded size is only a tiny fraction of the size displayed by WP Migrate.
  • The browser reports that the download failed.
  • Windows cannot open the archive.
  • 7-Zip reports an unexpected end of data.
  • LocalWP rejects the archive.
  • The terminal reports an “End-of-central-directory signature not found” error.
  • Important directories or the database export are missing.

A previous WP Migrate support report involving a very small ZIP produced the “End-of-central-directory signature not found” error. WP Migrate support explained that this normally indicates that the archive was not fully generated, potentially because of server memory limits or execution timeouts.

Test the ZIP on Linux or macOS

Run:

unzip -t website-export.zip

To list the contents without extracting them, run:

unzip -l website-export.zip

A valid archive should finish the test without CRC errors, missing directory information, or unexpected end-of-file errors.

Test the ZIP on Windows

Install 7-Zip, right-click the archive, and select:

7-Zip > Test archive

If 7-Zip reports that the archive is incomplete, do not import it into LocalWP or another WordPress installation. Generate a new export after resolving the server problem.

1. Update WP Migrate Lite

Start by updating WP Migrate Lite to the latest available release.

At the time of writing, WordPress.org lists WP Migrate Lite 2.7.10, released on June 30, 2026. Version 2.7.9 also included a security fix related to the plugin’s file download handler, making it especially important not to troubleshoot this issue with an outdated release.

Go to:

WordPress Dashboard > Plugins > Installed Plugins

Update:

  • WP Migrate Lite
  • WordPress core
  • Active theme
  • Other active plugins

After updating, clear the WordPress cache, server cache, object cache, and browser cache before running another export.

Do not update directly on a critical production website without creating a separate backup first.

2. Test a Database-Only Export

Before attempting another full-site export, determine whether the problem is caused by the database or the filesystem.

Open WP Migrate and configure an export containing only the database.

If the database-only export works, the failure is probably connected to one of these file groups:

  • Media uploads
  • Plugins
  • Themes
  • WordPress core
  • Other files inside the website
  • A particularly large file
  • A file that PHP cannot read
  • A directory with incorrect permissions

If the database-only export also fails, focus on:

  • PHP memory
  • Request size
  • AJAX requests
  • Security restrictions
  • Database errors
  • WP Migrate diagnostics
  • Server execution limits

This small test is much faster than repeatedly generating the entire site archive.

3. Export Fewer Files at a Time

WP Migrate support recommends testing a smaller export when the full package completes but the browser download fails. Exporting fewer items helps determine whether the problem is related to the total archive size or a specific group of files.

Try the following combinations separately:

Test 1

Database only

Test 2

Database + active theme

Test 3

Database + active theme + active plugins

Test 4

Media uploads excluded

If the export works without media uploads, transfer the uploads directory separately using SFTP, SSH, rsync, or your hosting file manager.

This approach is often more reliable for websites with several gigabytes of images, videos, PDFs, backup archives, or generated cache files.

4. Increase the Maximum Request Size

WP Migrate breaks a migration into multiple requests. If its Maximum Request Size is too low, a large export may require thousands of individual requests.

A previous WP Migrate export failure was resolved by increasing the plugin’s Maximum Request Size from 1 MB to 5 MB. WP Migrate support explained that a very small request size can create an excessive number of requests, causing the process to hang, crash, or trigger security rate limiting.

Open WP Migrate’s advanced settings and locate:

Maximum Request Size

Try changing it from:

1 MB

to:

5 MB

Run the export again.

If the server has very little memory, a larger request may increase memory consumption. In that situation, test 2 MB before trying 5 MB.

The goal is to find a balance where each request contains enough data to avoid thousands of AJAX calls without exceeding the server’s memory limit.

5. Increase the WordPress Memory Limit

Full-site exports require additional memory to read files, export database tables, build the archive, calculate progress, and handle requests.

Add the following above the “That’s all, stop editing” line in wp-config.php:

define('WP_MEMORY_LIMIT', '512M');
define('WP_MAX_MEMORY_LIMIT', '512M');

The second constant is particularly important because WordPress administration processes may use the administrative memory limit.

A lower value may be sufficient for smaller sites:

define('WP_MEMORY_LIMIT', '256M');
define('WP_MAX_MEMORY_LIMIT', '256M');

However, defining a value in wp-config.php cannot override a lower server-level PHP limit. Check the actual PHP memory limit under:

Tools > Site Health > Info > Server

You can also review it in the WP Migrate Diagnostic Info section.

6. Increase PHP Execution Limits

A hosting provider may terminate the export before the ZIP archive has been finalized.

Update the relevant PHP configuration file, such as php.ini, .user.ini, or the hosting control panel’s PHP Options page:

memory_limit = 512M
max_execution_time = 600
max_input_time = 600
post_max_size = 128M
upload_max_filesize = 128M

The most important values for server-side archive generation are usually:

memory_limit
max_execution_time

The exact limits required depend on:

  • Total website size
  • Number of files
  • Database size
  • Hosting performance
  • PHP version
  • Available CPU
  • Disk speed
  • Security restrictions

Some managed hosts ignore custom php.ini or .user.ini files. Contact the hosting provider when the values shown in Site Health do not change.

Ask the host to check for:

  • PHP fatal errors
  • Out-of-memory errors
  • Process termination
  • CPU throttling
  • Execution timeout
  • Web application firewall blocks
  • Disk quota limits

7. Check Server Disk Space and Inodes

The server needs enough free space to hold the existing website and create the temporary export archive.

Depending on how the plugin builds the package, the operation may temporarily require substantially more space than the final compressed ZIP.

On an SSH-enabled server, check disk space with:

df -h

Check inode availability with:

df -i

A server can report available storage while still being unable to create new files because all available inodes have been used.

Check the uploads directory size:

du -sh wp-content/uploads

Check the complete WordPress installation:

du -sh .

Common sources of unnecessary disk usage include:

  • Old backup archives
  • Staging copies
  • Cache directories
  • Large debug logs
  • Previous migration packages
  • Error logs
  • Video files
  • Unused media
  • Database backup files
  • UpdraftPlus backups
  • All-in-One WP Migration backups

Move important backups to external storage before deleting anything.

8. Check the WP Migrate Temporary Directory

WP Migrate diagnostic logs show that full-site ZIP archives may be created under a directory similar to:

wp-content/uploads/wp-migrate-db/

A previous support log repeatedly reported that the expected ZIP archive inside this directory did not exist.

Using SFTP, SSH, or your hosting file manager, check whether this directory exists and is writable.

Typical directory permissions are:

755

Typical file permissions are:

644

The correct ownership is more important than the numeric permission alone. PHP must be able to create, update, and delete files inside the directory.

Do not automatically set permissions to 777. World-writable permissions create a security risk and usually hide the real ownership problem.

Ask the host to confirm that the web server user owns or can write to:

wp-content/uploads/
wp-content/uploads/wp-migrate-db/

Also check whether a security plugin, malware scanner, cleanup process, or hosting optimization service is deleting the temporary ZIP before it is downloaded.

9. Remove Large or Unnecessary Files From the Export

A full-site export may accidentally include files that should not be migrated.

Inspect the website for:

wp-content/cache/
wp-content/debug.log
wp-content/updraft/
wp-content/ai1wm-backups/
wp-content/wflogs/
error_log
backup.zip
site-backup.tar.gz
node_modules/
.git/

Do not permanently delete backups until another verified copy exists.

Exclude cache files, generated logs, old migration packages, and unnecessary development directories from the export.

A single multi-gigabyte log or backup archive can dramatically increase the amount of work required to build the ZIP.

10. Retry the Download in Another Browser

Sometimes the server successfully creates the archive, but the browser fails while downloading it.

WP Migrate support recommends:

  • Trying another browser
  • Disabling browser extensions
  • Checking the internet connection
  • Exporting fewer files
  • Keeping the browser tab open until the download finishes

Try the export in:

  • Chrome Incognito mode
  • Firefox Private Browsing
  • Microsoft Edge InPrivate mode

Temporarily disable:

  • Download manager extensions
  • Antivirus browser extensions
  • Privacy extensions
  • Ad blockers
  • Script blockers
  • Corporate proxy extensions

Also check whether the browser is blocking automatic downloads from the WordPress admin area.

If the downloaded ZIP is valid but the browser stopped early, retry using a stable wired connection or download the archive through the hosting file manager when the temporary file remains available.

11. Check the Browser Developer Console

Open the browser developer tools before starting the export.

In Chrome or Edge:

F12 > Network

Filter requests using:

admin-ajax.php

Look for responses such as:

403 Forbidden
404 Not Found
429 Too Many Requests
500 Internal Server Error
502 Bad Gateway
503 Service Unavailable
504 Gateway Timeout

Also open:

F12 > Console

Look for JavaScript errors, blocked downloads, failed requests, or security policy errors.

A 403 or 429 response commonly indicates that a firewall, security plugin, CDN, or host-level rate limiter is blocking WP Migrate’s repeated requests.

A 500, 502, 503, or 504 response usually points to a PHP, proxy, web server, or resource-limit problem.

12. Temporarily Disable Security and Rate Limiting

Large migrations generate repeated background requests. Security systems may interpret them as automated or abusive activity.

Temporarily test without restrictions from:

  • Wordfence
  • Solid Security
  • Sucuri
  • Cloudflare WAF
  • ModSecurity
  • Hosting bot protection
  • Basic authentication
  • Maintenance mode plugins
  • Rate limiting
  • CAPTCHA protection
  • Custom admin restrictions

Do this only on a protected staging or development website whenever possible.

WP Migrate’s troubleshooting documentation recommends checking whether requests to wp-admin/admin-ajax.php work correctly and whether maintenance mode, plugins, or the active theme interfere with migration requests. The plugin also provides Compatibility Mode to reduce plugin conflicts during migrations.

Re-enable all security protections immediately after testing.

13. Run a Plugin Conflict Test

WP Migrate normally places plugins into compatibility mode during migration requests, but must-use plugins, server integrations, custom code, or unusual plugins can still interfere.

On a staging or development copy:

  1. Deactivate all nonessential plugins.
  2. Keep WP Migrate Lite active.
  3. Switch temporarily to a default WordPress theme.
  4. Clear all caches.
  5. Retry a small export.
  6. Reactivate plugins one at a time.

Pay particular attention to:

  • Security plugins
  • Caching plugins
  • Backup plugins
  • File-management plugins
  • Maintenance mode plugins
  • Optimization plugins
  • Must-use plugins
  • Custom code that modifies AJAX responses
  • Plugins that start output buffering or compression

If the export works after deactivation, reactivate plugins individually until the failure returns.

14. Check WP Migrate Diagnostic Information

WP Migrate records migration details and certain errors under its Help tab.

Go to:

WP Migrate > Help

Locate:

Diagnostic Info & Error Log

Look for messages containing:

ZIP Archive does not exist
Allowed memory size exhausted
Maximum execution time exceeded
Permission denied
Failed to open stream
No space left on device
Request failed
Unexpected response
Migration cancelled

WP Migrate’s official troubleshooting guide recommends checking this diagnostic log, followed by the PHP or web server error logs and the browser console.

Remove or redact sensitive information before posting diagnostic data publicly.

15. Enable the WordPress Debug Log

Add these lines to wp-config.php:

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);

Run the failed export once.

Then inspect:

wp-content/debug.log

Search for errors recorded at the exact time of the export.

WP Migrate support has specifically recommended enabling WP_DEBUG_LOG when export diagnostics do not reveal why the ZIP disappears or fails to generate.

After troubleshooting, change the settings back:

define('WP_DEBUG', false);

Remove or securely delete debug.log because it may contain server paths, database information, plugin names, and other sensitive details.

16. Check PHP, Apache, and Nginx Error Logs

WordPress may not capture every server-level failure.

Check:

PHP error log
Apache error log
Nginx error log
Hosting resource usage log
ModSecurity audit log

Common server messages include:

PHP Fatal error: Allowed memory size exhausted
Maximum execution time exceeded
No space left on device
Permission denied
upstream timed out
Connection reset by peer
Process killed
Resource temporarily unavailable

Provide the exact timestamp of the failed export to the hosting provider. This makes it easier for support to find the corresponding server event.

17. Disable Output Compression During Testing

Unexpected output compression or buffering can occasionally interfere with large file downloads.

Check whether the server has:

zlib.output_compression = On

Temporarily test with:

zlib.output_compression = Off

Also temporarily disable HTML optimization, output buffering, and response-modification features provided by caching or performance plugins.

This step is mainly relevant when the ZIP is correctly created on the server but becomes corrupted only during the HTTP download.

Restore the original configuration after testing.

18. Transfer the Database and Files Separately

When full-site ZIP creation remains unreliable, migrate the site in two parts.

Export the database

Use WP Migrate’s database-only export, phpMyAdmin, or WP-CLI:

wp db export database.sql

Transfer the WordPress files

Use:

  • SFTP
  • SCP
  • rsync
  • Hosting file manager
  • Server-side tar archive

Example using tar:

tar \
  --exclude='wp-content/cache' \
  --exclude='wp-content/debug.log' \
  --exclude='wp-content/uploads/wp-migrate-db' \
  -czf wordpress-files.tar.gz .

Store migration archives outside the publicly accessible web root whenever possible.

After downloading and verifying the archive, delete the server copy so that sensitive website files are not left publicly accessible.

19. Verify the Export Before Importing It

Never assume that a migration archive is complete simply because the plugin displayed a completion message.

Test the archive:

unzip -t website-export.zip

List its contents:

unzip -l website-export.zip

Generate a checksum:

sha256sum website-export.zip

After transferring the file to another computer or server, generate the checksum again. Both values should match.

Also confirm that the archive contains:

  • Database export
  • wp-content/uploads
  • Active theme
  • Required plugins
  • WordPress configuration expected by the importer
  • Any custom directories required by the website

Recommended Fix Order

For most websites, use this exact sequence:

  1. Update WP Migrate Lite.
  2. Run a database-only export.
  3. Increase Maximum Request Size from 1 MB to 5 MB.
  4. Raise WordPress and PHP memory to 512 MB.
  5. Set PHP execution time to 600 seconds.
  6. Confirm free disk space and inodes.
  7. Check permissions on wp-content/uploads/wp-migrate-db.
  8. Exclude caches, old backups, and media uploads.
  9. Retry in a private browser window.
  10. Check the WP Migrate diagnostic log.
  11. Enable WP_DEBUG_LOG.
  12. Check server logs for memory, timeout, permission, or disk errors.
  13. Transfer files separately when necessary.

Frequently Asked Questions

Why is the WP Migrate ZIP smaller than the displayed size?

Normal ZIP compression can reduce the final file size. However, the archive is likely incomplete when it is dramatically smaller, fails the ZIP integrity test, cannot be opened, or is missing important files.

Does a failed automatic download mean the export failed?

Not always. The server may have created a valid ZIP while the browser, internet connection, extension, proxy, or antivirus interrupted the download. Test the archive and check the browser Network panel before running another full export.

Where does WP Migrate create its ZIP file?

Diagnostic logs from full-site exports show archive paths under:

wp-content/uploads/wp-migrate-db/

The exact behavior may depend on the plugin version and whether the export completed, failed, was cancelled, downloaded, or cleaned up.

Can a corrupted ZIP be repaired?

A ZIP missing its central directory is generally incomplete. Repair tools may recover some individual files, but the result should not be trusted as a complete WordPress migration. Fix the server issue and create a new export.

How much PHP memory does WP Migrate need?

There is no universal value. Smaller websites may work with 256 MB, while large full-site exports may need 512 MB or more. File count, database size, plugin selection, media size, and hosting performance all affect memory requirements.

Should I increase Maximum Request Size or decrease it?

Increase it when the export is generating an excessive number of small requests or triggering rate limits. Decrease it when individual requests exhaust PHP memory. Test 2 MB and 5 MB rather than immediately selecting an extreme value.

Can Cloudflare block a WP Migrate export?

Yes. Cloudflare WAF rules, bot protection, rate limiting, or proxy timeouts can block or interrupt repeated WordPress AJAX requests. Check the browser Network panel and Cloudflare security events for matching 403, 429, 5xx, or timeout responses.

Final Thoughts

When WP Migrate Lite reports that an export is complete but produces a tiny or corrupted ZIP, do not repeatedly rerun the same full export without checking the logs.

First determine whether the archive failed during server-side creation or during the browser download. Then check request size, PHP memory, execution time, disk space, file permissions, security restrictions, browser behavior, and the WP Migrate diagnostic log.

For very large websites, separating the database migration from the file transfer is often more reliable than forcing the entire site into one browser-downloaded ZIP archive.

Leave a Comment