web-dev-qa-db-fra.com

apply_filters/do_action limite de caractères

Est-ce que apply_filters / do_action $tag name a une limite de caractères? Peut-être des problèmes si le nom de la balise est trop long? Je pose cette question parce que je sais que WP transitoires ont une limite de 45 caractères .

Pour votre information, voici le tag dont je parle:

apply_filters( $tag, ....
1
Andrei Surdu

J'ai toujours pensé que la taille de la mémoire était la limite pour la longueur de la chaîne , mais selon la documentation de PHP :

string can be as large as up to 2GB (2147483647 bytes maximum)

Il existe également la taille de mémoire maximale autorisée (memory_limit) pour le script PHP, à prendre en compte.

Test: n'effectuez pas cette opération sur un serveur de production:

Vous pouvez toujours utiliser l'idée str_repeat de cette réponse pour la tester:

// Check the hook name size limit:

$long_hook_name = str_repeat( 'x', 1024 * 1024 ); // Adjust the size until you hit the roof!

add_action( $long_hook_name, function(){
    echo 'Greetings from the hook with a very long name';
});

do_action( $long_hook_name );

mais seulement tester ceci où c'est sûr (localement?) ;-)

La même chose devrait s'appliquer à la add_filter(), puisque add_action() est juste un wrapper:

function add_action($tag, $function_to_add, $priority = 10, $accepted_args = 1) {
            return add_filter($tag, $function_to_add, $priority, $accepted_args);
}

selon la source .

1
birgire

Le $tag est utilisé comme clé dans un tableau , il est donc converti en chaîne ou en entier. Il n'y a pas de taille maximale pour les chaînes, la mémoire disponible est la seule restriction réelle. La taille d'un entier dépend de la plate-forme:

La taille d'un entier dépend de la plate-forme, bien qu'une valeur maximale d'environ deux milliards soit la valeur habituelle (c'est-à-dire 32 bits signés). Les plates-formes 64 bits ont généralement une valeur maximale d'environ 9E18, à l'exception de Windows, qui est toujours 32 bits. PHP ne supporte pas les entiers non signés. La taille entière peut être déterminée à l'aide de la constante PHP_INT_SIZE et la valeur maximale à l'aide de la constante PHP_INT_MAX depuis PHP 4.4.0 et PHP 5.0.5.

Utilisez des chaînes pour une meilleure lisibilité. N'essayez pas de remplir la mémoire. :)

1
fuxia