What's the Upper Limit on String Length in PHP?
Query:
Can you shed light on the limits of string storage capacity in PHP? I've attempted to gauge it but am unsure if my system's memory (2GB) is adequate for the test. Is there a predefined cap? What actions occur when a string exceeds this threshold – concatenation or an error?
Response:
According to PHP.net's documentation, string length restrictions have been eliminated in PHP 7.0.0 for 64-bit builds. For 32-bit builds and earlier versions, strings could reach a maximum size of 2GB (2147483647 bytes).
In PHP 5.x, strings were constrained to 231-1 bytes because internal code tracked their length in a 32-bit signed integer.
Additional Considerations:
You can load an entire file's contents using functions like file_get_contents(). However, a PHP script's overall memory allocation for all variables limits the length of individual string variables.
Memory Limit Directive:
The memory_limit directive in the php.ini configuration file sets this limit. Its default is 128MB in PHP 5.2 and 8MB in earlier versions.
If memory_limit is unset in php.ini, it defaults to the compiled value in the PHP binary, which can be modified by recompiling PHP with a custom default.
Setting memory_limit to -1 in php.ini disables checking and allows your script to utilize as much memory as the OS allocates (still subject to practical and system-specific constraints).
Test Example:
The following code demonstrates how to test memory usage and string allocation limits:
// Limit memory usage to 1MB
ini_set('memory_limit', 1024*1024);
// Basic operation uses about 768KB
printf("memory: %d\n", memory_get_usage(true));
$str = str_repeat('a', 255*1024);
echo "Allocated string of 255KB\n";
// All 1MB of memory has been allocated
printf("memory: %d\n", memory_get_usage(true));
// Exceeding the limit causes a fatal error
$str = str_repeat('a', 256*1024);
echo "Allocated string of 256KB\n";
printf("memory: %d\n", memory_get_usage(true));
Disclaimer: All resources provided are partly from the Internet. If there is any infringement of your copyright or other rights and interests, please explain the detailed reasons and provide proof of copyright or rights and interests and then send it to the email: [email protected] We will handle it for you as soon as possible.
Copyright© 2022 湘ICP备2022001581号-3