那么$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)