Apache가 PHP 파일을 표시하는 대신 다운로드하고 있습니다.


93

OS 및 서버 정보 :

  • CentOS 6.4 (최종)
  • Apache 2.2.15
  • PHP 5.5.1

이전에 PHP 5.3.x를 설치했지만 업그레이드하기로 결정했습니다. 먼저 php 5.3.x를 제거한 다음 php 5.5.1을 설치했지만 설치가 완료된 후 아파치는 php 파일을 구문 분석하지 않고 방금 다운로드했습니다. stackoverflow에서 비슷한 질문을 확인했지만 지금까지 아무도 저를 도왔습니다.

기록을 위해 httpd.conf 및 php.conf에 php가 작동하지만 작동하지 않는 다음 줄이 있습니다.

AddHandler application/x-httpd-php .php5 .php4 .php .php3 .php2 .phtml
AddType application/x-httpd-php .php5 .php4 .php .php3 .php2 .phtml
AddType application/x-httpd-php-source .phps
AddHandler php5-script .php

어떤 도움을 주셔서 감사합니다. 감사합니다.

편집하다:

php.conf에 다음 줄이 있습니다.

<IfModule !worker.c>
  LoadModule php5_module modules/libphp5.so
</IfModule>
<IfModule worker.c>
  LoadModule php5_module modules/libphp5-zts.so
</IfModule>

편집하다:

제거하여

AddType application/x-httpd-php .php5 .php4 .php .php3 .php2 .phtml

아파치는 더 이상 파일을 다운로드하지 않습니다. 이제 아파치가 소스 코드를 보여 주지만 전부는 아닙니다. 나는 추가했다

AddType text/html .php

하지만 운이 없습니다.


음, 어떻게 설치 했습니까? 어떤 SAPI? 어떤 Apache 모듈이 활성화 / 설치되었는지 확인하는 방법
mario

2
PHP 모듈이 실행되고 있지 않습니다.
Sithu

1
당신을 확인 httpd.confPHP 모듈이 주석하는 경우 또는하지
코디

1
나는 질문을 편집했다. 모듈이 종료되고 분명히로드되고 있습니다
Anthony Gainor 2013-08-24

설치 후 Apache를 다시 시작 했습니까?
Ahmad

답변:


80

php에 대한 올바른 AddType은 application / x-httpd-php입니다.

AddType  application/x-httpd-php         .php
AddType  application/x-httpd-php-source  .phps

또한 PHP 모듈이로드되었는지 확인하십시오.

LoadModule php5_module        modules/mod_php55.so

아파치를 구성 할 때 다른 브라우저에서 페이지를 봅니다. 크롬이 결과를 완고하게 캐시하고 소스 코드를 계속 다운로드하는 동안 다른 브라우저에서는 괜찮습니다.


내 경우에는 모듈 경로가 없다
shamaseen

2
이 줄을 넣을 위치에 정보를 추가 할 수 있습니까?
Sören

7
이 라인을 어디에 둘지 찾는 사람들을위한 것입니다. /etc/httpd/conf/httpd.conf
Siraj Alam

제 경우에는 Apache-2.4.6 + PHP-7.3.13> LoadModule php7_module modules / libphp7.so
shaojun lyu

23

오늘이 문제를 발견했지만 설명 된 솔루션 중 어느 것도 저에게 효과가 없었습니다. 따라서 또 다른 가능한 원인이 있습니다.

당신이 뭔가를 가지고 있다면

AddHandler x-mapp-php6 .php3 .php4 .php .phtml

.htaccess웹 콘텐츠 폴더 의 파일에서 PHP 스크립트가 작동을 멈출 수 있습니다. 제 경우에는 x-mapp-php6해당 .htaccess파일이 웹 사이트 콘텐츠를 전송할 때 다른 웹 호스트에서 가져온 파일 이기 때문에 서버가 유형을 알지 못했습니다 .

파일 에서 AddHandler줄을 제거하는 것만으로도 .htaccess해결되었습니다.


완전한. 제 경우에는 AddHandler application/x-httpd-php54 .php54 .php제거해야했습니다.
Old McStopher 2014-06-23

몇 가지 문제가 있었지만 홈 디렉토리 ( "public_html"웹 디렉토리 위의 한 디렉토리)에서 범인 .htaccess 파일을 발견했습니다. 다른 사람이 동일한 문제를 가지고있는 경우 상위 디렉터리에서도 .htaccess를 찾습니다 (설정은 계단식으로 표시됨).
Wireblue

웹 호스팅 서버에서 가져온 이와 같은 .htaccess 파일이 있습니다. 내 로컬 컴퓨터에 설치되지 않은 PHP 버전을 강제했습니다. 따라서 가상 호스트는 PHP 파일을 제대로 실행하지 못했습니다.
BrightIntelDusk 2014

일부 사이트는 작동하고 다른 사이트는 작동하지 않는 경우 거의 확실하게 문제입니다. Joomla .htaccess에는 AddHandler가 포함되었지만 WordPress에는 포함되지 않았습니다.
Peter Wooster 2015

이것은 나를 위해 일했으며 내 public / .htaccess 파일에서 해당 줄을 제거하고 색인이로드되었습니다.
PA-GW

16

많은 고생 끝에 마침내 문제를 해결했습니다.

.php파일을 실행하는 대신 다운로드하라는 메시지가 표시되면 여기에 완벽한 솔루션이 있습니다. 이미 PHP5를 설치했지만 여전히이 오류가 발생한다고 가정합니다.

$ sudo su
$ a2enmod php5

이거 야.

하지만 여전히 오류가 발생하는 경우 :

Config file php5.conf not properly enabled: /etc/apache2/mods-enabled/php5.conf is a real file, not touching it

그런 다음 다음을 수행하십시오.

파일 판명이에 저장해서는 안된다 mods-enabled, 오히려에 보관해야합니다 mods-available. 그런 다음 mods-available에 저장된 파일을 가리키는 심볼릭 링크를 mods-enabled에서 만들어야합니다.

먼저 원본을 제거하십시오.

$ mv /etc/apache2/mods-enabled/php5.conf /etc/apache2/mods-available/

그런 다음 심볼릭 링크를 만듭니다.

$ ln -s /etc/apache2/mods-available/php5.conf /etc/apache2/mods-enabled/php5.conf

문제가 해결되기를 바랍니다.


2
이것은 Linux (특히 Debian Linux)에서만 작동합니다.
Gwyneth Llewelyn

6

addtype 지시문을 살펴보십시오.

Apache가 브라우저에 .php5와 같은 확장자를 가진 스크립트에 대해 application / php의 문서 유형을 보내고 있다고 말하는 것처럼 보입니다. 사실 Apache는 스크립트가 text / html을 출력하고 있음을 브라우저에 알려야합니다.

이것을 시도하십시오 :

AddType text/html .php

PHP 스크립트를 출력하고 있다는 것을 브라우저에 알려야한다는 위의 제안과 관련하여 : 나에게는 특이한 생각처럼 보였습니다. 나는 그것을 검색하고 웹에서 그것에 대해 꽤 많은 토론이 있음을 발견했습니다. 분명히 PHP 스크립트를 보내고 있다고 말하고 싶은 경우가 있으며 (아파치가 스크립트를 실행하고 text / html을 내 보내야하지만) 브라우저가 특정 Mime을 인식하지 못하는 경우도 있습니다. 유형.

브라우저 캐시를 지우는 것은 항상 좋은 생각입니다.

도움이되는 경우 CentOS 5.9를 실행하는 서버의 /etc/httpd/conf.d/php.conf 파일 사본이 있습니다.

#        
# PHP is an HTML-embedded scripting language which attempts to make it                                             
# easy for developers to write dynamically generated webpages.                                                  
#
<IfModule prefork.c>
  LoadModule php5_module modules/libphp5.so
</IfModule>
<IfModule worker.c>
  LoadModule php5_module modules/libphp5-zts.so
</IfModule>

#
# Cause the PHP interpreter to handle files with a .php extension.
#
AddHandler php5-script .php
AddType text/html .php

#
# Add index.php to the list of files that will be served as directory
# indexes.
#
DirectoryIndex index.php

#
# Uncomment the following line to allow PHP to pretty-print .phps
# files as PHP source code:
#
#AddType application/x-httpd-php-source .phps

이것은 흥미롭지 만 제 경우에는 전체 PHP 스크립트를 출력하는데, 이번에는 HTML로 포맷 된 (ASCII로만 포맷 된 것과 반대)-유용하지 않습니다! 여기서 문제는 PHP가 어떻게 든 올바르게 실행되지 않거나 잘못된 헤더가 전송된다는 것입니다.
Gwyneth Llewelyn

마지막 AddType 지시문 (위의 예제에서 주석 처리됨)은 .phps 파일이 HTML로 예쁘게 인쇄되도록합니다. Apache 구성이 예쁜 .php 파일을 인쇄 할 수 있습니까?
Sam Azer 2017 년

5

이것은 PHP에 필요한 모듈 누락으로 인해 발생할 수 있습니다. php7이 설치되어 있다고 가정하고 다음을 사용하여 사용 가능한 php7 모듈을 검색하십시오.

sudo apt-cache search php7-*

위의 명령은 설치에 사용 가능한 모든 PHP7 모듈을 나열합니다. 다음과 같은 모듈 설치를 시작할 수 있습니다.

sudo apt-get install libapache2-mod-php7.0 php7.0-mysql php7.0-curl php7.0-json

4

.htaccess에 다음과 같은 것이 있으면 ... AddHandler application / x-httpd-php53 .php .php5 .php4 .php3 그런 다음 주석을 달고 다시 새로 고침을 시도하십시오.


3

나도 같은 문제를 안고있어. Apache는 특정 웹 사이트에서 PHP 파일을로드하지 않고 다운로드 만합니다. 이 게시물과 답변을 읽고 .htaccess 파일의 마지막 위치에이 줄이있는 것을 보았습니다.

AddHandler x-mapp-php5.5  .php

나는 그것을 언급했고 모든 것이 잘 작동합니다.

모두에게 감사합니다 !!!


2

이전에 5.3에서 5.4로 업그레이드 한 후 비슷한 문제가 발생했습니다. 그러나 내 설정은 데비안을 실행하고 PHP5 apache / cgi 모듈이 아닌 PHP 페이지를 서버에 사용하기 위해 fcgid를 사용하고 있기 때문에 약간 다르게 보입니다. 그래서 업그레이드 후 php5_cgi도 설치했는데, 이는 내 fcgid 설정과 충돌하여 더 이상 PHP 파일을 실행하지 않습니다.

Apache 모듈을 비활성화하고 Apache를 다시 시작해야했습니다.

a2dismod php5_cgi
/etc/init.d/apache2 restart

php5_cgi 모듈이 중단되면 fcgid는 PHP 페이지를 다시 제공 할 수있었습니다.


Aww 그래,이 까다로운 cgi 놈 ^^ dotdeb에서 PHP를 5.3에서 5.4로 업데이트 한 후 내 문제를 해결했습니다.
Emii Khaos 2014

2

비슷한 증상이 있었지만 또 다른 해결책이 있습니다. /etc/apache2/mods-enabled/php5.conf에 댓글에 유용한 조언이 있었는데, 제가 따랐습니다.

# To re-enable php in user directories comment the following lines
# (from <IfModule ...> to </IfModule>.) Do NOT set it to On as it
# prevents .htaccess files from disabling it.

2

누군가가 Linux 환경에서 php7을 사용하는 경우

php7을 활성화했는지 확인하십시오.

sudo a2enmod php7

mysql 서비스와 Apache를 다시 시작하십시오.

sudo systemctl restart mysql
sudo systemctl restart apache2

2

PHP를 7.3으로 업데이트 한 후 이전과 같이 $ USER 대신 www-data 로 실행되는 PHP 스크립트 .

PHP-FPM을 다시 설치하고 활성화해야했습니다.

sudo apt-get install php-fpm
sudo a2enmod proxy_fcgi setenvif
sudo service apache2 restart
sudo a2enconf php7.3-fpm
sudo service apache2 restart

Virtualmin 에서 모든 것이 정상 인지 확인하기 위해 Vitualmin 에서 Re-Check Configuration 마법사 /virtual-server/check.cgi를 사용 했습니다. / 시스템 설정 .

그 후 Apache / PHP는 php 파일을 실행하는 대신 다운로드했습니다. 그래서 다음과 같이 /etc/apache2/mods-available/php7.3.conf행에 주석을 달도록 편집해야했습니다 SetHandler application/x-httpd-php.

<FilesMatch ".+\.ph(ar|p|tml)$">
#    SetHandler application/x-httpd-php
</FilesMatch>

Apache를 다시 시작한 후 내 문제가 해결되었으므로 도움이되기를 바랍니다.

브라우저 캐시도 관리하십시오.

내 시스템 :

Ubuntu          16.04.6 LTS
Webmin version      1.932
Usermin version     1.780
Virtualmin version  6.08
Apache version      2.4.41
PHP versions        7.3.12
PHP-FPM         7.3.12 Server

1

이틀 동안 이것을 추적하고 PHP 스크립트를 잘못된 디렉토리에 넣었다는 것을 알았습니다.

내 표준 Ubuntu 설치에서 스크립트를 /var/www. 그들은에 있었어야했다/var/www/html .

방금 PHP 작업을 시작했기 때문에 내 솔루션이 귀하가 겪은 버전 변경과 관련이 있는지 모르겠습니다.


1

이것은 나를 위해 문제를 해결했습니다 (php7이 설치되어 있습니다).

sudo apt-get 설치 libapache2-mod-php7.0

sudo 서비스 apache2 다시 시작


1

나는이 문제가 있었다. nginx와 apache가 모두 설치되어 있고 부팅시 자동으로 시작되는 것으로 나타났습니다. 문제는 nginx가 먼저 http 포트에 바인딩되어 아파치가 시작되지 않는다는 것입니다.


1

nginx가 실행 중이지만 PHP가 아파치로 실행되도록 설정되어있을 수도 있습니다. 확인하고 실행 service nginx status하고 service apache2 status실행중인 항목 을 확인 합니다. nginx가 실행 중이고 apache가 실행되지 않는 경우 실행 sudo service nginx stop; sudo service apache2 start하면 서버가 예상대로 PHP 파일을 제공합니다.


1

좋아요 ...이 질문에 이미 1.000.000 개의 답이 있다는 것을 알고 있습니다.하지만 적어도 6 시간 동안 효과적인 시간을 보냈고이 문제를 해결했습니다. 그리고 나는 그것을 수백 번 봤지만 그것에 대한 단일 게시물을 찾지 못했습니다. 그래서 여기에 내 문제에 대한 해결책을 추가 할 것이라고 생각했습니다.

결론

/etc/apache2/[[SERVER-NAME].conf-file의 .conf 파일에서이 두 줄을 주석 처리 한 경우 :

php_admin_value engine Off
IPCComTimeout 31

나는 그들이 무엇을하는지, 어떻게 거기에 도착했는지 전혀 모른다. 그러나 그것은 내 모든 파일에있다 .conf. 그리고 그 줄을 제거 하고 -folder에 심볼릭 링크가 있는지 확인/etc/apache2/sites-enabled/ 하면 index.php를 다운로드하지 않고 모든 것이 정상적으로 작동합니다.

전체 이야기

Ubuntu 16.04 VPS에 VirtualMin이 설치되어 있습니다. PHP 버전 7.2로 업그레이드했습니다. 그 직후 Ubuntu 버전을 업데이트하고 'Kernel Offset : Disabled'오류가 발생했습니다. 그래서 최신 Ubuntu 버전을 삭제해야했고, OS가 다시 부팅되면 BOOM! 나는 그의 포스트가 말하는 오류가있다 : 내 VPS의 모든 사이트에 대해, 그것을 보여주는 대신 단순히 index.php를 다운로드했다.

나는 모든 종류의 것들을 시도했다.

  • PHP7.2를 제거하고 PHP5.6을 설치했습니다 (이제 PHP 버전과 관련이 없음을 알고 있습니다. 작업이 필요한 아파치 구성입니다).
  • 기존 설치에서 아파치 모듈 활성화 및 비활성화를 시도했지만 운이 없었습니다.
  • 그 때 나는 완전히 아파치를 제거 하고 다시 설치 장소-후에도 문제가 여전히 있습니다!
  • VirtualMin (Webmin >> Servers >> Apache Webserver)에서 Virutal Server 설정을 사용해 보았습니다.
  • 단일 가상 서버의 구성을 확인했습니다 (Virtualmin >> System Settings >> Re-Check Configuration) ...이 단계는 Apache에서 어떤 모듈이 누락되었는지 알려 주었기 때문에 꽤 좋았습니다. 어디에서 그것을 사용할 수 있습니까?a2enmod [MODULE_NAME] . 그리고 인터넷 검색으로 모듈 이름을 찾았습니다. 유효성 검사 단계를 통과하기 전에 약 6-8 개의 모듈을 활성화해야했고 캐시가 다 떨어지기까지 몇 분이 걸렸기 때문에이 작업은 지루한 단계였습니다.
  • 그리고 마지막으로, 심볼릭 링크와 함께 위에 쓰여진 결론을 알아 내고 작동하게했습니다. 그래도 내 VPS의 모든 사이트에 대해 살펴 봐야했습니다.

1

나는이 문제가 있었고 실제로 서버 구성 설정을 사용한 적이 없다면 .htaccess 파일 에서 문제가 90 %입니다.

.htaccess 파일을 로컬에서 수정하거나 삭제 (로컬)


0

php5를 이전 버전에서 Mint 17과 함께 설치된 버전 인 5.5.9로 업그레이드 할 때 OP와 비슷한 문제가 발생했습니다.

내 로컬 네트워크의 컴퓨터에서 LAMP 설정을 실행하고 있는데,이 설정을 실제 라이브 서버에 업로드하기 전에 웹 사이트의 변경 사항을 미리 보는 데 사용합니다. 그래서 저는 실제 사이트의 완벽한 로컬 미러를 유지합니다.

업그레이드 후 실제 사이트에서 완벽하게 실행되고 표시되는 파일은 표시되지 않거나 로컬 컴퓨터에서 html 만 표시됩니다. PHP가 구문 분석되지 않았습니다. phpinfo () 명령이 작동했기 때문에 php가 작동하는 것을 알았습니다. 로그는 오류를 생성하지 않았습니다. 페이지 소스를 보면 실제 PHP 코드가 표시되었습니다.

다음 코드가 포함 된 test.php 페이지를 구성했습니다.

<?php phpinfo(); ?>

이것은 효과가 있었다. 그런 다음 명령을 변경했을 때 더 이상 작동하지 않음 <?php을 발견 <?했습니다. 내 모든 PHP 사이트는 <?그 대신 <?php이상적이지 않을 수도 있지만 현실입니다. / etc / php5 / apache2로 이동하여 "short_open_tag"를 검색하고 값을 Off에서 On으로 변경하여 문제를 해결했습니다.


0

위의 어느 것도 작동하지 않으면

줄을 주석 처리하십시오

SetHandler ....

다음을 사용하여 아파치를 다시 시작하십시오.

/etc/init.d/httpd restart

작동합니다!



0

이런 종류의 문제가 있습니다. 이것이 내가 그것을 해결하는 방법입니다. Apache 를 설치 한 후이 명령을 사용하여 PHP 를 설치했습니다 .

sudo apt-get install php libapache2-mod-php

제대로 실행되지만 Apache에서 .php 파일을 요청 하면 PHP 스크립트 를 실행하지 않고 제공합니다 .

그런 다음 PHP가 활성화되어 있는지 확인합니다.

$ cd /etc/apache2
$ ls -l mods-*/*php*

하지만 어떤 결과도 보여주지 않았습니다. 설치된 PHP 패키지를 확인합니다.

$ dpkg -l | grep php| awk '{print $2}' |tr "\n" " "

내 컴퓨터에 설치된 다른 유형의 PHP 버전. 그런 다음 apt-get purge를 사용하여 이전 목록에서 일부 PHP 패키지를 제거 합니다.

sudo apt-get purge libapache2-mod-php7.0 php7.0 php7.0-cli php7.0-common php7.0-json

PHP를 다시 설치합니다.

sudo apt-get install php libapache2-mod-php php-mcrypt php-mysql

PHP 모듈이로드되었는지 확인

$ a2query -m php7.0

사용하지 않는 경우 :

$ sudo a2enmod php7.0

Apache 서버 다시 시작

$ sudo systemctl restart apache2

마지막으로 Apache에서 PHP 프로세스를 확인 합니다.

빈 파일 생성

sudo vim /var/www/html/info.php

이 내용을 info.php에 추가하고 저장하십시오.

<?php
  phpinfo();
?>

브라우저에서 확인 :

http : //localhost/info.php

올바르게 표시됩니다. 나는 이것이 누구에게나 도움이 될 것이라고 생각합니다.


0

virtualmin이 있다면 / etc / apache2 / sites-available의 아파치 구성에서 이러한 줄을 주석 처리하십시오

  #RemoveHandler .php
  #RemoveHandler .php7.0
  #php_admin_value engine Off

0

PHP 7.2에서 PHP 7.4로 업그레이드했을 때도 같은 문제가 발생했습니다. 다음을 수행하여 작업 :-

  1. 에서 [domain].conf file다음과 같이 댓글을 달았습니다.

    php_admin_value 엔진 끄기

그리고 추가 :

AddType  application/x-httpd-php-source  .phps
AddType text/html .php
  1. 다음과 같이 모드 7.2를 비활성화하고 7.4를 활성화합니다.

    a2dismod php7.2
    a2enmod php7.4

  2. 에서 /etc/apache2/mods-enabled/php7.4.conf파일, 다음 주석 :

    SetHandler application / x-httpd-php
    php_admin_flag 엔진 끄기


0

거의 6 년 후 (그리고 그 이후에도) Google에서이 게시물을 발견 한 사람들에게는 UserDir모듈을 사용하는 동안 Apache 2 및 PHP 7에서이 문제가 발생할 수 있습니다 .

이 문제의 또 다른 가능한 원인은 UserDir모듈 의 "사용자 디렉토리"에서 스크립트를 실행하려고 할 수 있습니다 . 사용자 디렉토리에서 PHP 스크립트 실행은 기본적으로 비활성화되어 있습니다. 스크립트가 public_html홈 폴더 의 디렉토리에 있고에서 액세스하려고하면 이 문제가 발생합니다 http://localhost/~your_username.

이 문제를 해결하려면 /etc/apache2/mods-enabled/php7.2.conf. 아래에있는 태그 블록을 주석 처리하거나 삭제해야합니다.

<IfModule mod_userdir.c>
    <Directory /home/*/public_html>
        php_admin_flag engine Off
    </Directory>
</IfModule>

0

zypper rm php*PHP를 제거하고 다시 설치 한 후에도 동일한 문제가 발생 했습니다.zypper in php7 php7-gd php7-gettext php7-mbstring php7-mysql php7-pear

apache2 모듈을 활성화하고 웹 서버를 다시 시작하여 해결했습니다.

a2enmod php7 && service apache2 restart

-1

.htaccess에 이와 같은 것이 있으면

AddType application/x-httpd-ea-php56 .php .php5 .phtm .html .htm
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.