La longueur maximale d'une chaîne en PHP
En PHP, la longueur d'une chaîne est limitée par la mémoire disponible dans le système. La taille maximale d'une chaîne dépend de la plate-forme, les versions 64 bits étant capables de gérer des chaînes arbitrairement grandes.
Dans PHP 5.x, les chaînes étaient limitées à 231-1 octets, car la longueur était stockée dans un entier signé de 32 bits. Cependant, cette limitation a été supprimée dans PHP 7.0.0.
Considérations pratiques
Bien que les chaînes puissent être arbitrairement grandes, la mémoire totale allouée à toutes les variables dans l'exécution d'un seul script est toujours limitée par la directive memory_limit dans php.ini. Cette limite est généralement définie sur 128 Mo dans PHP 5.2 et 8 Mo dans les versions antérieures.
Si la limite de mémoire n'est pas explicitement définie dans php.ini, la valeur par défaut est utilisée, qui varie en fonction de la configuration du binaire PHP. Définir la limite de mémoire sur -1 désactive effectivement cette vérification et permet au script d'utiliser autant de mémoire que possible.
Exemple concret
Le script PHP suivant illustre la relation entre la limite de mémoire et la taille de la chaîne :
<code class="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)); // Allocate a string of 255KB $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)); // Attempting to allocate a string larger than the memory limit will cause a fatal error $str = str_repeat('a', 256*1024); echo "Allocated string of 256KB\n"; printf("memory: %d\n", memory_get_usage(true));</code>
Lors de son exécution, ce script affichera :
memory: 768000 Allocated string of 255KB memory: 1023952
Cela démontre que la mémoire allouée atteint la limite une fois que la chaîne atteint 255 Ko . Tenter d'attribuer une chaîne plus grande entraînera une erreur fatale.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!