지니워의 일상다반사

서버에서 php가 실행되지 않을 때 본문

본격 SE업무이야기/서버설정

서버에서 php가 실행되지 않을 때

지니워 2013. 12. 23. 11:35

개발자에게서 crontab 등록 요청이 왔다.

php파일을 주기적으로 실행해 달라는 요청이었는데 솔직히 이 부분을 잘 몰라서 살짝 고민했으나 구글링의 도움으로 해결했다.


================================================================================

* 서버에서 php 실행하기

- php 관련 패키지 중 php-cli라는 패키지가 있다. 이는 php-CommandLine, 즉 command line에서 php를 실행할 수 있게끔 해주는 패키지로써 이 패키지가 설치되어 있다면 crontab에


php 'php파일 절대경로'

ex) php /home/good/script.php


로 설정해주면 된다.

================================================================================


at 명령어를 이용하여 테스트를 진행하는데 어라?php와 관련된 것처럼 보이는 오류가 주루루룩 올라온다. waring부터 notice까지 종류도 다양하다 -_-


PHP Warning:  include(): open_basedir restriction in effect.

Warning: include(): open_basedir restriction in effect.


크...다시봐도 참 부끄럽다. 많은 오류 구문중 이 두줄만 봤더라도, 그냥 슥 훑어보기만 했더라도 금방 해결이 됐을 문제였건만 뭐에 씌였는지 저 두줄을 놓치고 mysql_connect()오류메세지랑 failed to open stream같은 오류 메세지에 현혹되어 보지 못했다 ㅠ 애꿎은 개발자에게 코딩 확인요청만 해댔으니...


대충 눈치를 챘겠지만 이것은 php.ini 설정과 관련하여 발생하는 오류이다.

php.ini에는 open_basedir이라는 설정값이 존재한다. 이는  php와 관련된 보안에 아주 유용하게 사용할 수 있는 설정값으로 open_basedir에 등록된 경로 외에는 php의 실행을 막아버리는 중요한 옵션이다. 예를 들어, 웹서비스의 home이 /home/good/public_html 이라면

open_basedir = /home/good/public_html

으로 지정해주면 된다. 만약 더 추가를 하고 싶다면 끝에 :를 쓴다음 경로를 추가하면 된다.

open_basedir = /home/good/public_html:/home/good/config

이런식으로 말이다.


서버에서 php가 실행되지 않았던 것은 실행하려는 php파일안에 include되는 파일이 open_basedir밖에 있어서 정상적으로 include되지 않아서였고 그 경로를 추가함으로써 문제를 해결할 수 있었다.


이 문제를 찾아보면서 웹서버 엔진단에서(nginx) 이 부분을 설정해 줄 수 있다고하는데 그부분에 대해서 좀 더 알아봐야겠다. 이 부분은 차후 정리가 되는대로 포스팅하겠다.

Comments