Extra Form
PHP PHP 7.1
CMS XpressEngine

 현재 서명을 이미지 파일로 저장하려고 합니다. 

 우선 해당 이미지 파일을 php로 전송까지는 성공했습니다. 

 그 이후, 해당 이미지 데이터를 이미지 파일로 저장해서, 이메일로 전송 하려고 합니다. 

 

 모듈은 XE기본 모듈인 Contact 모듈을 사용중이며, 서명을 이메일로 바로 전송하는 기능을 구현하려고 합니다. 

아래는 해당 소스입니다. 

 

아래처럼 file_put_contents 를 호출하고 이미지 파일을 저장하면, $value 값에는 숫자만 나옵니다. 이 숫자가 의미하는 바를 잘 이해하지 못하겠습니다. 혹시 file/cache 폴더에 폴더를 생성하거나, 파일을 생성하나 싶어 검색해보았지만 해당 폴더나 파일은 검색이 안되네요, 

질문의 요지는 파일을 저장 혹은 이메일로 사인파일을 전송하려고 합니다. $encoded_image 에는 이미지 데이터 소스가 들어있습니다.

 

if($extra_item->eid == "sign")
                {
                    $data_uri = $value;
                    $encoded_image = explode(",", $data_uri)[1];
                    $decoded_image = base64_decode($encoded_image);
                    $value = file_put_contents("signature.png", $decoded_image);
                    debugPrint($value);
                    $mail_content[$extra_item->eid] = $value;
                    $content .= $extra_item->name. ':  ' . $value . "\r\n";
                }
  • profile
    우선 해당 숫자는 글쓰기 성공시, 바이트 숫자라는건 알겠습니다. 해당 파일은 어디에 저장되는건가요?
  • profile profile

    경로 없이 그냥 signature.png라고만 하셨으니 아무 폴더도 없는 곳에 저장되겠지요. 왜 자동으로 files/cache 폴더에 저장될 거라고 생각하시나요? 거기는 캐시파일 재생성을 클릭할 때마다 모두 지워지는 곳입니다.

    file_put_contents 함수의 사용방법은 XE이냐 아니냐에 영향을 받지 않습니다. 주어진 이름으로 파일을 저장하는 함수일 뿐입니다. 특정 폴더에 넣고 싶으면 폴더명을 지정해야 하고, 폴더가 존재하지 않는다면 mkdir 함수로 폴더부터 먼저 만든 후에 파일을 저장해야 합니다.

    이런 복잡한 과정을 쉽게 처리할 수 있도록 XE에서는 FileHandler::writeFile 함수를 제공합니다.

  • profile profile
    감사합니다. 해당 함수 찾아볼꼐요
  • profile profile
    그런데 폴더명을 정해 줘야 하는 것은 FileHandler도 마찬가지예요.

    서명을 이미지로 받으신다고 하셨으니, XE에서 기본적으로 서명이 어디에 저장되는지 찾아서 그 경로와 똑같이 만들어 쓰시는 것이 두고두고 관리하기 편하실 것 같습니다. files/member_extra_info/signature 아래에 회원마다 폴더가 따로 있었던 것으로 기억합니다.
  • profile profile
    넵 감사합니다 ^^