사용자 계정 웹페이지에서 php 소스가 출력
본문
디렉토리 링크가 var/www/html로 설정되어 있습니다.
var/www/html/index.html, var/www/html/phpinfo.php 모두 잘 뜹니다.
웹브라우저에서 kauf.iptime.org 엔터,kauf.iptime.org/phpinfo.php 엔터 모두 잘 뜹니다.
문제는 사용자 계정입니다.
웹페이지 위치를 사용자/public_html로 설정되어 있습니다. 사용자 계정은 kim입니다.
home/kim/public_html/index.html ,home/kim/public_html/phpinfo.php 두 파일을 두었습니다.
웹브라우저에서
kauf.iptime.org/~kim엔터 하면 index.html이 잘 뜹니다.
kauf.iptime.org/~kim/phpinfo.php 엔터 하면 php 소스가 뜹니다.
php문제인 것 같은데 chmod는 777로 해두었습니다. 하부까지.
왜 그런지 감이 안옵니다.
답변 8
apache 셋팅 문제 같습니다.
httpd.conf 쪽을 확인해보셔야 할듯 합니다.
index.html은 잘 뜨니까요.
접속하면 소스가 뜨는 걸 보면 디렉토리 설정은 맞은 것 같습니다. php가 소스코드를 html로 버꾸어 주는 것을 않는 것이라고 봐야하는 데요.
대체로 리눅스나 우분투 시스템에서 이런 현상이 나타납니다.
PHP버전별로 이 문제를 해결하는 방법이 다릅니다.
PHP5에서는
/etc/apache2/mods-available/php5.conf 파일을 열구
<FilesMatch ".+\.ph(p[345]?|t|tml)$">
SetHandler application/x-httpd-php
</FilesMatch>
이것을 삽입합니다.
PHP7에서는 httpd.conf파일에서
<IfModule php7_module>
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
<IfModule dir_module>
DirectoryIndex index.html index.php
</IfModule>
</IfModule>
이부분을 삽입합니다.
위와 같이 수정한 후 꼭 아파치서비스를 재시작 하는거 잊지 마세요.
apache 설정단에서 해당 디렉토리의 실행시 php함수 실행선언이 되어 있지않아 php코드가 그대로 노출되어지는걸로 보여집니다.
아니면 php 버전특성상
<? 이렇게 하면 그냥 코드가 노출되고 <?php 이렇게 했을때 php가 제대로 실행되는거라면
short_tag php.ini 설정 부분의 문제일수도 있으니 참고하셔서 체크해 보시면 좋을듯 합니다.
감사합니다. 시도해 보겠습니다.
short_tag 는 php.ini에서 On으로 했습니다. var/www/html에 있는 phpinfo.php가 잘 보이는 걸 보면 그 문제는 아닌 듯합니다.
우분투 리눅스20.04, php7.4입니다. etc/apache2 아래로 가니 httpd2.conf가 있습니다. 이 파일이 맞나 모르겠습니다. 끝에 추가하고, apache restart하고 확인했는데 여전히
실제로 실행하는 아파치의 경로가 /var/www/html/ 아닌경우도 있을수 있어요
파일이 rsync로 되는지 여부도 확인해보면 좋을거 같네요
일반적으로 txt 파일을 열어 확인해보는것도 좋을것 같습니다.
요약하여 정리하면 var/www/html은 문제가 없습니다. index.html. phpinfo.php 둘다 뜨니까요.
사용자 계정 home/kim/public/은 index.html은 되고 phinfo.php 만 소스가 뜹니다.
아파치 directoryindex 설정은 맞다고 보아야 하고 php가 var/www/html은 되고 home/kim/public은 소스가 뜨니 php.ini의 directoryindex 와 관련이 있는 것 같은데 모르겠습니다.
php.ini를 올려놓았습니다.
http://kauf.iptime.org/~kim/tt.html
(home/kim/public/은 index.html이 되니 가능했습니다.
해결했습니다. 어떻게 보면 너무나 당연한 것을 놓치고 있었습니다. 사용자 계정의 문제니까 사용자 계정 디렉토리 사용부분을 보아야 했었습니다.
etc/apache2/mods-available/php7.4.conf를 수정했습니다. 끝 부분에
<IfModule mod_userdir.c>
<Directory /home/*/public_html>
php_admin_flag engine On
</Directory>
</IfModule>
php_admin_flag engine On 이 Off로 되어 있었으니 당연히 안될 수 밖에요.