PHP Memory Directives Relationship


I recently had to templatize PHP configurations using Ansible and Jinja2. I had to do some research to ensure that the memory directives that were being defined were actually valid. The three directives I was tinkering with were:

  1. memory_limit
  2. upload_max_filesize
  3. post_max_size

Subscribe to DevOps'ish!

DevOps, Cloud Native, Open Source, industry news, and the ‘ish between assembled by open source professional, DevOps leader, and Cloud Native Computing Foundation (CNCF) Ambassador Chris Short.

These three directives values’ are actually tied together. memory_limit is the max amount of memory that a script can consume. upload_max_filesize defines the largest size a file upload can be. post_max_size limits the max size of post data.

It’s not until you read the documentation on post_max_size that it is clearly laid out that these three directives are related:

This setting also affects file upload. To upload large files, this value must be larger than upload_max_filesize. Generally speaking, memory_limit should be larger than post_max_size.

To summarize, memory_limit must be greater than post_max_size and if your uploading files with a POST method post_max_size should be greater than upload_max_filesize.

post_max_size > upload_max_filesize memory_limit > post_max_size

Or…

memory_limit > post_max_size > upload_max_filesize

Or…

PHP Memory Relationships