개요
Widnows + Homestead 환경에서 php 외부 모듈을 추가해야 할 일이 생겼습니다.
php.ini 위치를 확인 후 가볍게 적용하려고 했으나 잘 되지 않았습니다.
총 2단계에 걸쳐서 막혔습니다.
1. 일반 APM과 다른 확장 모듈 폴더의 위치
2. Cli 에서만 적용된 모듈
확장 모듈 폴더의 위치
기존 APM에서는 아래 명령어를 통해 쉽게 php.ini위치를 파악하고
php -r "phpinfo();" | grep "Loaded Configuration File"
extension_dir과 enable_dl의 주석을 해제한 후 필요한 extension 주석을 삭제하는 방식으로 모듈을 추가할 수 있었습니다.
하지만 Homestead 환경에서는 ext 폴더가 없을뿐더러 이미 다른 폴더를 통해 확장 모듈을 불러오고 있었습니다.
php -r "phpinfo();" | grep ^extension
알아낸 폴더에 확장 외부 모듈 파일을 넣은 후 extension을 추가했습니다.
그러면 해결될 줄 알았으나 신기하게도 CLI에서는 모듈이 적용되었다고 나왔지만
실제 웹에서는 적용되지 않고 로드가 되지 않았습니다.
CLI, FPM, CGI
vagrant에 접속 후 사용 중인 php 폴더로 이동해주시면 cgi, cli, fpm 폴더를 확인할 수 있습니다.
여기서 저는 cli 폴더에 있는 php.ini 만을 수정했습니다
그러면 cli가 무엇이고 나머지 cgi, fpm도 하위에 php.ini 파일이 있었는데 이들은 무엇일까요
CLI (Command Line Interface)
친숙해 보이즌 CLI는 Command Line Interface가 맞습니다.
사용자가 CLI에서 PHP와 상호작용할 수 있도록 하는 PHP용 CLI를 의미합니다.
그렇기에 php -m 을 입력 시에는 모듈에 추가된 걸로 보였던 것입니다.
FPM (FastCGI Process Manager)
CGI가 하나의 요청 프로세스를 만들고 처리하는데 이는 성능이 느렸습니다.
이를 보완하기 위해 만들어진 것이 Fast CGI입니다, FastCGI로 PHP를 실행시켜주는 것이 FPM입니다.
웹 서버와 PHP가 상호 작용할 수 있도록 해주는 웹 서버(Apache, Nginx)용 PHP 인터페이스로 생각하시면 됩니다.
CGI (Common Gateway Interface)
CLI 사양을 준수하는 데이터를 수락하고 반환하는 프로그램입니다.
웹 서버가 처리 불가능한 요청이 웹 서버로 올 경우 그 정보를 처리 가능하도록 외부 프로그램을 통해 HTMl로 반환하고 결과를 웹 서버가 가져가서 브라우저로 전송하는 기능입니다.
저는 CLI에 php.ini 만을 수정해서 되지 않았던 것입니다
그렇기에 아래 주소들의 php.ini 똑같이 수정하고
/etc/php/7.4/cgi/php.ini
/etc/php/7.4/cli/php.ini
/etc/php/7.4/fpm/php.ini
서버를 재시작해주면 웹에서 적용된 것을 확인할 수 있습니다.
sudo service nginx restart
nginx가 아닌 apache면 아래 명령어입니다
service httpd restart
이렇게 나뉘지 않는 php도 있으므로 이런게 있군아 하심 됩니다.
'PHP > Setting' 카테고리의 다른 글
[Window 10] Ubuntu WSL 설치 시 경로 찾기 (0) | 2022.10.29 |
---|---|
[Window] 로컬에서 PHP 버전 바꾸기(업데이트, 다운그레이드) (2) | 2022.10.11 |
PHP 컴포저 설치 (Composer) (0) | 2022.08.28 |
[APM] Apache 설치 (2) | 2022.08.27 |
[APM] PHP 설치 (0) | 2022.08.27 |