PHP 中字符串的最大长度是多少?
2022-08-30 08:41:42
那么PHP中的a可以有多大呢?我试图测试这一点,但我不确定我是否有足够的系统内存(〜2gb)。我认为必须有某种限制。当字符串变得太大时会发生什么?它是串联的,还是PHP引发异常?$variable
那么PHP中的a可以有多大呢?我试图测试这一点,但我不确定我是否有足够的系统内存(〜2gb)。我认为必须有某种限制。当字符串变得太大时会发生什么?它是串联的,还是PHP引发异常?$variable
http://php.net/manual/en/language.types.string.php 说:
注意:从 PHP 7.0.0 开始,64 位构建版本对字符串的长度没有特别的限制。在 32 位版本和早期版本中,字符串最大可达 2GB(最大值为 2147483647 字节)
在 PHP 5.x 中,字符串被限制为 2个 31-1 字节,因为内部代码以有符号的 32 位整数记录长度。
您可以对整个文件的内容进行诽谤,例如使用file_get_contents()
但是,PHP 脚本对它可以在给定脚本执行中为所有变量分配的总内存有限制,因此这实际上也限制了单个字符串变量的长度。
此限制是 php.ini 配置文件中的指令。在 PHP 5.2 中,内存限制默认为 128MB,在早期版本中默认为 8MB。memory_limit
如果未在 php.ini 文件中指定内存限制,它将使用默认值,该默认值将编译为 PHP 二进制文件。从理论上讲,您可以修改源代码并重新构建PHP以更改此默认值。
如果在 php.ini 文件中指定为内存限制,它将停止检查,并允许脚本使用操作系统将分配的尽可能多的内存。这仍然是一个实际限制,但取决于系统资源和体系结构。-1
来自@c2的评论:
这是一个测试:
<?php
// limit memory usage to 1MB
ini_set('memory_limit', 1024*1024);
// initially, PHP seems to allocate 768KB for basic operation
printf("memory: %d\n", memory_get_usage(true));
$str = str_repeat('a', 255*1024);
echo "Allocated string of 255KB\n";
// now we have allocated all of the 1MB of memory allowed
printf("memory: %d\n", memory_get_usage(true));
// going over the limit causes a fatal error, so no output follows
$str = str_repeat('a', 256*1024);
echo "Allocated string of 256KB\n";
printf("memory: %d\n", memory_get_usage(true));