Microsoft MVP성태의 닷넷 이야기
개발 환경 구성: 121. .NET 개발자가 처음 설치해 본 Apache + PHP [링크 복사], [링크+제목 복사],
조회: 38888
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 6개 있습니다.)
.NET 개발자가 처음 설치해 본 Apache + PHP

제 인생에 처음으로 PHP와 Apache를 만져보는군요. 그래도 많이 다양해졌죠. Tomcat도 설치해봤으니. ^^

.NET 개발자가 처음 설치해 본 TOMCAT
; https://www.sysnet.pe.kr/2/0/798

설치 방법을 알아보려고 웹을 검색하니 다음과 같이 친절한 설명이 되어 있군요. ^^

Windows에서 Apache, PHP를 이용하여 CUBRID 사용하기
; http://www.cubrid.com/zbxe/32448

그래서, 위의 설명에 따라 Apache는 다음의 경로에서 다운로드 받아서 설치해 보았습니다.

Downloading the Apache HTTP Server
; http://httpd.apache.org/download.cgi

현재(2011-05-21) 2.2.18 버전이 최신 버전이어서 선택했고, 아직 소스 코드 빌드까지는 필요없는 상태의 단순 실습을 위한 차원이기 때문에 SSL도 제외한 "Win32 Binary without crypto (no mod_ssl)"을 받아서 설치했습니다.

Win32 Binary without crypto (no mod_ssl) (MSI Installer): httpd-2.2.18-win32-x86-no_ssl-r2.msi
; http://mirror.khlug.org/apache//httpd/binaries/win32/httpd-2.2.18-win32-x86-no_ssl-r2.msi

일단, 설치 중의 포트 선택 옵션을 "for All Users, on Port 80, as a Service -- Recommended."로 했습니다. 비록, IIS가 현재 80 포트를 물고 있긴 하지만 설치 후 환경 설정 파일에서 아파치의 포트를 직접 변경할 작정으로 그렇게 했습니다.

어쨌든 그렇게 하면 설치 중에 다음과 같은 오류가 발생합니다.

php_installation_1.png

"
httpd.exe: Could not reliably determine the server's fully qualified domain name, using 192.168.0.95 for ServerName
(OS 10013)An attempt was made to access a socket in a way forbidden by its access permissions. : make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
Note the errors or message above, and press the  key to exit.
"

일단 무시하고 지나간 후 모두 설치된 다음 "[설치폴더]\conf\httpd.conf" 파일을 메모장으로 열어 "Listen 80"이라고 설정된 항목을 원하는 포트로 변경하고 트레이에 있는 아파치 서비스 제어 응용 프로그램(또는 NT 서비스 관리자)을 통해 웹 서버를 구동시켰습니다. (참고로, 저는 포트를 8000으로 지정했고, "http://localhost:8000/"로 검사를 해서 정상적으로 동작하고 있음을 확인했습니다.)




아파치를 msi로 설치하는 것이 싫다면 다음의 경로에서 zip 파일을 다운로드해도 됩니다.
Apache 2.4 VS16 Windows Binaries and Modules
 - httpd-2.4.48-win64-VS16.zip  
; https://www.apachelounge.com/download/VS16/binaries/httpd-2.4.48-win64-VS16.zip

zip 압축 파일로 풀은 경우, 역시 \conf\httpd.conf의 "Listen 80" 포트를 원한다면 다른 걸로 바꾸고, Apache가 설치된 디렉터리를 바꿔야 하는데 기본값은 ServerRoot에 지정이 됩니다.

// \conf\httpd.conf
Define SRVROOT "c:/Apache24"

ServerRoot "${SRVROOT}"

보는 바와 같이 c:\apache24가 기본 디렉터리로 되어 있으므로 그 디렉터리로 apache 인스톨 경로를 맞춰 주거나 아니면 현재의 경로를 지정하면 됩니다. 제 경우에는 d:\temp\apache24에 zip 압축을 풀었으므로 저 값을 지정했습니다. 만약 이 값을 바꾸지 않고 httpd.exe를 실행하면 다음과 같은 식의 오류 메시지를 보게 됩니다.

D:\temp\Apache24\bin> httpd
httpd: Syntax error on line 39 of D:/temp/Apache24/conf/httpd.conf: ServerRoot must be a valid directory

D:\temp\Apache24\bin> httpd
httpd.exe: Syntax error on line 75 of D:/apache/Apache24/conf/httpd.conf: Cannot load modules/mod_actions.so into server: The specified module could not be found.

마지막으로 다음의 메시지는 경고인데,

D:\temp\Apache24\bin> httpd
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::6958:11bd:362:1794. Set the 'ServerName' directive globally to suppress this message

무시해도 되지만, 역시 httpd.conf 파일의 내용에서 ServerName을 다음과 같은 식으로 지정해 주면 메시지를 없앨 수 있습니다.

// Listen 필드에 지정했던 포트

ServerName 127.0.0.1:8000




이제 PHP 설치 차례군요. 아파치를 종료시켜야 한다고 하니, 방금 전의 트레이 응용 프로그램으로 다시 NT 서비스를 중지시킨 후 다음의 사이트를 방문합니다.

PHP 다운로드
; http://www.php.net/downloads.php

위의 웹 페이지를 보면, 소스 코드를 직접 다운로드 받게 되어 있는데 지금은 빌드해야 할 특별한 이유가 없으므로 빌드된 결과물을 다운로드 받을 수 있는 링크를 방문합니다.

Windows Binaries
; http://windows.php.net/download/

위의 사이트에서 "VC9 x86 Thread Safe" 항목의 ZIP 파일을 다운로드 받고,

VC9 x86 Thread Safe (2011-Mar-22 13:27:32)
; http://windows.php.net/downloads/releases/php-5.3.6-Win32-VC9-x86.zip

VS16 x64 Thread Safe (2021-Jun-29 16:38:40)
; https://windows.php.net/downloads/releases/php-8.0.8-Win32-vs16-x64.zip

제 경우에는 "[아파치 설치폴더]\phpmodule"에 압축을 풀어 놓았고, "[아파치 설치폴더]\phpmodule\php5ts.dll" (php8ts.dll 등의 버전이 붙습니다.) 파일을 "[아파치 설치폴더]\bin" 폴더에 복사했습니다.

다음으로, "[아파치 설치폴더]\conf\httpd.conf" 파일을 열어서 다음의 내용을 추가하고,

LoadModule php5_module phpmodule/php5apache2_2.dll

// 역시 버전이 붙는데, PHP 8 버전인 경우,
// LoadModule php_module phpmodule/php8apache2_4.dll
//
// 모듈 이름이 "php_module"인데, 만약 이것을 "php8_module"로 지정하면 httpd.exe 실행 시 이런 오류가 발생합니다.
// httpd: Syntax error on line 187 of D:/temp/Apache24/conf/httpd.conf: Can't locate API module structure `php8_module' in file D:/temp/Apache24/phpmodule/php8apache2_4.dll: No error

이어서 동일한 파일의 <IfModule mime_module><IfModule /> 노드 내에 아래의 MIME 타입을 추가합니다.

AddType application/x-httpd-php .php

이제 정상적으로 설치되었는지 확인하기 위해 아파치 서버를 다시 구동시키고, "[아파치 설치폴더]\htdocs" 내에 phpinfo.php 파일을 만들어 다음과 같은 내용을 포함시킵니다.

<? phpinfo(); ?>

웹 브라우저를 이용하여 "http://localhost:8000/phpinfo.php"으로 확인하는 것으로 끝! 우와~~~ 신기하네요. ^^

php_installation_2.png

(그나저나... 아무리 임시 페이지이긴 하지만, 오타를 포함하고 있군요. "Unknow" --> "Unknown")




재미있는 현상이 하나 있는데요. 설명서에 의하면 "[아파치 설치폴더]\phpmodule\php.ini-development" 파일(또는 php.ini-production)을 C:\Windows 폴더에 복사하라고 나오는데요. (물론, 복사 후 Apach 서비스 재시작하고.)

실제로 그렇게 복사해 두고 phpinfo(); 호출을 포함하고 있는 phpinfo.php 파일을 방문하면 빈 페이지만 출력이 됩니다. 물론, C:\Windows 폴더에서 제거하면 다시 phpinfo.php 웹 페이지가 정상적으로 출력되고.

혹시나 싶어서, INI 경로를 출력해 주는 다음의 내용으로 test.php 파일을 만들어서 실행시키면,

==== 출처: http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=qna_function&wr_id=317904&page=4 ====
<?php 
$inipath = php_ini_loaded_file(); 

if ($inipath) { 
    echo 'Loaded php.ini: ' . $inipath; 
} else { 
    echo 'A php.ini file is not loaded'; 
} 
?> 

C:\Windows\php.ini 파일이 있는 경우 정상적으로 "Loaded php.ini: C:\Windows\php.ini"로 출력되는 것이 확인됩니다. 반대로 C:\Windows\php.ini 파일이 없으면 "A php.ini file is not loaded"라고 출력은 되지만 "phpinfo.php" 파일은 정상적으로 실행되고.

누구 이 현상에 대해서 설명해 주실 분 계신가요?




여담으로!

원래 PHP를 빌드까지 해보려고 했는데, 빌드에 필요한 binary-tools.zip이라는 파일을 다운로드 받을 수 있는 http://pecl2.php.net/downloads/php-windows-builds/php-libs/ 웹 사이트가 현재 서비스를 못하고 있습니다. (복구 시간은 예측이 안된다는 군요.)

php_installation_3.png

그런데 이 정도면 꽤나 놀랍습니다. 3월 19일에 발견(되었다는 것은 곧, 그 이전부터 해킹된 상태였다는 것이고.)되었는데 5월 21일 오늘까지도 복원을 못했다는 것인데... 심지어 "php.net security notice"에 의하면, 현재까지도 어디가 문제인지조차도 파악이 안된 것 같습니다.

근데, 문제 대응면에서 이해가 다소 안되는 부분이 있군요.

PHP 서버 해킹으로 코드 무결성 검사
; http://itlkorea.kr/html/lat_new_view.php?No=255

위의 기사에 보면, '해킹당한 컴퓨터는 포맷'되었다고 하는데... 그럼 어떻게 해킹당한 것인지 무슨 수로 찾아낸다는 것인지 의문이군요.




참고로 우분투 리눅스에 아파치 설치는 이런 환경 구성을 갖습니다.

[설치]
$ sudo apt install apache2

[확인]
$ apt show apache2
$ systemctl list-unit-files | grep apache2
$ systemctl status apache2

[환경 설정 파일]
$ cat /etc/apache2/apache2.conf

[index 위치]
$ cat /var/www/html/index.html




PHP를 Visual Studio Code에서 편집하는 경우 "php.validate.executablePath" 설정을 하라고 합니다. 그런 경우 settings.json에서 다음과 같은 식으로 입력하면 됩니다.

{
    "php.validate.executablePath": "D:\\temp\\Apache24\\phpmodule\\php.exe"
}



[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 7/20/2021]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 



2011-05-27 08시06분
"<? phpinfo(); ?>"로 작성한 페이지가 php.ini 설치 후에 동작하지 않는 것은 "<?php phpinfo(); ?>"로 수정하면 정상적으로 다시 동작되었습니다. php.ini에 PHP 파싱과 관련해서 뭔가 설정이 있나 본데... 잘 모르겠군요. ^^
정성태
2011-05-27 10시04분
PHPSchool에 물어봤는데, 답변이 금방 오네요. ^^

<? 와 <?php 의 차이가 뭔가요?
; http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=qna_function&wr_id=328325

기본값이 On으로 되어 있는 short_open_tag가 php.ini 파일에는 Off로 설정되어 있어서 발생한 문제였습니다. ^^
정성태

... 181  182  183  184  [185]  186  187  188  189  190  191  192  193  194  195  ...
NoWriterDateCnt.TitleFile(s)
338정성태2/4/200727438개발 환경 구성: 12. BUG: 웹 서비스에서 DataTable 사용하기 [2]파일 다운로드1
350정성태10/2/200620638    답변글 개발 환경 구성: 12.1. ASMX 2.0 and SchemaImporterExtensions파일 다운로드1
335정성태8/20/200628392디버깅 기술: 8. COM+ 서버 응용 프로그램에 대한 F5 디버깅 방법
334정성태8/20/200623611디버깅 기술: 7. VS.NET 2003/2005의 다중 프로젝트 디버깅
333정성태8/20/200624073개발 환경 구성: 11. COM+ 서버 활성화 보안 설정
331정성태8/27/200617032개발 환경 구성: 10. 최대 절전 모드와 VPC 네트워크 문제
330정성태8/20/200617315개발 환경 구성: 9. VPC로 구성하는 개인 환경
328정성태8/20/200635066개발 환경 구성: 8. AppVerifier 사용법 [1]
327정성태8/16/200631849개발 환경 구성: 7. ActiveX 서명 과정 자동화 [1]
326정성태8/16/200625608Team Foundation Server: 13. Sysnet 웹 사이트 TFS Migration
322정성태8/15/200620509개발 환경 구성: 6. 4GB 메모리 구성 [1]
316정성태9/20/200639588디버깅 기술: 6. .NET 예외 처리 정리 [6]
309정성태12/27/200640489디버깅 기술: 5. PDB 이야기 [7]
310정성태8/5/200627572    답변글 디버깅 기술: 5.1. PDB 파일에 따른 Debug 정보 - WinForm + Library 유형의 프로젝트파일 다운로드1
311정성태8/10/200627046    답변글 디버깅 기술: 5.2. PDB 파일에 따른 Debug 정보 - .NET 2.0 Web Application Project + Library 유형의 프로젝트
312정성태8/5/200629794    답변글 디버깅 기술: 5.3. PDB 파일에 따른 Debug 정보 - .NET 2.0 Web Site Model 유형의 프로젝트
313정성태8/12/200628930    답변글 디버깅 기술: 5.4. VS.NET 2005 디버그 모드에서의 PDB 파일 사용 차이 (1)
317정성태8/12/200626398    답변글 디버깅 기술: 5.5. VS.NET 2005 디버그 모드에서의 PDB 파일 사용 차이 (2)
318정성태8/12/200632832    답변글 디버깅 기술: 5.6. VS.NET 2005를 이용한 미니덤프 파일 분석 (1)
319정성태8/12/200627834    답변글 디버깅 기술: 5.7. VS.NET 2005를 이용한 미니덤프 파일 분석 (2) [1]
320정성태8/12/200631963    답변글 디버깅 기술: 5.8. WinDBG를 이용한 미니덤프 파일 분석 [1]
321정성태8/13/200636371    답변글 디버깅 기술: 5.9. Microsoft의 PDB 파일 관리
323정성태8/15/200637784    답변글 디버깅 기술: 5.10. Symbol Server 생성 [4]
324정성태8/15/200634626    답변글 디버깅 기술: 5.11. PDB 파일과 소스 코드
325정성태9/8/200627307    답변글 디버깅 기술: 5.12. CCP를 이용한 Windows Source Code 수준의 디버깅
329정성태8/19/200626331    답변글 디버깅 기술: 5.13. 소스 서버 구성 [1]
... 181  182  183  184  [185]  186  187  188  189  190  191  192  193  194  195  ...