PHP에서 문자열의 최대 길이는 얼마입니까?
그렇다면 $variable
PHP에서 얼마나 커질 수 있습니까? 이 테스트를 시도했지만 충분한 시스템 메모리 (~ 2GB)가 있는지 잘 모르겠습니다. 어떤 종류의 한계가 있어야한다고 생각합니다. 문자열이 너무 커지면 어떻게됩니까? 연결되어 있습니까, 아니면 PHP에서 예외가 발생합니까?
http://php.net/manual/en/language.types.string.php 말한다 :
참고 : PHP 7.0.0부터는 64 비트 빌드의 문자열 길이에 대한 특별한 제한이 없습니다. 32 비트 빌드 및 이전 버전에서 문자열은 최대 2GB (최대 2147483647 바이트)까지 가능합니다.
PHP 5.x에서는 내부 코드가 부호있는 32 비트 정수로 길이를 기록했기 때문에 문자열이 2 31-1 바이트 로 제한되었습니다 .
예를 들어 다음을 사용하여 전체 파일의 내용을 숨길 수 있습니다. file_get_contents()
그러나 PHP 스크립트는 주어진 스크립트 실행에서 모든 변수에 할당 할 수있는 총 메모리에 제한이 있으므로 단일 문자열 변수의 길이에도 효과적으로 제한을 둡니다.
이 제한은 memory_limit
php.ini 구성 파일 의 지시문입니다. 메모리 제한은 기본적으로 PHP 5.2에서 128MB, 이전 릴리스에서 8MB입니다.
php.ini 파일에 메모리 제한을 지정하지 않으면 PHP 바이너리로 컴파일 된 기본값을 사용합니다. 이론적으로 소스를 수정하고 PHP를 다시 빌드하여이 기본값을 변경할 수 있습니다.
-1
php.ini 파일에서 메모리 제한 을 지정하면 검사가 중지되고 스크립트가 운영 체제가 할당 할만큼의 메모리를 사용할 수 있습니다. 이는 여전히 실질적인 한계이지만 시스템 리소스 및 아키텍처에 따라 다릅니다.
@ c2의 다시 주석 :
다음은 테스트입니다.
<?php
-- limit memory usage to 1MB
ini_set('memory_limit', 1024*1024);
-- initially, PHP seems to allocate 768KB for basic operation
printf("memory: %d\n", memory_get_usage(true));
$str = str_repeat('a', 255*1024);
echo "Allocated string of 255KB\n";
-- now we have allocated all of the 1MB of memory allowed
printf("memory: %d\n", memory_get_usage(true));
-- going over the limit causes a fatal error, so no output follows
$str = str_repeat('a', 256*1024);
echo "Allocated string of 256KB\n";
printf("memory: %d\n", memory_get_usage(true));
문자열은 2GB까지 가능합니다.
출처
PHP의 문자열 길이는 문자열이 PHP에서 표현되는 방식에 의해 제한됩니다. 기억은 그것과 아무 관련이 없습니다.
phpinternalsbook.com 에 따르면 문자열은 struct {char * val; int len; } C에서 int의 최대 크기는 4 바이트이므로 최대 문자열 크기를 2GB로 효과적으로 제한합니다.
다른 많은 기능 중에서 곧 출시 될 새로운 php7에서 2 ^ 31 바이트보다 큰 문자열 에 대한 지원을 추가했습니다 .
64 비트 빌드에서 길이가> = 2 ^ 31 바이트 인 문자열 지원.
슬프게도 그들은 얼마나 더 클 수 있는지 명시하지 않았습니다.
문자열 변수의 최대 길이는 2GiB-(2 ^ (32-1) 비트)입니다. 변수는 문자 (8 비트 / 1 바이트) 단위로 주소 지정 될 수 있으며 주소 지정은 부호있는 정수로 수행되므로 한계가 그 이유입니다. 배열은 각각 이전 제한을 따르는 여러 변수를 포함 할 수 있지만 문자열 변수에도 적용되는 memory_limit까지 총 누적 크기를 가질 수 있습니다.
이 질문에 올바르게 대답하려면 PHP 내부 또는 PHP가 빌드 된 대상을 고려해야합니다.
x86에 대한 일반적인 Linux 관점에서 대답하려면 ...
C 형식의 크기 : https://usrmisc.wordpress.com/2012/12/27/integer-sizes-in-c-on-32-bit-and-64-bit-linux/
변수에 대해 PHP에서 사용되는 유형 : http://php.net/manual/en/internals2.variables.intro.php
Strings are always 2GB as the length is always 32bits and a bit is wasted because it uses int rather than uint. int is impractical for lengths over 2GB as it requires a cast to avoid breaking arithmetic or "than" comparisons. The extra bit is likely being used for overflow checks.
Strangely, hash keys might internally support 4GB as uint is used although I have never put this to the test. PHP hash keys have a +1 to the length for a trailing null byte which to my knowledge gets ignored so it may need to be unsigned for that edge case rather than to allow longer keys.
A 32bit system may impose more external limits.
참고URL : https://stackoverflow.com/questions/3189040/what-is-the-maximum-length-of-a-string-in-php
'Development Tip' 카테고리의 다른 글
VS Code에서 Git 누락 – 소스 제어 공급자 없음 (0) | 2020.11.14 |
---|---|
JavaScript 스포이드 (마우스 커서 아래의 픽셀 색상 표시) (0) | 2020.11.14 |
문자열을 ASCII 바이트 배열로 이동 (0) | 2020.11.14 |
objc_setAssociatedObject ()는 무엇이며 어떤 경우에 사용해야합니까? (0) | 2020.11.14 |
TFS에서 특정 파일의 체크인을 항상 차단하려면 어떻게해야합니까? (0) | 2020.11.14 |