XML 데이터를 분석하고 동일한 배열을 정보로 채우는 스크립트가 있습니다.정의되지 않은 배열에 액세스하여 메모리 누수가 발생했습니다.
일부 (거대한) 입력의 경우 스크립트가 충돌했습니다.
문제없이 180 시간 주위 실행되는 foreach 루프가
는 그 다음 그 각각의 새로운 루프, 메모리됩니까 (20 MB 반복 180 memory_get_usage()은 각각의 루프는 약 0.1 MB 추가합니다) 인 사용량이 두 배로 증가했습니다.
많은 로깅을 사용하여 문제를 foreach의 다음 줄로 추적 할 수있었습니다.
$의 푸 = $ F의 [ '부']
$f
하기 구조 가지고
array (
'name' => 'Test',
'value' => '4',
'unit' => 'min-1',
)
그러나 일부 (많은) 경우
(뿐만 아니라 180 반복 전에), 키unit
을 배열에 존재하지 않습니다.
나는 함께 라인을 교체하여 문제를 제거 할 수 있었다 :
$fu = (isset($f['unit']) ? $f['unit'] : '');
는 그런 반복이 완료 (완전히 370 반복)까지 실행됩니다.
현상에 대한 설명이 있습니까?
PHP 버전 : PHP 5.3.3-1ubuntu9.10 수호신 - 패치 (구 ...)와 함께
사용중인 PHP 버전은 무엇입니까? – Spudley
지원되는 PHP 버전에서 메모리 누수가 발견되면 PHP 버그 추적기에보고해야합니다. 그러나,'isset()'을 사용하는 해결책이 올바른 것입니다 - 어떤 경우에도 존재하지 않을 수도있는 배열 요소에 접근 할 때 이것은 최상의 방법으로 간주됩니다. – Spudley
@ Spudley : edited -이 것이 알려진 것인지 아닌지 확인하고 싶었습니다. – Alex