PHP에서 함수가 바이너리 안전하다는 것은 무엇을 의미합니까?
에서 PHP
무엇 함수가 됨으로써 의미합니까 binary-safe
?
무엇이 특별하고 일반적으로 어디에 사용됩니까?
이는 임의의 이진 데이터 (즉, 비 ASCII 바이트 및 / 또는 널 바이트를 포함하는 문자열)를 전달할 때 함수가 올바르게 작동 함을 의미합니다.
예를 들어, 이진이 아닌 함수는 널 (null)로 끝나는 문자열을 예상하는 C 함수를 기반으로 할 수 있으므로 문자열에 널 문자가 있으면 함수는 그 이후의 모든 것을 무시합니다.
PHP는 문자열과 이진 데이터를 완전히 분리하지 않기 때문에 관련이 있습니다.
다른 사용자들은 이미 binary safe
일반적인 의미를 언급 했습니다.
PHP에서, 그 의미는보다 구체적이며, Michael이 예제로 제공 한 것만 언급합니다.
PHP의 모든 문자열은 연관된 길이를 가지며,이 길이는이를 구성하는 바이트 수입니다. 함수가 문자열을 조작 할 때 다음 중 하나를 수행 할 수 있습니다.
- 해당 길이의 메타 데이터를 사용하십시오.
- 문자열이 null로 끝나는 문자열에 의존합니다. 즉, 실제로 문자열의 일부인 데이터 뒤에 값
0
이 있는 바이트 가 나타납니다.
엔진이 조작하는 모든 문자열 PHP 변수도 null로 끝나는 것도 사실입니다. 2에 의존하는 함수의 문제점은 문자열 자체에 value 바이트가 포함되어 있으면 0
조작하는 함수는 문자열이 그 시점에서 종료되었다고 생각하고 그 이후의 모든 것을 무시한다는 것입니다.
예를 들어, PHP strlen
함수가 C 표준 라이브러리처럼 작동 strlen
하면 결과가 잘못됩니다.
$str = "abc\x00abc";
echo strlen($str); //gives 7, not 3!
더 많은 예 :
<?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.
?>
\x
16 진 표기법을 나타냅니다. 참조 : PHP 문자열
0x00 = NULL
0x04 = EOT (End of transmission)
참고 : https://stackoverflow.com/questions/3264514/in-php-what-does-it-mean-by-a-function-being-binary-safe
'IT박스' 카테고리의 다른 글
Java JDK가 Mac에 설치되어 있는지 어떻게 확인합니까? (0) | 2020.07.30 |
---|---|
Outlook에서 내 줄 자동 정리 및 전자 메일 형식 강화 (0) | 2020.07.30 |
주문 목록의 시작 번호를 지정할 수 있습니까? (0) | 2020.07.30 |
XMLHttpRequest가 파일을로드 할 수 없습니다. (0) | 2020.07.30 |
lodash에 일치하는 항목을 대체하는 기능이 있습니까? (0) | 2020.07.30 |