>백엔드 개발 >PHP 튜토리얼 >如何解决PHP 치명적인 오류: X 바이트의 허용 메모리 크기가 소진되었습니다(Y 바이트를 할당하려고 시도했습니다).

如何解决PHP 치명적인 오류: X 바이트의 허용 메모리 크기가 소진되었습니다(Y 바이트를 할당하려고 시도했습니다).

王林
王林원래의
2023-08-18 22:34:541221검색

如何解决PHP Fatal error: Allowed memory size of X bytes exhausted (tried to allocate Y bytes)

PHP 치명적인 오류 해결 방법: 허용된 메모리 크기 바이트가 소진되었습니다(Y 바이트 할당을 시도했습니다). 이 오류는 일반적으로 코드에서 너무 많은 메모리 리소스를 사용하여 발생하며 이 문서에서는 이 문제를 해결하는 몇 가지 방법을 소개합니다.

메모리 제한을 늘리세요
  1. 이 오류 메시지에 표시된 X는 현재 PHP 환경의 메모리 제한입니다. php.ini를 수정하여 메모리 제한을 늘릴 수 있습니다. 먼저 php.ini 구성 파일을 찾은 후 다음 두 줄을 찾습니다.
memory_limit = XM

XM을 128M 또는 256M과 같이 더 큰 값으로 수정합니다. 파일을 저장한 후 웹 서버를 다시 시작하면 적용됩니다.

코드 최적화
  1. 코드에서는 메모리 사용량을 줄이도록 노력해야 합니다. 다음은 코드를 최적화하는 몇 가지 방법입니다.

전역 변수 사용 방지: 전역 변수는 항상 메모리를 차지합니다. 지역 변수를 사용하거나 변수를 함수 매개변수로 전달할 수 있습니다.

큰 배열이나 객체 사용을 피하세요. 대량의 데이터를 처리할 때는 반복자나 생성기를 사용하여 메모리 사용량을 줄여보세요.

더 이상 사용되지 않는 리소스 해제: PHP의 가비지 수집 메커니즘이 적시에 메모리를 해제할 수 있도록 더 이상 사용되지 않는 변수, 객체 또는 역참조를 코드에서 적시에 해제합니다.

캐시 사용
  1. 캐시를 사용하면 메모리 소비를 줄이고 코드 실행 효율성을 높일 수 있습니다. 다음은 캐싱을 사용하는 몇 가지 방법입니다.

캐싱 기능 사용: PHP에는

등과 같이 캐싱에 사용할 수 있는 많은 함수가 있습니다.

apc_store()apc_fetch()file_get_contents()캐싱 구성 요소 사용: Memcached, Redis 등과 같은 일부 타사 캐싱 구성 요소를 사용하여 자주 읽고 써야 하는 데이터를 캐시에 저장할 수 있습니다.

템플릿 엔진 사용: 템플릿 엔진을 사용하면 일부 정적 콘텐츠를 캐시하고 후속 요청 속도를 향상시킬 수 있습니다.

페이징 처리
  1. 많은 양의 데이터를 처리해야 할 때 페이징을 사용하면 한 번에 데이터의 일부만 처리할 수 있습니다. 페이징을 통해 메모리 사용량을 허용 가능한 범위 내에서 제어할 수 있습니다.

다음은 페이징 처리에 대한 코드 예시입니다.

$page = $_GET['page']; // 获取当前页码
$pageSize = 10; // 每页显示的数据量
$offset = ($page - 1) * $pageSize; // 计算偏移量

$sql = "SELECT * FROM `table` LIMIT $offset, $pageSize"; // 构建SQL查询语句

// 执行查询并处理结果
$result = mysqli_query($conn, $sql);
while ($row = mysqli_fetch_assoc($result)) {
    // 处理每一行数据
}

페이징 처리를 통해 현재 페이지 번호에 필요한 데이터만 처리하므로 메모리 소모를 줄일 수 있습니다.

요약

PHP 치명적 오류: 허용된 메모리 크기가 X 바이트 소진됨(Y 바이트 할당 시도) 오류가 발생하면 먼저 메모리 제한을 늘린 다음 캐싱 및 페이징을 사용하여 코드를 최적화하여 영향을 줄여야 합니다. 메모리 사용량. 이러한 방법은 메모리 오버플로 문제를 해결하고 코드의 정상적인 작동을 보장하는 데 도움이 될 수 있습니다.

위 내용은 如何解决PHP 치명적인 오류: X 바이트의 허용 메모리 크기가 소진되었습니다(Y 바이트를 할당하려고 시도했습니다).의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.