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.