성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] Reordering on an Alpha processor ;...
[정성태] 공유 감사합니다. ^^ 참고로, WPF에서 WindowsF...
[Tom Lee] 답변 감사합니다. 나름의 해결책 연구해보고 여기에도 공유해봅니다...
[정성태] 아래의 글을 보면, MoveWindow 하면 될 듯한데요. ^^...
[Tom Lee] 안녕하세요 올려주신 글 참고하여 WPF 어플리케이션 안에 Uni...
[정성태] A graphical depiction of the steps ...
[정성태] 질문을 주셔서 출판사 측에 문의를 했습니다. 약 한 달 정도 후...
[Thorondor
] @정성태 개인 블로그인데도 거의 커뮤니티 급 인 것 같아요. 요...
[정성태] Roll A Lisp In C - Reading ; https...
[정성태] Java - How to use the Foreign Funct...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <div style='font-family: 맑은 고딕, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>.NET 개발자가 처음 설치해 본 Apache + PHP</div> <br /> 제 인생에 처음으로 PHP와 Apache를 만져보는군요. 그래도 많이 다양해졌죠. Tomcat도 설치해봤으니. ^^<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow-x: scroll; font-family: Consolas, Verdana;' > .NET 개발자가 처음 설치해 본 TOMCAT ; <a target='_tab' href='http://www.sysnet.pe.kr/2/0/798'>http://www.sysnet.pe.kr/2/0/798</a> </pre> <br /> 설치 방법을 알아보려고 웹을 검색하니 다음과 같이 친절한 설명이 되어 있군요. ^^<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow-x: scroll; font-family: Consolas, Verdana;' > Windows에서 Apache, PHP를 이용하여 CUBRID 사용하기 ; <a target='_tab' href='http://www.cubrid.com/zbxe/32448'>http://www.cubrid.com/zbxe/32448</a> </pre> <br /> 그래서, 위의 설명에 따라 Apache는 다음의 경로에서 다운로드 받아서 설치해 보았습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow-x: scroll; font-family: Consolas, Verdana;' > Downloading the Apache HTTP Server ; <a target='_tab' href='http://httpd.apache.org/download.cgi'>http://httpd.apache.org/download.cgi</a> </pre> <br /> 현재(2011-05-21) 2.2.18 버전이 최신 버전이어서 선택했고, 아직 소스 코드 빌드까지는 필요없는 상태의 단순 실습을 위한 차원이기 때문에 SSL도 제외한 "Win32 Binary without crypto (no mod_ssl)"을 받아서 설치했습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow-x: scroll; font-family: Consolas, Verdana;' > Win32 Binary without crypto (no mod_ssl) (MSI Installer): httpd-2.2.18-win32-x86-no_ssl-r2.msi ; <a target='_tab' href='http://mirror.khlug.org/apache//httpd/binaries/win32/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</a> </pre> <br /> 일단, 설치 중의 포트 선택 옵션을 "for All Users, on Port 80, as a Service -- Recommended."로 했습니다. 비록, IIS가 현재 80 포트를 물고 있긴 하지만 설치 후 환경 설정 파일에서 아파치의 포트를 직접 변경할 작정으로 그렇게 했습니다.<br /> <br /> 어쨌든 그렇게 하면 설치 중에 다음과 같은 오류가 발생합니다.<br /> <br /> <img alt='php_installation_1.png' src='/SysWebRes/bbs/php_installation_1.png' /><br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow-x: scroll; font-family: Consolas, Verdana;' > " 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 <ESC> key to exit. " </pre> <br /> 일단 무시하고 지나간 후 모두 설치된 다음 "[설치폴더]\conf\httpd.conf" 파일을 메모장으로 열어 "Listen 80"이라고 설정된 항목을 원하는 포트로 변경하고 트레이에 있는 아파치 서비스 제어 응용 프로그램(또는 NT 서비스 관리자)을 통해 웹 서버를 구동시켰습니다. (참고로, 저는 포트를 8000으로 지정했고, "http://localhost:8000/"로 검사를 해서 정상적으로 동작하고 있음을 확인했습니다.)<br /> <br /> <hr style='width: 50%' /><br /> <br /> 아파치를 msi로 설치하는 것이 싫다면 다음의 경로에서 zip 파일을 다운로드해도 됩니다. <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow-x: scroll; font-family: Consolas, Verdana;' > Apache 2.4 VS16 Windows Binaries and Modules - httpd-2.4.48-win64-VS16.zip ; <a target='_tab' href='https://www.apachelounge.com/download/VS16/binaries/httpd-2.4.48-win64-VS16.zip'>https://www.apachelounge.com/download/VS16/binaries/httpd-2.4.48-win64-VS16.zip</a> </pre> <br /> zip 압축 파일로 풀은 경우, 역시 \conf\httpd.conf의 "Listen 80" 포트를 원한다면 다른 걸로 바꾸고, Apache가 설치된 디렉터리를 바꿔야 하는데 기본값은 ServerRoot에 지정이 됩니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow-x: scroll; font-family: Consolas, Verdana;' > // \conf\httpd.conf Define SRVROOT "c:/Apache24" ServerRoot "${SRVROOT}" </pre> <br /> 보는 바와 같이 c:\apache24가 기본 디렉터리로 되어 있으므로 그 디렉터리로 apache 인스톨 경로를 맞춰 주거나 아니면 현재의 경로를 지정하면 됩니다. 제 경우에는 d:\temp\apache24에 zip 압축을 풀었으므로 저 값을 지정했습니다. 만약 이 값을 바꾸지 않고 httpd.exe를 실행하면 다음과 같은 식의 오류 메시지를 보게 됩니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow-x: scroll; font-family: Consolas, Verdana;' > 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. </pre> <br /> 마지막으로 다음의 메시지는 경고인데,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow-x: scroll; font-family: Consolas, Verdana;' > 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 </pre> <br /> 무시해도 되지만, 역시 httpd.conf 파일의 내용에서 ServerName을 다음과 같은 식으로 지정해 주면 메시지를 없앨 수 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow-x: scroll; font-family: Consolas, Verdana;' > // Listen 필드에 지정했던 포트 ServerName 127.0.0.1:8000 </pre> <br /> <hr style='width: 50%' /><br /> <br /> 이제 PHP 설치 차례군요. 아파치를 종료시켜야 한다고 하니, 방금 전의 트레이 응용 프로그램으로 다시 NT 서비스를 중지시킨 후 다음의 사이트를 방문합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow-x: scroll; font-family: Consolas, Verdana;' > PHP 다운로드 ; <a target='_tab' href='http://www.php.net/downloads.php'>http://www.php.net/downloads.php</a> </pre> <br /> 위의 웹 페이지를 보면, 소스 코드를 직접 다운로드 받게 되어 있는데 지금은 빌드해야 할 특별한 이유가 없으므로 빌드된 결과물을 다운로드 받을 수 있는 링크를 방문합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow-x: scroll; font-family: Consolas, Verdana;' > Windows Binaries ; <a target='_tab' href='http://windows.php.net/download/'>http://windows.php.net/download/</a> </pre> <br /> 위의 사이트에서 "VC9 x86 Thread Safe" 항목의 ZIP 파일을 다운로드 받고,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow-x: scroll; font-family: Consolas, Verdana;' > VC9 x86 Thread Safe (2011-Mar-22 13:27:32) ; <a target='_tab' href='http://windows.php.net/downloads/releases/php-5.3.6-Win32-VC9-x86.zip'>http://windows.php.net/downloads/releases/php-5.3.6-Win32-VC9-x86.zip</a> VS16 x64 Thread Safe (2021-Jun-29 16:38:40) ; <a target='_tab' href='https://windows.php.net/downloads/releases/php-8.0.8-Win32-vs16-x64.zip'>https://windows.php.net/downloads/releases/php-8.0.8-Win32-vs16-x64.zip</a> </pre> <br /> 제 경우에는 "[아파치 설치폴더]\phpmodule"에 압축을 풀어 놓았고, "[아파치 설치폴더]\phpmodule\php5ts.dll" (php8ts.dll 등의 버전이 붙습니다.) 파일을 "[아파치 설치폴더]\bin" 폴더에 복사했습니다.<br /> <br /> 다음으로, "[아파치 설치폴더]\conf\httpd.conf" 파일을 열어서 다음의 내용을 추가하고,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow-x: scroll; font-family: Consolas, Verdana;' > 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 </pre> <br /> 이어서 동일한 파일의 <IfModule mime_module><IfModule /> 노드 내에 아래의 MIME 타입을 추가합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow-x: scroll; font-family: Consolas, Verdana;' > AddType application/x-httpd-php .php </pre> <br /> 이제 정상적으로 설치되었는지 확인하기 위해 아파치 서버를 다시 구동시키고, "[아파치 설치폴더]\htdocs" 내에 phpinfo.php 파일을 만들어 다음과 같은 내용을 포함시킵니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow-x: scroll; font-family: Consolas, Verdana;' > <? phpinfo(); ?> </pre> <br /> 웹 브라우저를 이용하여 "http://localhost:8000/phpinfo.php"으로 확인하는 것으로 끝! 우와~~~ 신기하네요. ^^<br /> <br /> <img alt='php_installation_2.png' src='/SysWebRes/bbs/php_installation_2.png' /><br /> <br /> (그나저나... 아무리 임시 페이지이긴 하지만, 오타를 포함하고 있군요. "Unknow" --> "Unknown")<br /> <br /> <hr style='width: 50%' /><br /> <br /> 재미있는 현상이 하나 있는데요. 설명서에 의하면 "[아파치 설치폴더]\phpmodule\php.ini-development" 파일(또는 php.ini-production)을 C:\Windows 폴더에 복사하라고 나오는데요. (물론, 복사 후 Apach 서비스 재시작하고.)<br /> <br /> 실제로 그렇게 복사해 두고 phpinfo(); 호출을 포함하고 있는 phpinfo.php 파일을 방문하면 빈 페이지만 출력이 됩니다. 물론, C:\Windows 폴더에서 제거하면 다시 phpinfo.php 웹 페이지가 정상적으로 출력되고.<br /> <br /> 혹시나 싶어서, INI 경로를 출력해 주는 다음의 내용으로 test.php 파일을 만들어서 실행시키면,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow-x: scroll; font-family: Consolas, Verdana;' > ==== 출처: <a target='_tab' href='http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=qna_function&wr_id=317904&page=4'>http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=qna_function&wr_id=317904&page=4</a> ==== <?php $inipath = php_ini_loaded_file(); if ($inipath) { echo 'Loaded php.ini: ' . $inipath; } else { echo 'A php.ini file is not loaded'; } ?> </pre> <br /> C:\Windows\php.ini 파일이 있는 경우 정상적으로 "Loaded php.ini: C:\Windows\php.ini"로 출력되는 것이 확인됩니다. 반대로 C:\Windows\php.ini 파일이 없으면 "A php.ini file is not loaded"라고 출력은 되지만 "phpinfo.php" 파일은 정상적으로 실행되고.<br /> <br /> 누구 이 현상에 대해서 설명해 주실 분 계신가요?<br /> <br /> <hr style='width: 50%' /><br /> <br /> 여담으로!<br /> <br /> 원래 PHP를 빌드까지 해보려고 했는데, 빌드에 필요한 binary-tools.zip이라는 파일을 다운로드 받을 수 있는 <a target='_tab' href='http://pecl2.php.net/downloads/php-windows-builds/php-libs/'>http://pecl2.php.net/downloads/php-windows-builds/php-libs/</a> 웹 사이트가 현재 서비스를 못하고 있습니다. (복구 시간은 예측이 안된다는 군요.)<br /> <br /> <img alt='php_installation_3.png' src='/SysWebRes/bbs/php_installation_3.png' /><br /> <br /> 그런데 이 정도면 꽤나 놀랍습니다. 3월 19일에 발견(되었다는 것은 곧, 그 이전부터 해킹된 상태였다는 것이고.)되었는데 5월 21일 오늘까지도 복원을 못했다는 것인데... 심지어 "<a target='_tab' href='http://php.net/archive/2011.php#id2011-03-19-2'>php.net security notice</a>"에 의하면, 현재까지도 어디가 문제인지조차도 파악이 안된 것 같습니다.<br /> <br /> 근데, 문제 대응면에서 이해가 다소 안되는 부분이 있군요.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow-x: scroll; font-family: Consolas, Verdana;' > PHP 서버 해킹으로 코드 무결성 검사 ; <a target='_tab' href='http://itlkorea.kr/html/lat_new_view.php?No=255'>http://itlkorea.kr/html/lat_new_view.php?No=255</a> </pre> <br /> 위의 기사에 보면, '해킹당한 컴퓨터는 포맷'되었다고 하는데... 그럼 어떻게 해킹당한 것인지 무슨 수로 찾아낸다는 것인지 의문이군요.<br /> <br /> <hr style='width: 50%' /><br /> <br /> 참고로 우분투 리눅스에 아파치 설치는 이런 환경 구성을 갖습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow-x: scroll; font-family: Consolas, Verdana;' > [설치] $ 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 </pre> <br /> <hr style='width: 50%' /><br /> <br /> PHP를 Visual Studio Code에서 편집하는 경우 "php.validate.executablePath" 설정을 하라고 합니다. 그런 경우 settings.json에서 다음과 같은 식으로 입력하면 됩니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow-x: scroll; font-family: Consolas, Verdana;' > { "php.validate.executablePath": "D:\\temp\\Apache24\\phpmodule\\php.exe" } </pre> <br /><br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
1966
(왼쪽의 숫자를 입력해야 합니다.)