http://php.net/manual/en/language.types.string.php dit :
Note : Depuis PHP 7.0.0, il n'y a pas de restrictions particulières concernant la longueur d'une chaîne de caractères sur les versions 64 bits. Sur les versions 32 bits et les versions antérieures, une chaîne peut atteindre une taille de 2 Go (2147483647 octets maximum).
En PHP 5.x, les chaînes de caractères étaient limitées à 2 31 -1 octet, car le code interne a enregistré la longueur dans un entier signé de 32 bits.
Vous pouvez aspirer le contenu d'un fichier entier, en utilisant par exemple file_get_contents()
Cependant, un script PHP a une limite sur la mémoire totale qu'il peut allouer pour toutes les variables dans une exécution script donnée, donc cela place effectivement une limite sur la longueur d'une seule variable chaîne aussi.
Cette limite est la memory_limit
dans le fichier de configuration php.ini. La limite de mémoire est fixée par défaut à 128 Mo dans PHP 5.2, et à 8 Mo dans les versions précédentes.
Si vous ne spécifiez pas de limite de mémoire dans votre fichier php.ini, il utilise la valeur par défaut, qui est compilée dans le binaire de PHP. En théorie, vous pouvez modifier les sources et reconstruire PHP pour changer cette valeur par défaut.
Si vous spécifiez -1
comme limite de mémoire dans votre fichier php.ini, il cesse de vérifier et permet à votre script d'utiliser autant de mémoire que le système d'exploitation en alloue. Cela reste une limite pratique, mais dépend des ressources et de l'architecture du système.
Re le commentaire de @c2 :
Voici un test :
<?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));
5 votes
Qu'est-ce que vous essayez de faire ?
0 votes
@sAc Je veux en savoir plus sur PHP. Je sais que je ne peux pas utiliser PHP pour des opérations gourmandes en mémoire en raison de graves fuites de mémoire.
1 votes
Dans php7, ils suppriment cette limitation : stackoverflow.com/a/31085071/1090562
0 votes
Test connexe : stackoverflow.com/q/17575954/632951
0 votes
Je changerais le titre, parce que ni l'OP ni les réponses ne répondent à la question principale sur longueur ils parlent tous de taille .