PHP memory_limit란 무엇인가?
memory_limit는 단일 PHP 스크립트가 사용할 수 있도록 허용된 서버 메모리의 최대 용량을 의미합니다. 이 값은 일반적으로 php.ini 설정 파일에 정의되어 있으며, ini_get() 함수나 phpinfo()를 통해 현재 환경의 설정값을 확인할 수 있습니다.
다만 memory_limit 값은 '64M', '128K'처럼 숫자와 단위 접미사가 결합된 문자열 형태이기 때문에, 메모리 임계값과 비교하려면 먼저 바이트 단위의 숫자로 변환해야 합니다.
단위 변환 규칙
- M(Megabyte): 값 × 1024 × 1024 → 예: 64M = 64 × 1024 × 1024 바이트
- K(Kilobyte): 값 × 1024 → 예: 512K = 512 × 1024 바이트
- G(Gigabyte): 값 × 1024 × 1024 × 1024 → 예: 1G = 1 × 1024³ 바이트
- 단위 접미사가 없는 경우 이미 바이트 단위로 간주합니다.
memory_limit 확인 및 변환 예제 코드
아래 예제는 정규식으로 memory_limit 값에서 숫자와 단위를 분리한 뒤, 단위에 따라 바이트로 변환하고 특정 임계값(64MB) 이상인지 판별하여 XML 형태로 출력합니다.
<?php
$memory_limit = ini_get('memory_limit');
if (preg_match('/^(\d+)(.)$/', $memory_limit, $matches)) {
if ($matches[2] == 'M') {
$memory_limit = $matches[1] * 1024 * 1024; // nnnM -> nnn MB
} else if ($matches[2] == 'K') {
$memory_limit = $matches[1] * 1024; // nnnK -> nnn KB
}
}
$ok = ($memory_limit >= 64 * 1024 * 1024); // 최소 64M 이상인지 검사
echo '<phpmem>';
echo '<val>' . $memory_limit . '</val>';
echo '<ok>' . ($ok ? 1 : 0) . '</ok>';
echo '</phpmem>';
?>
코드 설명
ini_get('memory_limit')으로 현재 설정된 메모리 제한 문자열을 가져옵니다.preg_match()를 사용해 숫자 부분과 단위 문자(M 또는 K)를 분리합니다.- 단위가 'M'이면 1024 × 1024를, 'K'이면 1024를 곱해 바이트 값으로 변환합니다.
- 변환된 값이 64MB(64 × 1024 × 1024 바이트) 이상인지 비교하여 결과를 저장합니다.
- 메모리 제한 값과 통과 여부를
<phpmem>태그 안에 XML 형식으로 출력합니다.
실행 결과
스크립트를 실행하면 해당 서버 환경에 설정된 메모리 제한 값이 바이트 단위로 출력됩니다. 예를 들어 php.ini에서 memory_limit가 128M으로 설정되어 있다면 <val>134217728</val>이 출력되고, 임계값 조건 충족 여부에 따라 <ok> 태그에는 1 또는 0이 표시됩니다.
이러한 방식은 설치 스크립트나 시스템 요구 사항 검사 도구에서 서버 환경이 필요한 최소 메모리 조건을 만족하는지 자동으로 확인할 때 유용하게 활용됩니다.