Каков верхний предел длины строки в PHP?
Запрос:
Можете ли вы пролить свет на пределы емкости хранения строк в PHP? Я попытался оценить это, но не уверен, достаточно ли памяти моей системы (2 ГБ) для теста. Есть ли предустановленный лимит? Какие действия происходят, когда строка превышает этот порог – конкатенация или ошибка?
Ответ:
Согласно документации PHP.net, ограничения на длину строки были устранены в PHP 7.0.0 для 64-битных сборок. Для 32-битных сборок и более ранних версий максимальный размер строк мог достигать 2 ГБ (2147483647 байт).
В PHP 5.x размер строк был ограничен 231-1 байтом, потому что внутренний код отслеживал их длину в виде 32-битного целого числа со знаком.
Дополнительно Рекомендации:
Вы можете загрузить содержимое всего файла, используя такие функции, как file_get_contents(). Однако общее распределение памяти PHP-скрипта для всех переменных ограничивает длину отдельных строковых переменных.
Директива ограничения памяти:
Директива Memory_limit в файле конфигурации php.ini устанавливает это предел. Его значение по умолчанию составляет 128 МБ в PHP 5.2 и 8 МБ в более ранних версиях.
Если в php.ini не установлен параметр Memory_limit, по умолчанию используется скомпилированное значение в двоичном файле PHP, которое можно изменить путем перекомпиляции PHP с пользовательским значением по умолчанию. .
Установка для параметра Memory_limit значения -1 в php.ini отключает проверку и позволяет вашему скрипту использовать столько памяти, сколько выделяет ОС (все еще зависит от практические и специфичные для системы ограничения).
Тестовый пример:
Следующий код демонстрирует, как проверить использование памяти и ограничения выделения строк:
// Limit memory usage to 1MB
ini_set('memory_limit', 1024*1024);
// Basic operation uses about 768KB
printf("memory: %d\n", memory_get_usage(true));
$str = str_repeat('a', 255*1024);
echo "Allocated string of 255KB\n";
// All 1MB of memory has been allocated
printf("memory: %d\n", memory_get_usage(true));
// Exceeding the limit causes a fatal error
$str = str_repeat('a', 256*1024);
echo "Allocated string of 256KB\n";
printf("memory: %d\n", memory_get_usage(true));
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3