}

블로그 소개


*여러분들의 따듯한 댓글은 5%, 팔로우는 10% 블로그 포스팅 속도와 퀄리티를 높여줍니다.*

프로필

팔로우 해주시면 포스트할 때 큰 힘이 됩니다!!! 사실 저도 이 팔로우가 무슨 기능이 있는지는 모르겠습니다만, 팔로우 수가 늘면 '날 응원해주는 사람들이 있구나' 생각이 들어서 큰 힘이 됩니다.

팔로어

다른 페이지로 이동


리눅스 독학 페이지 운영체제 독학 페이지 네트워크 독학 페이지 하드웨어 독학 페이지 프로그래밍 독학 페이지 보안 페이지

오스 페이지 다이어트 정보 페이지 게임 정보 페이지 인생 꿀팁


****사진을 클릭하시면 페이지로 이동할 수 있습니다!****

<===***===↓↓↓You can use translate on the chrome↓↓↓===***===>

2021년 11월 4일 목요일

아파치 php 연동 자세히!

안녕하세요 마무입니다. 오늘은 백엔드 프로그래밍 언어(CGI)로 유명한 "리눅스 php 설치"와 "아차피 php 연동", "아파치 php 연동 오류 해결" 방법에 대해서 포스트해보도록 하겠습니다.

오늘 이 포스트를 다 읽으시면, 앞으로 php를 이용해 역동적인 웹 서버를 구축할 수 있는 토대를 마련하게 됩니다!

 -----목차-----

1. libxml2, libxml2-devel 설치

2. 기존 php 제거

3. php 다운 및 설치

i) php 설치 오류 해결법 

4. 아파치와 php 연동 

i) 아파치와 php 연동 확인

-----------------

여기서 못 찾은 정보는 

리눅스 독학 페이지 : https://mamu2830.blogspot.com/p/blog-page_13.html

네트워크 독학 페이지 : https://mamu2830.blogspot.com/p/blog-page_15.html

에서 찾아보세요!


당연하지만 '아파치 설치', 'mysql 설치'에서 yum 과정들을 이미 자세히 다뤘으니 이 포스트에서는 보여주지 않고 간략하게 알려줄겁니다.

만약 이 포스트에서 간단한 yum 설치나 컴파일 과정이 이해가 안되신다면 

"리눅스 독학 페이지" -> "아파치 설치"편부터 보고 오시길 바랍니다!




1. libxml2, libxml2-devel 설치


php 구동에 필요한 패키지 "libxml2", "libxml2-devel"yum으로 다운해줍니다.





2. 기존 php 제거


기존에 설치돼 있는 php를 제거해줄 것인데, 그 전에 웹데몬이 실행중일수도 있으니 먼저 

"killall httpd"를 터미널에 쳐서 혹시 켜져 있다면 종료해주고, "rpm -qa | grep php"를 한 뒤 설치 돼 있으면 'php'단어가 들어간 패키지는 모두 제거해줍니다. 

기존에 안 깔려있으면 바로 php 소스코드를 다운 받아 설치하면 됩니다.




3. php 다운 및 설치


https://www.php.net/downloads.php#v7.4.24


위 사이트에 들어가서 


7.4버전대에서 원하는 압축 형식을 다운 받으면 됩니다. 

저는 xz를 한번 다운 받아보겠습니다.




이번엔 압축 형식이 'xz'이니, "tar Jxvf php-7.4.24.tar.xz"로 풀어줘서 'php-7.4.24'란 디렉토리가 나왔습니다.(눈치 빠르신 분들은 밑에 사진에선 7.4.25인걸 보실 수 있으실텐데요... 제가 중간에 포스트를 멈추고 다시 시작할 때쯤 업데이트가 있었나봅니다만 별 상관 없습니다.)

'php-7.4'시작하는 디렉토리 내부에 들어가서




이렇게 "./configure --with-apxs2=/usr/local/apache/bin/apxs --with-config-file-path=/usr/local/apache/conf --with-mysqli=/usr/local/mysql/bin/mysql_config --with-pdo-mysql=/usr/local/mysql" 

이란 컴파일 전 긴 옵션을 주고 설정 해줍니다.

'apxs' APache eXtenSion(아파치 확장)의 약자로 아파치 서버의 확장 모듈을 컴파일하고 설치하게 해주는 프로그램(도구)입니다.

"--with-apxs2="란 아파치의 apxs가 있는 위치를 알려주는 옵션입니다. 

"--with-config-file-path="란 php를 컴파일할 때 아파치의 설정 파일의 절대 위치를 알려주는 옵션입니다.

"--with-mysqli="이란 php과 MySQL을 연동시키기 위해 'mysql_config' 절대 위치를 적어주는 옵션입니다.

'mysqli'이란 기존 mysql보다 안전하게 발전된 MySQL Improved의 약자입니다. 

'pdo'PHP Data Objects의 약자로, php가 특정 데이터베이스를 지정하는 코드 없이 데이터베이스에 접근하게 해주는 인터페이스입니다.

"--with-pdo-mysql="이란 pdo를 MySQL에 적용하게 해주는 php의 "pdo-mysql"에게 'mysql' 절대 위치를 알려주는 옵션입니다.  



i) php 설치 오류 해결법 




만약 이렇게 configure 과정에서 "Sorry, I cannot run apx. Possible reasons follw:(미안,  apx를 실행 못하겠어. 안되는 이유는 다음때문이 아닐까)라 뜬다면

1. perl in not installed(perl이 설치가 안 돼있거나)

2. apxs was not found. try to pass the path using --with-apxs2=/path/to/apxs(apxs를 못 찾았거나. 이 경우 --with-apxs2=[apxs가 있는 절대경로]를 사용해서 한번 해봐)

3. apache was not built using --enable-so(아파치가 --enable-so라는 옵션을 이용해서 만들어지지 않았거나)

이렇게 뜨는데요, 보통은 오타가 나서 그런 것이니 먼저 위에적은 긴 ./configure에서 오타가 일어난게 아닌가 확인해주세요

그리고 만약 아무리 확인해도 오타가 없을 경우 위에서 말한대로 해주세요(perl 설치 -> with-apxs2 오타확인 -> apache를 컴파일 할 때 옵션으로 --enable-so를 빼먹었는지)


만약  No package 'sqlite3' found이란 오류가 


이렇게 뜰 경우, "yum install sqlite-devel"을 설치해주면 됩니다.

설치후 다시 옵션들과 함께 configure를 해보시면



이렇게 뜨면서 잘 되실겁니다

이후 국민 연계인

'make'를 해주면



마지막에 이렇게 빌드가 완료됐다고 뜹니다.

이후 make test를 하셔서 확실하게 확인해야하지만, 우린 공부용으로 개인이 하는거니

그냥 바로 "make install" 해도됩니다. 

만약 'make test'를 하게 되면



이렇게 11926개의 테스트 항목을 검사하기 때문에 시간이 좀 걸립니다.



"make install"끝나면 이런 모습입니다.




4. 아파치와 php 연동


이렇게 "php 설치"가 끝났고, 웹 서버 프로그램인 아파치와 php의 연동만 하면 됩니다.


우리는 지금 php 디렉토리 내부에 있는 




'php.ini-production'이라는 파일을 아파치 설정 디렉토리인 /usr/local/apache/conf/에 "/usr/local/apache/conf/php.ini"이름으로 복사해야합니다.



이렇게 "cp php.ini-produciton /usr/local/apache/conf/php.ini"를 통해 

'apache 디렉토리 내' 설정 파일들이 모여있는 'conf' 디렉토리 내부에 'php.ini'라는 이름으로 복사를 해줍니다.




이렇게 말이죠.

이후 아파치 서버가 php 확장자를 가진 파일을 해석할 수 있도록 아파치 서버의 설정 파일인

"/usr/local/apache/conf/httpd.conf"을 열어서 AddType이 적혀있는 글들에서

"AddType application/x-httpd-php .php .htm .html .inc .php5"

"AddType application/x-httpd-php-source .php5"추가로 적어줍니다.


참고로 AddType의 위치를 찾는 것은 vim, vi 포스트에서 배웠던 "/AddType"을 통해서 

"/AddType"이렇게 치면 바로 이동이 가능합니다.

 


이렇게 말이죠.

여기서 우리는 좀만 더 내려서 주석이 없는 AddType이 적힌 곳 바로 밑에




"AddType application/x-httpd-php .php .htm .html .inc .php5"

"AddType application/x-httpd-php-source .php5"를 추가로 적어줍니다.

참고로 앞에 여백은 그냥 'tab'한번 누른겁니다. 여백은 한칸 이상만 띄우면 되니 억지로 맞추려고 안해도 됩니다.

물론 사실 정확히는




"httpd.conf" 내에 주황색으로 표시한 <Ifmodule mime_module> 영역 안에만 적으면 됩니다.

이후 저장하고 나가신 다음

당연히 설정을 바꿨으니.  httpd, 즉 아파치를 재시작해야겠죠?

"/usr/local/apache/bin/apachectl restart"를 쳐서 아파치를 재시작해줍니다.

물론 처음 아파치를 키시는 분들은



이렇게 "Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message"("localhost.localdomain"을 사용해서는 서버의 풀 도메인 이름을 확실하게 확인할 수 없습니다. 이 메시지를 더이상 보지 않으려면 'ServerName' 지시문을 globally{공인 도메인이나 IP를 의미하지 않나 싶습니다}로 설정하세요)

라고 뜰 수 있는데요, 이 경우 위 말대로 그냥 httpd.conf 파일을 열어서 'ServerName' 부분에 자신의 컴퓨터 IP나 127.0.0.1를 적어주면 됩니다.



 

실제로 파일을 열어서 "/ServerName" 이렇게 검색하셔서 가보시면 

주황색으로 표시한 1번 부분이렇게 써 있습니다.

ServerName gives the name and port that the server uses to identify itself.(ServerName은 서버가 자체적으로 인식할 수 있게 이름과 포트번호를 준다)

This can often be determined automatically, but we recommend you specify it explicitly to prevent problems during startup(이것은 종종 자동으로 결정될 수도 있으나, 우리는 당신이 명백하게 이것을 적어서 스타트업 동안 발생할 수 있는 문제들을 방지하길 바란다)

If you host doesn't have a registerd DNS name, enter its IP address here.(만약 당신이 등록된 DNS 이름을 갖고 있지 않다면, 그냥 컴퓨터의 IP 주소를 여기에 적어라)

라고 돼 있습니다.

여기서 우리는 아직 DNS를 구축하지 않았기에 초록색 2번 위치의 주석을 제거하고, www.example.com:80을 지운뒤 그냥 자신 컴퓨터 IP를 적으면 되는 겁니다. 

만약 자신의 IP가 뭔지 모르신다면 터미널에서 ifconfig를 쳐서 알아내 써도 되지만, 자기 자신을 의미하는 127.0.0.1를 적어도 됩니다.



이렇게 말이죠.

이후 저장후 나간뒤 다시 한번

"/usr/local/apache/bin/apachectl restart"를 쳐서 아파치를 재시작

해주시면



이렇게 제대로 실행되는 것을 볼 수 있습니다.(ps -ef | grep apache는 여러분들에게 확실히 보여주고자 한 것으로, 여러분은 안해도 됩니다)

이제 끝...이라고 하면 안되죠!

우리는 애초 php 설치 및 아파치와의 연동을 확실하게 하고자 했던 것이니, 당연히 연동이 잘 됐나 확인해야죠?


i) 아파치와 php 연동 확인 


연동이 잘 됐나 확인하는 방법은 여러가지가 있지만

먼저 php 모듈이 아파치에 연동이 됐으면, 당연히 아파치 모듈 디렉토리(/usr/local/apache/modules/) php모듈이 들어있을겁니다.

가서 확인을 해주시면

아파치 동적 모듈인 'libphp7.so'가 



이렇게 들어있는 것을 확인할 수 있습니다.

그리고 또 당연히 모듈이 들어있는 것 뿐만 아니라, 아파치 설정 파일(httpd.conf)내에 모듈을 불러오는 지시어(LoadModule)에 아파치 동적 모듈 'libphp7.so'도 있어야 할 겁니다.

"httpd.conf"를 연다음 "/LoadModule"를 해서 쭈욱 내려 보시면



LoadModule 지시어 마지막에 php7모듈이 주석없이 써져있는 것을 볼 수 있습니다.

사실 여기까지하면, 아파치 프로그램이 php모듈을 정상적으로 인식했다는 것은 확인했습니다만... 인생은 역시 실제로 작동하는 것까지 확인해야죠?

우린 아파치가 php 기능을 사용하는지 확인해보면 연동이 됐는지 확인은 끝입니다.

기능 확인은 직접 php 파일을 만들어서, 아파치 웹 프로그램이 잘 보여주는지 확인해보면 됩니다.



"httpd.conf"파일에서 'DocumentRoot'"/usr/local/apache/htdocs"로 돼 있는데, 이게 뭐냐면 바로 우리가 아파치를 구동해서 웹서버를 만들고, 클라이언트가 브라우저로 우리 웹서버에 접속했을 때 맨 상위 디렉토리인 'root(/)'가 "/usr/local/apache/htdocs"라는 겁니다.

무슨 말이냐?

현재 우리가 가동한 웹 서버를 접속하려면, 브라우저에 우리 컴퓨터 IP나 localhost, 127.0.0.1를 치면 




이렇게 나오는데요, 주황색으로 표시한 "127.0.0.1/"의 이 최상위 디렉토리 '/'가 바로 



이 "/usr/local/apache/htdocs/ 디렉토리 내부이며

우리가 브라우저에서 본 "It works!"라는 글

'/usr/local/apache/htdocs/' 내부에 있는 'index.html' 파일 내용이었다는 것이죠.

단지 보안을 위해서 /usr/local/apache/htdocs라는 디렉토리 위치클라이언트에겐 '/'로 보여준거라는 겁니다.



실제로 /usr/local/apache/htdocs/index.html 을 열어서 확인해보시면

이렇게 아까 브라우저에서 확인한 페이지의 html코드를 확인할 수 있죠!

여기까지만 말해도 저의 네트워크 독학 페이지나 리눅스 독학 페이지의 "네트워크 개념 포스트들"다 읽고 오신분들이라면 당연히 이해가 되리라 생각합니다.

아직도 혹시 리눅스마스터 2급 범위를 읽고 오지 않으신분들은 

리눅스 독학 페이지 에서 꼭 2급 범위를 다 읽고 오시길 바랍니다.

어쨌든 우리가 만든 웹 서버는 "/usr/local/apache/htdocs/"를 홈페이지로 보여준다는 것을 알았으니, 이 디렉토리 내부에 'php로 만든 파일'을 집어넣으면 아파치가 php를 제대로 사용하는지 알 수 있을겁니다!




/usr/local/apache/htdocs/에서 [아무이름].php(php 확장자)라는 이름의 파일을 vi로 만들어주시고(저같은 경우 걍 test.php라 지었습니다)

그 파일 내에



<?php

phpinfo();

?>

를 적어주고 저장후 나가줍니다.

참고로 'phpinfo()' 라는 함수는 현재 설치된 php의 infomation(정보)를 브라우저에 보여주는 내장함수입니다.

만약 아파치가 제대로 php를 인식한다면, 이 test.php파일을 인식 및 실행을 하여 브라우저를 통해 결과를 보여주겠죠.

확인을 위해 다시 브라우저에 가서 URL에

127.0.0.1/[아까 만든 파일.php]를 적어줍니다. 그러면



이렇게 제대로 아파치가 php파일을 해석해 결과를 브라우저로 보여주는 것을 볼 수 있습니다.

여기까지 끝내면 아파치와 php가 제대로 연동됐구나를 알 수 있는겁니다!

 




이 포스트까지를 통해서 드디어 여러분들은 php언어를 이용해 여러분들만의 역동적인 웹 서버를 구축할 수 있는 토대를 마련했습니다!

남은건 MySQL과 아파치를 연동하기만 하면, 진정한 웹 서버 구축 토대가 완성이 되는 것이죠!

다음에는 아파치 설정 파일들에 대해서 포스트를 해보겠습니다!

오늘도 긴 포스트 읽느라 고생하셨고! 도움이 되셨다면 따뜻한 댓글 및 팔로우 클릭을 해주시면 저에게 큰 힘을 줘서 포스트 퀄리티 향상에 도움이 됩니다!

그럼 다음에 더 좋은 포스트로 찾아뵙겠습니다!

 

댓글 없음:

댓글 쓰기

#1 여러분들이 소중한 시간을 투자해 달아주시는 따뜻한 댓글들은 저에게 정말 큰 힘이 됩니다!

#2 저의 각 포스트들은 엄청난 노력과 시간 투자를 통해 만들어진 포스트들로, 무단 복제나 모방하는 것을 금지합니다.

#3 저의 포스트에도 틀린 정보가 있을 수도 있습니다. 그럴 경우 친절한 말투로 근거와 함께 댓글로 달아주시면 정말 감사하겠습니다!

* 바쁜 개인 일정으로 댓글 답변이 많이 느립니다 *