En PHP
quoi signifie être fonction binary-safe
?
Qu'est-ce qui les rend spéciaux et où sont-ils généralement utilisés?
Cela signifie que la fonction fonctionnera correctement lorsque vous lui passerez des données binaires arbitraires (c'est-à-dire des chaînes contenant des octets non ASCII et / ou des octets nuls).
Par exemple, une fonction non sécurisée pour les binaires peut être basée sur une fonction C qui attend des chaînes terminées par null, donc si la chaîne contient un caractère nul, la fonction ignorera tout ce qui suit.
Ceci est pertinent car PHP ne sépare pas proprement les données de chaîne et les données binaires.
Les autres utilisateurs ont déjà mentionné ce que
binary safe
signifie en général.En PHP, le sens est plus précis, se référant uniquement à ce que Michael donne à titre d'exemple.
Toutes les chaînes en PHP ont une longueur associée, qui est le nombre d'octets qui la composent. Lorsqu'une fonction manipule une chaîne, elle peut soit:
0
apparaîtra.Il est également vrai que toutes les variables PHP de type chaîne manipulées par le moteur sont également terminées par null. Le problème avec les fonctions qui reposent sur 2., est que, si la chaîne elle-même contient un octet avec une valeur
0
, la fonction qui la manipule pensera que la chaîne s'est terminée à ce point et ignorera tout par la suite.Par exemple, si la
strlen
fonction de PHP fonctionnait comme la bibliothèque standard Cstrlen
, le résultat ici serait faux:la source
strlen()
est une fonction de sécurité binaire ? Je confirme de votre part parce que sur la page du manuel PHP pour la fonction,strlen()
il n'est pas mentionné que ce soit une fonction de sécurité binaire ou une fonction de sécurité non binaire . Cette seule chose qui manque dans le manuel PHP crée la confusion dans mon esprit, donc je veux le confirmer de votre part. J'attends avec impatience votre réponse. Merci.php -r 'var_dump("\x00\x00\x00");'
pour vérifier, mais strlen de php est binaire sûr depuis très longtemps, depuis au moins php 4.x (cela dit, il existe une abomination appelée "mb_overload", mais prétendons simplement que cela n'existe pas - php.net /manual/en/mbstring.overload.php )Plus d'exemples:
\x
indique la notation hexadécimale. Voir: chaînes PHPTable ASCII pour voir la liste des caractères ASCII
la source
Hello\r\nWORLD
ne devrait pas être la même chose queHello
si la fonction était binaire sûre, non?strlen()
-elle sûre pour les binaires ?