Extra Form
PHP PHP 7.1
CMS Rhymix

php를 통해서 excel를 읽어서 안에 있는 cell의 데이터와 이미지를 파싱해서

 

서버에 저장을 해야합니다

 

현재 phpexcel은 개발이 종료가 되었다고 하여 다들 PhpSpreadsheet를 쓰라고 되어있더군요

 

그래서 로컬에서 별도로 PhpSpreadsheet를 사용했을때는 아무 이상이 없었는데

 

rhymix 프로젝트에 넣은 다음에 사용하려고 하니깐 안되더군요.

 

PhpSpreadsheet 찾다가 정보가 너무나도 적어서 여기에다가 글을 올리게 되었습니다.

 

phpspreadsheet의 vendor를 사용하면 rhymix가 실행이 안되고 rhymix에 기본적으로 설치된 vendor를 사용하면

 

phpspreadsheet 가 안되더군요.

 

이 2개를 vendor를 병합하거나 혹은 다른 방법이 있을까요?

 

p.s : 제일 중요한 것은 excel 문서 안의 이미지를 가져와서 서버에 저장을 해야하는 것인데 그 방법이 전부 phpspreadsheet 사용하라는

        조언 밖에 없더군요

  • Lv7
    composer 로 설치하시면될텐데..
  • Lv7 ?
    rhymix에 있는 쪽에서 composer install 명령어를 입력하니 에러가 뜨더군요
    ============================================================
    [RuntimeException]
    The lock file does not contain require-dev information, run install with th
    e --no-dev option or run update to install those packages.
    ============================================================
    그래서 rhymix에서 막은게(?) 아닌가 생각 들어서 그랬습니다
    아니면 composer.json에서 문제가 있어서 그런건가요?
  • Lv36

    잘 됩니다. 실제 프로젝트에서 사용하고 있습니다.

    라이믹스 설치경로의 vendor 폴더는 절대 건드리지 마시고요,

    엑셀 기능을 사용할 모듈 경로 아래에 composer를 사용하여 phpSpreadsheet를 따로 설치한 후

    실제 필요한 시점에 해당 vendor 폴더의 autoload.php를 인클루드하면 됩니다.

     

    include $this->module_path . 'vendor/autoload.php';
    $file = new PhpOffice\PhpSpreadsheet\Spreadsheet();
    $sheet = $file->getActiveSheet();

    ...후략...

  • Lv36 ?
    그럼 경로의 대해서 질문 드릴게 있습니다.
    www/hostname/ 경로에 composer.json 및 vendor 폴더가 있는데
    www/hostname/임의폴더/ 이 경로에 phpspreadsheet 를 설치하고 composer.json을 사용해도 상관이 없는건가요?
  • ? Lv36

    네, 당연히 그렇게 해야 합니다.

    서드파티 자료에서 필요한 라이브러리 중 코어에서 기본 제공하지 않는 것은
    해당 서드파티 자료의 설치경로 안에서 직접 해결하는 것이 원칙입니다.
    composer를 쓰든 vendor를 만들든 모두 지금 개발중이신 모듈이나 애드온의 설치경로 안에서 하세요.

    /home/hostname/vendor 폴더 하나에 다 몰아넣으면 성능도 좋아지고 더 깔끔하다고 생각하실지 모르지만,
    그건 코어의 일부이므로 코어를 업데이트하면 초기화됩니다. 코어를 건드리면 인생이 고달파집니다 ㅠ

  • Lv36 ?
    아 그렇군요. vendor에 같이 해야된다고 생각했는데 정말 위험한 생각이었군요
    감사합니다 :)
  • ? Lv36

    composer의 단점 중 하나가...
    vendor 폴더에 들어 있거나 composer.json에 적어놓았다고 모두 자동으로 인클루드되는 것이 아니라
    내가 설치한 것이 무엇인지 vendor/composer/... 아래에 꽤 복잡한 형식으로 기억을 하고 있어요.
    내가 설치한 것이 아니면 vendor 폴더에 들어 있어도 인식을 못 한다는 뜻입니다.
    그래서 출처가 다른 2개의 vendor 폴더를 합쳐놓으면 한 쪽밖에 인식을 못 합니다 ㅠㅠ

     

    PSR-0 및 PSR-4에서 폴더 구조에 대한 규칙을 아주 깐깐하게 정한 것은

    네임스페이스 및 클래스 이름만 알면 자동으로 찾아서 인클루드할 수 있도록 하기 위함인데,

    이럴 거면 뭐하러 규칙을 정했는지 모르겠네요...

  • Lv36 ?
    죄송하지만 추가적인 질문을 드립니다.
    cafe24 에서 호스팅할 예정인데 cafe24에서 composer를 사용할 수 없기 때문에
    로컬에서 설치했던 파일들을 전부 FTP에 업로드 하는 형식으로 했습니다.
    로컬에서는 정상 작동이 되었는데 cafe24에서는 오류가 발생이 됩니다.
    로컬에서는 composer install 하고 난 뒤의 vendor 폴더와 composer.json을 옮겼는데 무엇이 잘못이 된걸까요?
    cafe24에서 composer install 를 입력을 못 했기 때문에 발생되는 현상인가요?
  • ? Lv36
    제대로 업로드했고 경로가 맞다면 문제 없습니다. composer는 원래 로컬에서 설치한 후 서버에 업로드한다고 가정하고 만들어진 물건입니다. 사실 서버단에서는 composer.json도 필요 없고, vendor 폴더의 내용만 맞으면 됩니다.