Какова максимальная длина Строки в PHP?

Таким образом, как большая банка a $variable в PHP добираются? Я попытался протестировать это, но я не уверен, что у меня есть достаточно системной памяти (~2gb). Я полагаю, что должен быть некоторый предел. Что происходит, когда строка становится слишком большой? Это связывается, или PHP выдает исключение?

66
задан rook 12 March 2014 в 15:24
поделиться

1 ответ

http://php.net/manual/en/language.types.string.php говорит:

Примечание. Начиная с PHP 7.0.0, нет конкретных ограничения на длину строки в 64-битных сборках. В 32-битных сборках и в более ранних версиях длина строки может достигать 2 ГБ (максимум 2147483647 байт)

В PHP 5.x строки были ограничены 2 31 -1 байтами, потому что внутренний код записал длину в виде 32-битного целого числа со знаком.


Вы можете пропустить содержимое всего файла, например, используя file_get_contents ()

Однако PHP-скрипт имеет ограничение на общую память, которую он может выделить для всех переменных при выполнении данного скрипта, так что это фактически накладывает ограничение на длину одной строковой переменной.

Это ограничение - директива memory_limit в файле конфигурации php.ini. Ограничение памяти по умолчанию составляет 128 МБ в PHP 5.2 и 8 МБ в более ранних версиях.

Если вы не укажете ограничение памяти в вашем файле 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));
97
ответ дан 24 November 2019 в 15:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: