148 votes

En PHP, qu'est-ce que cela veut dire par une fonction binary-safe?

En PHP qu'est-ce que cela signifie par une fonction étant binary-safe ?

Qu'est-ce qui les rend spéciaux et où sont-ils généralement utilisés?

130voto

Michael Borgwardt Points 181658

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 binaire-sûre peut être basée sur une fonction C qui attend des chaînes terminées par un caractère nul. Ainsi, si la chaîne contient un caractère nul, la fonction ignorera tout ce qui le suit.

Ceci est pertinent car PHP ne sépare pas proprement les chaînes et les données binaires.

102voto

Artefacto Points 50896

Les autres utilisateurs déjà mentionné ce que "binaire sûr" signifie en général.

En PHP, le sens est plus spécifiques, se référant seulement à ce que Michael donne comme exemple.

Toutes les chaînes de caractères en PHP ont une longueur associés, qui sont le nombre d'octets qui le composent. Lorsqu'une fonction manipule une chaîne de caractères, il peut soit:

  1. S'appuyer sur la longueur de la meta-données.
  2. S'appuyer sur la chaîne nul terminée, c'est à dire, à la fois les données qui est en fait partie de la chaîne, un octet avec la valeur 0 s'affiche.

Il est également vrai que toutes les chaînes de caractères en PHP les variables manipulées par le moteur sont aussi nul terminée. Le problème avec les fonctions qui dépendent de 2. c'est que, si la chaîne contient un octet dont la valeur 0, la fonction que de la manipulation, il pense que la chaîne a pris fin à ce point ignorer tout ce qui suit.

Par exemple, si PHP strlen fonction travaillé comme bibliothèque standard C strlen, le résultat serait une erreur:

$str = "abc\x00abc";
echo strlen($str); //gives 7, not 3!

67voto

Subscriberius Points 141

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.

?>
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X