인PHP
함수가 되는 것은 무엇을 의미합니까?
무엇이 특별하고 일반적으로 어디에 사용되는가?
질문에 대한 답변
즉, 임의의 바이너리 데이터(즉, 비 ASC를 포함하는 문자열)를 전달하면 함수가 올바르게 작동합니다.II 바이트 및/또는 늘바이트).
예를 들어 non-binary-safe 함수는 null-terminated 문자열을 예상하는 C 함수를 기반으로 할 수 있습니다.따라서 문자열에 null 문자가 포함되어 있으면 함수는 그 뒤의 모든 것을 무시합니다.
이는 PHP가 문자열과 이진 데이터를 완전히 분리하지 않기 때문에 관련이 있습니다.
다른 사용자가 이미 언급했습니다.binary safe
일반적인 의미입니다.
PHP에서는 Michael이 예시로 제시한 내용만을 언급하여 의미가 더 구체적입니다.
PHP의 모든 문자열에는 길이를 구성하는 바이트 수가 관련되어 있습니다.함수가 문자열을 조작할 때 다음 중 하나를 수행할 수 있습니다.
- 그 길이의 메타 데이터에 의존합니다.
- 문자열이 null로 종단되는 것에 의존합니다.즉, 실제로 문자열의 일부인 데이터 뒤에 값이 있는 바이트가 표시됩니다.
0
표시됩니다.
또한 엔진에 의해 조작되는 모든 문자열 PHP 변수도 null 종단됩니다.2.에 의존하는 함수의 문제는 문자열 자체에 값을 가진 바이트가 포함되어 있는 경우입니다.0
조작하는 함수는 그 시점에서 문자열이 종료된 것으로 간주하고 그 이후의 모든 것을 무시합니다.
예를 들어 PHP가strlen
기능은 C 표준 라이브러리처럼 동작합니다.strlen
, 여기서의 결과는 틀립니다.
$str = "abcx00abc"; echo strlen($str); //gives 7, not 3!
기타 예:
<?php
$string1 = "Hello";
$string2 = "Hellox00World";
// 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.
?>
0x00 = NULL 0x04 = EOT (End of transmission)