예전부터 이거 해결하려고 갖은 노력을 해봤는데 안됩니다
일단 클릭해서 원본을 보도록 하면 제대로 나오는데 게시판에는 가로로 돌아가서 나오네요
이미지프로세스 모듈이라는거 쓰니까, 자동 회전 설정하면 세로로 찍은 사진의 경우 아예 업로드가 안 되네요
(나중에 확인해보면 업로드는 됐는데 등록이 안되더군요)
애초에 왜 돌아가는지도 모르겠고...
용량이 3메가쯤 넘어가면 반드시 돌아가더군요
혹시 긴 축이 무조건 가로로 가도록 만드는 거라도 있는건지...
찾아보니까 php에 memory_limit랑 관련있다고 하는거 같던데, 128메가입니다
(보통 128메가면 문제 없다고 하더군요)
웹호스팅이라 늘릴수도 없고...
댓글 18
이미지프로세스 모듈은 GD 또는 ImageMagick을 사용해서 사진 방향을 바로잡는 기능이 있는데, 이 기능을 사용하면 사진 원본과 사본을 동시에 메모리에 올려놓고 픽셀들을 복사하기 때문에 순간적으로 메모리 사용량이 엄청나게 올라갑니다. 픽셀당 4바이트(RGBA)만 사용한다고 해도 요즘 흔한 1300만 화소짜리 사진이라면 1300만 × 4바이트 × 2장(원본+사본) = 104MB가 되어 버리죠. 서버의 메모리 제한이 128MB라면 XE 코어와 모듈들이 돌아갈 용량이 거의 남지 않는 것입니다. 그래서 일단 업로드는 되는데 이미지프로세스 모듈 실행 도중에 뻗어버리는 문제가 생깁니다.
PHP의 이미지 편집 기능이 메모리를 쓸데없이 많이 잡아먹는다고 예전부터 말이 많은데, 이건 PHP에서 고쳐줄 생각도 없고 XE에서 어떻게 할 수도 없는 문제라서... ㅡ.ㅡ ImageMagick 외부명령을 실행하면서 적절한 옵션을 주면 메모리 사용량을 줄일 수 있다는 얘기도 들었는데, 실제로 테스트해 보지는 않았고 만약 가능하다 해도 웹호스팅 환경에서 외부명령을 사용할 수 있는지도 의문입니다.
얼마전에 이미지프로세서모듈에서 사용되는 메모리를 128M로 늘려주어 일부 웹호스팅이용자의 메모리부족때문에 생기는 문제를 해결해 주었는데 이 정도도 요즘 고해상도 환경에서는 부족할 겁니다. 이 모듈의 128M로 처리된 것을 더 높은 용량으로 수정해서 사용하거나..(이렇게 사용하면 이미지프로세서 사용할때만 잠깐 임시로 설정된 메모리를 사용합니다.) 혹은 .htaccess 에서 메모리 리밋을 더 늘리는게 먹는 호스팅이시라면 늘려서 사용하셔야 합니다.
function check_memory_limit()
{
if (PHP_INT_MAX == '2147483647' && (substr(ini_get('memory_limit'), 0, -1) < '128'))
{
// 32bit PHP
@ini_set('memory_limit', '120M');
return true;
}
else if (PHP_INT_MAX == '9223372036854775807' && (substr(ini_get('memory_limit'), 0, -1) < '512'))
{
// 64bit PHP
@ini_set('memory_limit', '512M');
return true;
}
return false;
}
메모리 리밋이 128메가면 후자 아닌가요? 앞에는 <128이니까 128 미만이라는 거 아닌지...
정확한건 위 코드 분석이 가능하신분이 답을 해주시면 좋을듯 하구요.
그전에 그냥 .htaccess 파일에서 메모리리밋을 늘려주실 수 있는지 알아보시고 시도해보시는것도 좋을 것 같습니다.
여기 나온대로 php_value memory_limit 192M 이라고 마지막에 입력하니까 그대로 오류나네요
답변에 달린대로
<IfModule mod_php5.c>
php_value memory_limit 192M
</IfModule>
이런 식으로 입력하니까 오류는 안 나지만 안먹더군요. IfModule mod_php5.c 이 무슨 뜻인지는 모르지만...
그럼 이미지프로세서 모듈 중 여기가 제일 확율상 높을 거 같으니...
@ini_set('memory_limit', '120M');
이것을 한번 더 높게 256 정도로 고쳐서 테스트 해보심이 어떨까요?
if (PHP_INT_MAX == '2147483647' && (substr(ini_get('memory_limit'), 0, -1) < '256'))
여기도 256으로 고쳐야 할거 같기도 하구요.. 현재 128 이라고 하쎴는데.......
저도 어디 어디를 교쳐야 할지 모르겠네요. 다른분들의 도움이 필요할 듯 합니다.
근데 제가 쓰는 호스팅은 64비트이고 메모리제한이 128메가라서 후자로 들어가는데, 보면 "64비트에서 512메가 미만일 경우 512메가로 설정" 이라고 되어 있네요. 즉 이게 만약 적용이 된다면 이미지프로세스를 사용할때 메모리를 512메가까지 땡겨올 수 있어야 하는 거 같네요.
그리고 아마 안되는걸 보니 htaccess 막아놓은 것처럼 이것도 막아놨나 보네요.
참 여러가지로 웹호스팅은 어렵습니다. 비용도 웹호스팅이 저렴하지도 않은듯 하구요. 저희는 그냥 클라우드로 전환하고 여러가지로 속시원히 잘 쓰고 있네요.
임시방편으로 이렇게 활용하고 있네요.