PHP中字符串的最大长度是多少?

roo*_*ook 67 php

那么$variablePHP中有多大?我试过测试这个,但我不确定我有足够的系统内存(~2gb).我认为必须有某种限制.字符串变得太大会发生什么?它是连接的,还是PHP抛出异常?

Bil*_*win 98

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脚本对给定脚本执行中的所有变量可以分配的总内存有限制,因此这有效地限制了单个字符串变量的长度.

此限制是memory_limitphp.ini配置文件中的指令.PHP 5.2中的内存限制默认为128MB,早期版本中的内存限制默认为8MB.

如果未在php.ini文件中指定内存限制,则使用默认值,该默认值将编译为PHP二进制文件.理论上,您可以修改源并重建PHP以更改此默认值.

如果您指定-1为在php.ini文件中的内存限制,它停止检查,并允许您的脚本中使用尽可能多的内存,操作系统将分配.这仍然是一个实际限制,但取决于系统资源和架构.


来自@ 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));
Run Code Online (Sandbox Code Playgroud)


Tou*_*man 16

字符串可以大到2GB.
资源

  • 开发人员可能会被解雇 (9认同)