Q&A

예전부터 이거 해결하려고 갖은 노력을 해봤는데 안됩니다


일단 클릭해서 원본을 보도록 하면 제대로 나오는데 게시판에는 가로로 돌아가서 나오네요


이미지프로세스 모듈이라는거 쓰니까, 자동 회전 설정하면 세로로 찍은 사진의 경우 아예 업로드가 안 되네요


(나중에 확인해보면 업로드는 됐는데 등록이 안되더군요)


애초에 왜 돌아가는지도 모르겠고...


용량이 3메가쯤 넘어가면 반드시 돌아가더군요


혹시 긴 축이 무조건 가로로 가도록 만드는 거라도 있는건지...


찾아보니까 php에 memory_limit랑 관련있다고 하는거 같던데, 128메가입니다


(보통 128메가면 문제 없다고 하더군요)


웹호스팅이라 늘릴수도 없고...

댓글 18

  • 2015.12.06 16:13 #107474
    네 php 메모리가 딸려서 그래요 고화질 사진의 경우 더 많은 메모리가 필요하게 됩니다.
  • 2015.12.06 16:31 #107478
    근데 128메가로도 부족한가요? 다른분들 보면 128메가 정도로도 충분한거 같던데...
  • 2015.12.06 23:37 #107582
    요즘 스마트폰으로 사진을 찍으면 방향은 아무렇게나 저장되고, 그 대신 그 사진을 찍을 당시에 폰이 어느 방향이었는지를 JPG 파일내에 별도로 저장해 둡니다. 폰에서 사진을 다시 보거나 일반적인 이미지 편집 프로그램에서 열어보면 그 정보를 사용해서 방향을 조정하여 화면에 표시하지요. 그러나 대부분의 웹브라우저들은 이런 기능이 없어서, 처음 저장된 상태 그대로 보여주기만 합니다.

    이미지프로세스 모듈은 GD 또는 ImageMagick을 사용해서 사진 방향을 바로잡는 기능이 있는데, 이 기능을 사용하면 사진 원본과 사본을 동시에 메모리에 올려놓고 픽셀들을 복사하기 때문에 순간적으로 메모리 사용량이 엄청나게 올라갑니다. 픽셀당 4바이트(RGBA)만 사용한다고 해도 요즘 흔한 1300만 화소짜리 사진이라면 1300만 × 4바이트 × 2장(원본+사본) = 104MB가 되어 버리죠. 서버의 메모리 제한이 128MB라면 XE 코어와 모듈들이 돌아갈 용량이 거의 남지 않는 것입니다. 그래서 일단 업로드는 되는데 이미지프로세스 모듈 실행 도중에 뻗어버리는 문제가 생깁니다.

    PHP의 이미지 편집 기능이 메모리를 쓸데없이 많이 잡아먹는다고 예전부터 말이 많은데, 이건 PHP에서 고쳐줄 생각도 없고 XE에서 어떻게 할 수도 없는 문제라서... ㅡ.ㅡ ImageMagick 외부명령을 실행하면서 적절한 옵션을 주면 메모리 사용량을 줄일 수 있다는 얘기도 들었는데, 실제로 테스트해 보지는 않았고 만약 가능하다 해도 웹호스팅 환경에서 외부명령을 사용할 수 있는지도 의문입니다.
  • 2015.12.07 02:20 #107647
    위 @기진곰 님 설명대로 이미지프로세스모듈을 사용하면 가로세로 확인해서 제대로 만들어 줍니다. 다만 메모리가 부족한 상황이 맞구요. 웹호스팅의 경우 메모리를 늘려달라고 요구하면 수용해주지 않을 겁니다. 왜냐면 다른 사이트에 피해를 주니까요.

    얼마전에 이미지프로세서모듈에서 사용되는 메모리를 128M로 늘려주어 일부 웹호스팅이용자의 메모리부족때문에 생기는 문제를 해결해 주었는데 이 정도도 요즘 고해상도 환경에서는 부족할 겁니다. 이 모듈의 128M로 처리된 것을 더 높은 용량으로 수정해서 사용하거나..(이렇게 사용하면 이미지프로세서 사용할때만 잠깐 임시로 설정된 메모리를 사용합니다.) 혹은 .htaccess 에서 메모리 리밋을 더 늘리는게 먹는 호스팅이시라면 늘려서 사용하셔야 합니다.
  • 2015.12.07 02:32 #107664
    근데 이거 해당부분 찾아보니까

    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 미만이라는 거 아닌지...
  • 2015.12.07 02:35 #107668
    아.. 저도 개발자가 아니라 php는 전혀 모릅니다. 다만 문제가 될때 카르마님게서 한번 업데이트를 해주신게 바로 언급하신 메모리 부족때문인데요. 근데 살짝 걱정되는게 서버에서 메모리를 늘려주지 못할경우 이미지프로세서에서 얼마까지 강제로 임시로 늘려서 쓸수 있을지 저는 확신이 없네요. 위 코드 내용이 그런 코드인거로 압니다만...

    정확한건 위 코드 분석이 가능하신분이 답을 해주시면 좋을듯 하구요.

    그전에 그냥 .htaccess 파일에서 메모리리밋을 늘려주실 수 있는지 알아보시고 시도해보시는것도 좋을 것 같습니다.
  • 2015.12.07 02:39 #107672
    .htaccess는 어제 해봤는데 500 에러 뜨더군요.
  • 2015.12.07 02:42 #107680
    500에러는 뭔가 잘못하신거 아닐까요? 이게 먹느냐 안먹느냐의 문제이지 에러는 뭔가 잘못 입력하셨을수도 있겠습니다. 제가 잘못알고 있지 않는다면요....
  • 2015.12.07 02:50 #107689
    php_value memory_limit ?M 이렇게 하신건가요??
  • 2015.12.07 03:00 #107693
    http://stackoverflow.com/questions/12172515/set-memory-limit-in-htaccess

    여기 나온대로 php_value memory_limit 192M 이라고 마지막에 입력하니까 그대로 오류나네요

    답변에 달린대로

    <IfModule mod_php5.c>
    php_value memory_limit 192M
    </IfModule>

    이런 식으로 입력하니까 오류는 안 나지만 안먹더군요. IfModule mod_php5.c 이 무슨 뜻인지는 모르지만...
  • 2015.12.07 03:03 #107697
    아, 죄송합니다. 좀더 알아보니까 아무래도 적용을 잘못한거 같네요. 좀 더 알아보고 해봐야겠네요
  • 2015.12.07 03:10 #107701
    호스팅업체 게시판 찾아보니 htaccess에서 php설정 막아놨다고 하네요. 아무래도 다른 방법을 찾아보던가 포기하던가 해야겠네요
  • 2015.12.07 03:14 #107705

    그럼 이미지프로세서 모듈 중 여기가 제일 확율상 높을 거 같으니...
    @ini_set('memory_limit', '120M');

    이것을 한번 더 높게 256 정도로 고쳐서 테스트 해보심이 어떨까요?

     

     

    if (PHP_INT_MAX == '2147483647' && (substr(ini_get('memory_limit'), 0, -1) < '256')) 

     

    여기도 256으로 고쳐야 할거 같기도 하구요.. 현재 128 이라고 하쎴는데.......

    저도 어디 어디를 교쳐야 할지 모르겠네요.  다른분들의 도움이 필요할 듯 합니다.

  • 2015.12.07 06:05 #107796
    이거에 대해 알아봤는데, PHP_INT_MAX == '2147483647' 이건 32비트 서버라는 뜻이고 뒤의 <128과 합치면 "32비트 서버에서 메모리 리밋이 128 미만일때 128메가로 설정하라" 라는 뜻인 거 같네요.

    근데 제가 쓰는 호스팅은 64비트이고 메모리제한이 128메가라서 후자로 들어가는데, 보면 "64비트에서 512메가 미만일 경우 512메가로 설정" 이라고 되어 있네요. 즉 이게 만약 적용이 된다면 이미지프로세스를 사용할때 메모리를 512메가까지 땡겨올 수 있어야 하는 거 같네요.

    그리고 아마 안되는걸 보니 htaccess 막아놓은 것처럼 이것도 막아놨나 보네요.
  • 2015.12.07 06:17 #107826
    아 그러시군요. 이상합니다. 어떻게 막았는지 모르겠지만 이게 사실 그렇게 막아 놓은 것을 개별프로그램에서 잠시만 살짝 살짝 늘려서 쓰는 방법인데 호스팅사에서 이 자료의 정보를 입수하고 막았다면 안될 수도 있겠습니다.

    참 여러가지로 웹호스팅은 어렵습니다. 비용도 웹호스팅이 저렴하지도 않은듯 하구요. 저희는 그냥 클라우드로 전환하고 여러가지로 속시원히 잘 쓰고 있네요.
  • 2015.12.07 06:25 #107835
    확실히 뭐 좀 하려고 하면 안되는게 많아서.. 골치아프긴 하네요
  • 2015.12.07 06:23 #107831
    호스팅 업체에 따라 .htaccess를 부분적으로 막아놓는 경우도 있습니다. 용량 제한도 마찬가지고요.
  • 2020.01.10 02:12 #1317363
    동일한 문제가 있어서...그냥 이미지를 png로 변경하고 축소해서 올리니까...그래도 올라가네요.
    임시방편으로 이렇게 활용하고 있네요.