Réponses:
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 safesignifie 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:
0apparaî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 strlenfonction de PHP fonctionnait comme la bibliothèque standard C strlen, le résultat ici serait faux:
$str = "abc\x00abc";
echo strlen($str); //gives 7, not 3!
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:
<?php
$string1 = "Hello";
$string2 = "Hello\x00World";
// This function is NOT ! binary safe
echo strcoll($string1, $string2); // gives 0, strings are equal.
// This function is binary safe
echo strcmp($string1, $string2); // gives <0, $string1 is less than $string2.
?>
\xindique la notation hexadécimale. Voir: chaînes PHP
0x00 = NULL
0x04 = EOT (End of transmission)
Table ASCII pour voir la liste des caractères ASCII
Hello\r\nWORLDne devrait pas être la même chose que Hellosi la fonction était binaire sûre, non?
strlen() -elle sûre pour les binaires ?