Qual é o limite superior do comprimento da string em PHP?
Consulta:
Você pode esclarecer os limites da capacidade de armazenamento de strings em PHP? Tentei avaliar, mas não tenho certeza se a memória do meu sistema (2 GB) é adequada para o teste. Existe um limite predefinido? Quais ações ocorrem quando uma string excede esse limite – concatenação ou um erro?
Resposta:
De acordo com a documentação do PHP.net, as restrições de comprimento de string foram eliminadas no PHP 7.0.0 para compilações de 64 bits. Para compilações de 32 bits e versões anteriores, as strings podiam atingir um tamanho máximo de 2 GB (2147483647 bytes).
No PHP 5.x, as strings eram restritas a 231-1 bytes porque o código interno rastreou seu comprimento em um número inteiro assinado de 32 bits.
Adicional Considerações:
Você pode carregar o conteúdo inteiro de um arquivo usando funções como file_get_contents(). No entanto, a alocação geral de memória de um script PHP para todas as variáveis limita o comprimento de variáveis de string individuais.
Diretiva de limite de memória:
A diretiva memory_limit no arquivo de configuração php.ini define isso limite. Seu padrão é 128 MB no PHP 5.2 e 8 MB nas versões anteriores.
Se memory_limit não estiver definido no php.ini, o padrão é o valor compilado no binário do PHP, que pode ser modificado recompilando o PHP com um padrão personalizado .
Definir memory_limit como -1 no php.ini desativa a verificação e permite que seu script utilize tanta memória quanto o sistema operacional aloca (ainda sujeito a práticas e restrições específicas do sistema).
Exemplo de teste:
O código a seguir demonstra como testar o uso de memória e os limites de alocação de strings:
// 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));
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3