Strings in PHP do not have a specific limit regarding their length in 64-bit builds as per PHP 7.0.0. However, 32-bit builds and earlier versions impose a limit of 2GB (2147483647 bytes).
In PHP 5.x, strings were restricted to 231-1 bytes due to the use of a signed 32-bit integer to record the length.
PHP scripts have a limitation on the total memory they can allocate for variables, effectively placing a cap on the length of a single string variable. This limit is set by the memory_limit directive in php.ini. It defaults to 128MB in PHP 5.2 and 8MB in earlier versions.
If no memory limit is specified, it defaults to a value set during compilation. Assigning a value of -1 in php.ini disables memory checks, allowing the script to use as much memory as the operating system provides.
The memory limit directive imposes a practical limitation on string length, regardless of the theoretical limit. Additionally, the size of the file can be a factor when slurping its contents using functions like file_get_contents().
A simple demonstration:
<code class="php">ini_set('memory_limit', 1024*1024); printf("memory: %d\n", memory_get_usage(true)); $str = str_repeat('a', 255*1024); echo "Allocated string of 255KB\n"; printf("memory: %d\n", memory_get_usage(true)); $str = str_repeat('a', 256*1024); echo "Allocated string of 256KB\n"; printf("memory: %d\n", memory_get_usage(true));</code>
Here, a memory limit of 1MB is set. Allocating 255KB of string memory does not exceed the limit, but attempting to allocate 256KB triggers a fatal error due to reaching the limit.
The above is the detailed content of What are the practical limitations on string length in PHP?. For more information, please follow other related articles on the PHP Chinese website!