O PHP
que significa ser funçãobinary-safe
?
O que os torna especiais e onde são normalmente usados?
Isso significa que a função funcionará corretamente quando você passar dados binários arbitrários (ou seja, strings contendo bytes não ASCII e / ou bytes nulos).
Por exemplo, uma função de segurança não binária pode ser baseada em uma função C que espera strings terminadas em nulo, portanto, se a string contiver um caractere nulo, a função ignorará qualquer coisa após ele.
Isso é relevante porque o PHP não separa claramente os dados de string e binários.
Os outros usuários já mencionaram o que
binary safe
significa em geral.Em PHP, o significado é mais específico, referindo-se apenas ao que Michael dá como exemplo.
Todas as strings em PHP têm um comprimento associado, que é o número de bytes que as compõem. Quando uma função manipula uma string, ela pode:
0
aparecerá.Também é verdade que todas as variáveis de string do PHP manipuladas pelo mecanismo também são terminadas em nulo. O problema com funções que dependem de 2. é que, se a própria string contiver um byte com valor
0
, a função que a está manipulando pensará que a string terminou naquele ponto e irá ignorar tudo depois disso.Por exemplo, se a
strlen
função do PHP funcionasse como a biblioteca padrão Cstrlen
, o resultado aqui seria errado:fonte
strlen()
é uma função binária segura ? Estou confirmando de você porque na página do Manual do PHP para a funçãostrlen()
não foi mencionado se é uma função segura binária ou uma função segura não binária . Essa única coisa que falta no Manual do PHP está criando confusão em minha mente, então eu quero confirmar isso de você. Aguardo ansiosamente a sua resposta. Obrigado.php -r 'var_dump("\x00\x00\x00");'
para verificar, mas strlen do php foi segura para binários para um muito longo tempo, pelo menos desde php 4.x (que disse, há uma abominação chamada "mb_overload", mas vamos apenas fingir que não existe - php.net /manual/en/mbstring.overload.php )Mais exemplos:
\x
indica notação hexadecimal. Veja: strings PHPTabela ASCII para ver a lista de caracteres ASCII
fonte
Hello\r\nWORLD
não deve ser o mesmo queHello
se a função fosse binária segura, certo?strlen()
binária-segura ?