2010-08-24 2 views
2

libGD를 사용하여 PHP에서 이미지의 크기를 조정하기 전에 "메모리 부족"으로 인해 PHP 프로세스가 완전히 종료 될 수 있으므로 작업을 수행 할 수있는 메모리가 충분한 지 확인하고 싶습니다. 붙잡히지 마라.libGD 작업에 필요한 메모리 예상

// check available memory 
if(!is_mem_available(($from_w * $from_h * 4) + ($to_w * $to_h * 4))){ 
    return false; 
} 

테스트 라이브러리에 비해이 훨씬 더 많은 메모리가 정말 보이는 것으로 나타났다 :

나의 생각은 내가 원래의 각 픽셀 (RGBA)에 대한 새로운 이미지의 메모리 4 바이트를 필요 거라고했다 사용. 누구든지 더 나은 방법을 제안 할 수 있습니까?

+0

폭 x 높이 x 4보다 훨씬 더 많은 것을 사용한다는 의미입니까? –

+0

그런데 반갑습니다! –

+0

설명 : libGD가 내 근사값보다 적은 메모리를 사용하므로 크기 조정이 문제없이 완료 될 수 있습니다. –

답변

1

가 나는 imagecopyresampled의 소스 코드를 분석하여 GD의 피크 메모리 사용량을 찾을 수 있어야 상상,하지만이 어려울 수 있습니다, 확장 프로파일을 필요로 버전마다 다를, 일반적으로 신뢰할 수.

은 상황에 따라 다른 접근 방식이 마음에 온다 : 이미지의 크기를 조정하는 경우, 동일한 서버에 다른 PHP 스크립트를 부르지 만, HTTP를 사용하여 (물론, file 매개 변수를 살균)

$file = urlencode("/path/to/file"); 
$result = file_get_contents("http://example.com/dir/canary.php?file=$file&width=1000&height=2000"); 

"out of memory"오류로 스크립트가 실패하면 이미지가 너무 큽니다.

이미지의 크기를 성공적으로 관리하면 크기 조정 결과가 포함 된 임시 파일로 경로가 반환 될 수 있습니다. 상황이 정상적으로 진행될 것입니다.

관련 문제