Set PHP memory_limit first, then tune WordPress WP_MEMORY_LIMIT inside that ceiling. PHP controls the hard per-request memory cap. WordPress can request more memory for itself, but it cannot reliably exceed what the server allows. WordPress defaults to 40M for a single site and 64M for multisite, while admin tasks can use a higher admin limit by default (source).
TLDR: memory_limit is the server-level PHP limit, while WP_MEMORY_LIMIT is WordPress asking PHP for a certain amount of memory. For example, if PHP is capped at 128M, setting WordPress to 256M may not help because the server can still stop the request. A WooCommerce store that imports 5,000 products might fail at 128M but complete cleanly at 256M, especially if image processing and SEO plugins run during the import. Start with 256M for heavier WordPress sites, then watch real usage instead of guessing.
What PHP memory_limit Actually Does
memory_limit is a PHP configuration directive. It defines how much memory one PHP script may consume during a single request. If the request crosses the limit, PHP stops it and throws the classic error:
Fatal error: Allowed memory size of 134217728 bytes exhausted…
That number means PHP hit its memory ceiling. It does not always mean your server is out of RAM. It means that one PHP process used more than it was allowed to use.
Common places to set PHP memory_limit include:
php.ini— best for VPS, dedicated servers, and custom hosting setups.- Hosting control panel — common on shared hosting and managed WordPress hosting.
.user.ini— often used with PHP FPM on shared servers..htaccess— sometimes works with Apache and mod PHP, but not always.- Container or server config — used in Docker, Kubernetes, and cloud stacks.
The annoying part is that hosts do not expose this setting in the same place. On one host, it takes 20 seconds in cPanel. On another, you open a ticket and wait while your import keeps failing. Honestly, it feels like this setting was designed to be simple, then buried in five different places.
What WordPress WP_MEMORY_LIMIT Does
WP_MEMORY_LIMIT is a WordPress constant. You set it in wp-config.php. It tells WordPress how much memory it should try to use for normal front-end and back-end requests.
Example:
define('WP_MEMORY_LIMIT', '256M');
This does not magically create memory. It only asks PHP to raise the limit for WordPress execution. If the server allows it, great. If the server blocks it, nothing useful happens.
There is also WP_MAX_MEMORY_LIMIT, which applies to heavier admin tasks. WordPress uses this higher value for operations such as updates, media processing, plugin installs, and some admin screens.
Example:
define('WP_MEMORY_LIMIT', '256M');
define('WP_MAX_MEMORY_LIMIT', '512M');
This setup gives normal site traffic a sane cap while allowing the dashboard more room for big jobs.
The Key Difference: Hard Cap vs Application Request
Think of PHP memory_limit as the building’s electrical limit. Think of WP_MEMORY_LIMIT as WordPress asking to plug in a larger machine. If the building cannot supply it, the request does not matter.
The PHP manual describes memory_limit as the maximum amount of memory a script may consume (source). That means it sits closer to the server. WordPress sits above it.
| Setting | Controls | Set In | Best Used For |
|---|---|---|---|
PHP memory_limit |
Maximum memory per PHP request | php.ini, control panel, server config |
Server-wide PHP resource control |
WP_MEMORY_LIMIT |
WordPress memory request | wp-config.php |
Normal WordPress requests |
WP_MAX_MEMORY_LIMIT |
Higher WordPress admin memory request | wp-config.php |
Updates, imports, media, admin tasks |
Recommended Values for Real Sites
There is no perfect number for every site. A tiny blog does not need the same memory as a WooCommerce store with subscriptions, filters, page builders, and image tools.
- Small blog:
128MPHP limit and128MWordPress limit may be enough. - Business site:
256MPHP limit and256MWordPress limit is a safer baseline. - WooCommerce store:
256Mto512Mis common, especially during imports. - Large membership or LMS site:
512Mmay be needed for admin tasks and reports.
A practical setup for many active WordPress sites looks like this:
define('WP_MEMORY_LIMIT', '256M');
define('WP_MAX_MEMORY_LIMIT', '512M');
Then set PHP memory_limit to at least 512M if your hosting plan allows it. If PHP stays at 128M, the WordPress constants may not save you.
How to Check Your Current Memory Limits
You can check memory limits in several ways:
- WordPress Site Health: Go to Tools > Site Health > Info > Server.
- WooCommerce status: Go to WooCommerce > Status.
- PHP info file: Create a temporary file with
phpinfo(), then delete it after checking. - Command line: Run
php -i | grep memory_limitif you have SSH access.
Expect to waste time on mismatched values. Your web PHP limit may be 256M, while command-line PHP shows 512M. They can use different configuration files. That mismatch explains many failed cron jobs and successful browser requests, or the other way around.
When Raising Memory Helps
Increasing memory can fix real problems. It often helps with:
- Large product imports
- Bulk image resizing
- Page builder editing screens
- Backup plugin archives
- Security scans
- Translation and multilingual plugins
- Large search indexes
But raising memory is not a cure for bad code. If a plugin has a memory leak, giving it 512M may only delay the crash. If one request uses 480M just to load a settings page, something is probably bloated.
When Raising Memory Is the Wrong Fix
More memory can hide deeper issues. Watch for these signs:
- Memory grows on every request: possible plugin bug or leak.
- Only one admin page crashes: likely a specific plugin screen or query.
- Front end is slow under traffic: caching, database queries, or object cache may matter more.
- Backups fail often: archive size, disk I/O, or timeout limits may be the real cause.
Use error logs and performance tools. Disable plugins in batches. Switch to a default theme for a quick test. Check slow database queries. Boring steps, yes. Still faster than blindly pushing memory higher every week.
Best Practice Setup
Use a layered approach:
- Set PHP
memory_limitat the server or hosting level. - Set
WP_MEMORY_LIMITinwp-config.php. - Set
WP_MAX_MEMORY_LIMITfor heavy admin operations. - Monitor actual usage during imports, backups, and peak traffic.
- Fix heavy plugins instead of giving every request unlimited room.
A good starting point for a serious WordPress site is:
define('WP_MEMORY_LIMIT', '256M');
define('WP_MAX_MEMORY_LIMIT', '512M');
Pair that with a PHP memory_limit of 512M where possible. For small sites, 128M or 256M may be fine. For stores, learning sites, and content-heavy builds, 256M should be treated as the floor, not a luxury.
Final Takeaway
PHP memory_limit is the real ceiling. WordPress WP_MEMORY_LIMIT is the request inside that ceiling. Set both with intent. Give WordPress enough room to run, but do not use memory as a bandage for slow plugins, huge queries, or weak hosting. The cleanest setup is simple: server limit first, WordPress constants second, monitoring always.
