Quelle est la limite supérieure de la longueur des chaînes en PHP ?
Requête :
Pouvez-vous nous éclairer sur les limites de la capacité de stockage de chaînes en PHP ? J'ai essayé de l'évaluer, mais je ne sais pas si la mémoire de mon système (2 Go) est adéquate pour le test. Y a-t-il un plafond prédéfini ? Quelles actions se produisent lorsqu'une chaîne dépasse ce seuil – concaténation ou erreur ?
Réponse :
Selon la documentation de PHP.net, les restrictions de longueur de chaîne ont été éliminées dans PHP 7.0.0 pour les versions 64 bits. Pour les versions 32 bits et les versions antérieures, les chaînes pouvaient atteindre une taille maximale de 2 Go (2147483647 octets).
Dans PHP 5.x, les chaînes étaient limitées à 231-1 octets car le code interne a suivi leur longueur dans un format signé 32 bits entier.
Considérations supplémentaires :
Vous pouvez charger le contenu entier d'un fichier à l'aide de fonctions telles que file_get_contents(). Cependant, l'allocation globale de mémoire d'un script PHP pour toutes les variables limite la longueur des variables de chaîne individuelles.
Directive de limite de mémoire :
La directive memory_limit dans le fichier de configuration php.ini définit ceci limite. Sa valeur par défaut est de 128 Mo dans PHP 5.2 et de 8 Mo dans les versions antérieures.
Si memory_limit n'est pas défini dans php.ini, la valeur par défaut est la valeur compilée dans le binaire PHP, qui peut être modifiée en recompilant PHP avec une valeur par défaut personnalisée. .
Définir memory_limit sur -1 dans php.ini désactive la vérification et permet à votre script d'utiliser autant de mémoire que le système d'exploitation alloue (toujours soumis à des contraintes pratiques et spécifiques au système).
Exemple de test :
Le code suivant montre comment tester l'utilisation de la mémoire et les limites d'allocation de chaînes :
<code class="php">// 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));</code>
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!