로컬호스트 실행하니 gedit로 소스 프로그램이 보입니다

아래 두 개 프로그램 예제가 말썽을 일으킵니다.
1번을 크롬에서 localhost 실행하니 비정상적으로 뭔가 다운로드 한다고 시간이 걸리더군요.
중지하고 다시 하니 비슷한 증상이 재발되는 가 싶더니 소스프로그램이 gedit에 나타납니다.
다른 html 프로그램도 크롬에서 실행하니 소스가 gedit로 보입니다.
몇 개를 더 테스트 해도 같은 현상입니다.
크롬을 사용않고 불여우 씁니다.==> 정상적으로 됩니다.
왜 그런가요? 고수님들 9~뻑!

프로그램 1 : indate.php
<?php
// 테스트 못 함. 안된다?
$cday=date("d");
$cmonth=date("m");
$cyear=date("Y");

echo ("<form action=kdate.php method=post>");
echo "<TD align=left><select name=day>";

$i=1;

while ($i<32)
{
if ($cday == $i)
{
echo "<option selected> $i";
}
else
{
echo "<option> $i;
}
$i=$i+1;
}

echo "</select>";
echo "/ <select name=month>";

$i=1;

while ($i<13)
{
if ($cmonth == $i)
{
echo "<option selected> $i";
}
else
{
echo "<option> $i;
}
$i=$i+1;
}

echo "</select>";
echo "/ <select name=year>";

echo "<option selected> $cyear";
echo "</select></TD>";
echo "<P><input type=submit value=GOGOGO><P>";
echo "</form>;
?>

프로그램 2 :kdate.php
<?php
extract($_GET);
extract($_POST);

echo "$year 년<P>";
echo "$month 월<P>";
echo "$day 일<P>";
?>

구체적인 댓글은 아닙니다만,
소스 파일이 다운받아지는 것은 웹서버의 파일 확장자 등록이 되지 않아서 그런 것 같군요.

httpd.conf 파일의 AddType application 부분에 확장자를 등록 하십시오.

[code:1uc461a9]AddType application/x-httpd-php .html .php .phtml .inc .php3
AddType application/x-httpd-php-source .phps[/code:1uc461a9]

위의 프로그램(indate.php와 kdate.php)을 실행하기 이전에는
크롬을 이용하여 다른 프로그램을 통하여 mysql에 데이터 입력하는 테스트로 정상적으로 수행을 하였습니다.
그리고 현재도 파이어 폭스를 이용하면 다른 프로그램은 정상적으로 실행됩니다.
위의 문제 발생한 예제를 파이어 폭스에선 실행 못했습니다. 겁이 나서…

확장자 문제라면 파이어 폭스에서도 수행이 안돼야 하는 것 아닌가요?
아직 경험이 없어서 의문이 많네요.

[quote="paulbj":1mvdik8w]위의 프로그램(indate.php와 kdate.php)을 실행하기 이전에는
크롬을 이용하여 다른 프로그램을 통하여 mysql에 데이터 입력하는 테스트로 정상적으로 수행을 하였습니다.
그리고 현재도 파이어 폭스를 이용하면 다른 프로그램은 정상적으로 실행됩니다.
위의 문제 발생한 예제를 파이어 폭스에선 실행 못했습니다. 겁이 나서…

확장자 문제라면 파이어 폭스에서도 수행이 안돼야 하는 것 아닌가요?
아직 경험이 없어서 의문이 많네요.[/quote:1mvdik8w]
위의 문제는 파이어폭스나 크롬 또는 기타 다른 브라우저에서의 문제가 아닙니다.
문의 하신 내용의 문제는 아파치의 설정 문제입니다.

php를 설치 하시고 php 모듈을 인식하기 위해서 아파치의 설정 파일 httpd.conf 파일에
아래 처럼 설정 하셨을 것 입니다.

[code:1mvdik8w]LoadModule php5_module modules/libphp5.so[/code:1mvdik8w]
그러나 이것으로 php에 관한 설정이 모두 끝난 것은 아닙니다.

아파치에서 해당 모듈이 동작하기 위한 인식자, 즉 확장자를 등록해 주어야 합니다.
위에서 말씀 드린 것과 같이 html, php, phtml, inc, php3등의 확장자를 가진 파일에 한해서
php 모듈이 호출하여 파일 내용을 실행시킨다는 의미입니다.

만약 아파치 서버에 확장자를 등록하지 않으면 브라우저는 해당 확장자의 파일을 해석 하기 위해
브라우저에 설정되어 있는 mime type에 의해 임의의 해석을 합니다.
따라서 이 의미 없는 파일에 대해 브라우저가 해석 할수 있는 유일한 방법은
다운로드 창을 띄우는 방법 밖에 없습니다.

이점을 먼저 이해하시고 아파치 설정을 검토해 보시기 바랍니다.

그리고 위의 소스 내용을 볼때 mysql에 insert하는 구문이 존재하지 않습니다.
단순히 날짜를 post하고 출력하는 구문이 있을 뿐 입니다.

처음에 질문한 indate.php와 kdate.php 파일을 실행한 이후 소스 코드가 보이는 문제가 위에서 알려준 방법으로 해도 되지 않는군요.
12.04 버전입니다.

  1. 아래는 /etc/apache2.conf의 내용입니다. 환경 설정을 파일인 것 같네요.

This is the main Apache server configuration file.

중략

Include all the user configurations:

Include httpd.conf
이하 생략

  1. 알려주신대로(bahzu님) /etc/httpd.conf을 수정하기 위해 내용을 보니
    ServerName Localhost ==> 달랑 이거 한 줄 있더군요.

혹시나 해서 /etc/apache2.conf 에 AddType 문구가 있는 지 확인해보니 없었습니다.
그래서 /etc/httpd.conf 를 다음과 같이 수정했습니다.

ServerName Localhost

LoadModule php5_module Modules/libphp5.so
AddType application/x-httpd-php .html .php .phtml .inc .php3
AddType application/x-httpd-php-source .phps

  1. /etc/httpd.conf 수정 후, 컴퓨터를 다시 시작하였으나 여전히 소스 코드가 보입니다.
    ===> 다시 한 번 해결책 검토해 주시길 부탁드립니다.

참 이상합니다.
에러가 나기 전까지는 .html 과 .php 회원 등록 테스트 프로그램을 통해서 mysql에 정상적으로 레코드를 write 했습니다.
지금은 어찌해야 할 지 모르겠네요.
기존 XP 대신에 win7으로 바꿨습니다만 여전히 동일한 에러가 납니다.
아마도 우분투를 다시 설치해야 될 것 같습니다.
기존 우분투 삭제하는 방법도 좀 알려주십시오.

[quote="paulbj":2qpbzx5l]아래 두 개 프로그램 예제가 말썽을 일으킵니다.
1번을 크롬에서 localhost 실행하니 비정상적으로 뭔가 다운로드 한다고 시간이 걸리더군요.
중지하고 다시 하니 비슷한 증상이 재발되는 가 싶더니 소스프로그램이 gedit에 나타납니다.
다른 html 프로그램도 크롬에서 실행하니 소스가 gedit로 보입니다.
몇 개를 더 테스트 해도 같은 현상입니다.
크롬을 사용않고 불여우 씁니다.==> 정상적으로 됩니다.
왜 그런가요? 고수님들 9~뻑!
[/quote:2qpbzx5l]

localhost에서 실행한다는 의미가
주소표시줄에 http://localhost/x.php 이와 같이 입력하신 것입니까?
크롬에서 실행하니 소스가 gedit로 보인다는 것이,
소스 보기를 했을 때, gedit가 열린다는 것인가요? 아니면, 열릴 때 부터 gedit로 열리고,
그 안의 내용이 소스가 보여지더라는 것인가요?

만일 firefox file://x.php 이런 식이 었는데, gedit가 열린 다면, 그것은 ubuntu에서의 mime설정에 관련된 문제이기 때문에,
gvfs-mime --set application/x-php gvim.desktop
이런 식으로 기본 프로그램을 바꿔주시면 됩니다.

주소표시줄에 php의 URL을 적었음에도, php의 소스가 나온다면,
이것은 웹서버에서 php코드를 실행하여 html로 전송해 주지 못해서 php코드가 그대로 보여지는 것이므로,
apache에서 php 핸들러를 설정하고, mime을 설정해 주셔야 합니다.
apache설정은 여러 파일로 나눠서 있어서 찾기 쉽지 만은 않습니다.
/etc/apache2/apache2.conf
/etc/apache2/site-enabled/default
/etc/apache2/mods-available/php5.conf
등을 살펴보시기 바랍니다.

그리고, extract 함수는 문제의 여지가 있습니다.
_GET["변수"], _POST["변수"] 이와 같이 명시적으로 사용함이 좋습니다.
왜냐면, extract 함수는 배열을 풀어서 변수에 할당하는데, GET,POST등은 사용자에 의해 얼마든지 추가값이 전달될 수 있기 때문입니다.
예를들어, x.php?y=2014&m=1 이렇게 전달되는 것이 정상적임에도,
사용자가 주소표시줄에 x.php?y=2014&m=1&hackvar=blahblah 이런 식으로 입력하면 어떻게 되겠습니까?
POST의 경우도, 소스를 다운 받은 뒤, 변경하여, form에 새로운 변수나, 입력변수를 설정하고, <BASE href="http://…">이런 식을 코드를 넣어서,
로컬컴퓨터에서 원격으로 폼 전송을 시도하면 문제가 발생할 소지가 있습니다.

이미 _GET,_POST가 이미 배열 변수이기 때문에, 따로 변수를 할당할 필요가 없고,
편이상 그렇게 사용하고 싶다면, 지역변수로 할당하는 것이 좋겠죠.

[code:2qpbzx5l]
foreach ($_GET as $key=>$val) {
echo "$key=$val\n"
}
혹은
foreach (array_keys($_GET) as $key) {
echo "$key=$_GET[$key]\n";
}
[/code:2qpbzx5l]
이와 같이 말이지요.

[url:2qpbzx5l]http://docs.php.net/manual/kr/function.extract.php[/url:2qpbzx5l]
위의 메뉴얼을 보면 분명히 경고하고 있습니다.
굳이 편하게 사용하고 싶으시면, extract 함수의 두번째 인수에 EXTR_SKIP등을 설정하시는 것이 좋습니다.

아무리 재설치 해봐야 php파일 바이너리로 넘어오는 것은 바꿀수 없습니다.

영어로 되어 있어서 힘들지만 매뉴얼 읽으세요

제가 아는 한글 서적이 있으면 권하는데 지금은 아는게 없네요. 저도 한글 포기하고 영문만 찾아본지 오래 되서요.

저도 헷갈려서
다시 정리해서 질문하겠습니다.
죄송합니다