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