PHP 코드가 실행되지 않고 대신 코드가 페이지에 표시됩니다.


319

Dreamweaver에서 프로젝트를 통해 PHP 코드를 실행하려고하는데 코드가 실행되고 있지 않습니다.

소스 코드를 확인하면 PHP 코드가 HTML 태그로 나타납니다 (소스 코드에서 볼 수 있음). Apache가 제대로 실행 중입니다 (XAMPP로 작업 중) .PHP 페이지가 제대로 열리고 있지만 PHP 코드가 실행되지 않습니다.

누군가 무슨 일이 일어나고 있는지에 대한 제안이 있습니까?

참고 : 파일 이름은 이미filename.php

편집 : 코드 .. :

<?
include_once("/code/configs.php");
?>

인쇄


44
<?대신 짧은 태그를 사용하고 <?php있습니까?
Dan Grossman

28
짧은 태그를 사용하지 마십시오. ( <?). 그들은 더 이상 사용되지 않으며 실제로 많은 곳에서 작동하지 않으며 완전히 필요하지 않습니다. 세 번의 키 입력을 저장한다고해서 코드가 실행될 수있는 서버의 절반에서 코드가 실패 할 가능성이있는 유효한 이유는 아닙니다.
mopsyd

10
@mopsyd 짧은 태그가 더 이상 사용되지 않는다는 말은 어디에 있습니까? 있습니다 짧은 태그 와 동일하지 않습니다 짧은 에코 태그 , 그리고 짧은 에코 태그 에 관계없이의, PHP 5.4부터 기본적으로 지원 한 short_open_tag설정.
Kyle Anderson

5
짧은 태그는 짧은 에코 태그가 아니라는 것을 알고 있으므로 주석에서 말한 것을 지정했습니다. 글을 쓰는 시점에서 짧은 태그는 PHP 6 릴리스에서 더 이상 사용되지 않는 것으로 표시되었지만 그 이후로는 분명히 변경되었습니다. 많은 서버에서 서버를 비활성화하면 코드가 이식성이 떨어집니다. 이것은 짧은 에코 태그 ( <?=) 에는 적용되지 않으며 서버 설정에 관계없이 PHP 5.4 이상에서 정상적으로 실행됩니다.
mopsyd

3
짧은 태그에 대해 어리석은 이야기. 긴 태그는 빨라지고 추악합니다. 나는 10 년 동안 PHP 프로그래밍에 문제가 없었습니다. 그들은 거의 문제가되지 않습니다
Danial

답변:


417

구성에 문제가있는 것 같습니다. 확인할 수있는 몇 가지 사항은 다음과 같습니다.

  1. PHP가 올바르게 설치되어 실행되고 있는지 확인하십시오. 어리석게 들릴지 모르지만 결코 알 수 없습니다. 확인하는 쉬운 방법 php -v은 명령 줄에서 실행 하여 버전 정보 또는 오류를 반환하는지 확인하는 것입니다.

  2. PHP 모듈이 아파치 httpd.conf 안에 나열 되고 주석 해제 되어 있는지 확인하십시오. 이것은 LoadModule php5_module "c:/php/php5apache2_2.dll"파일 과 유사해야 합니다. 을 검색 하고 앞에 LoadModule php주석 ( ;) 이 없는지 확인하십시오 .

  3. Apache의 httpd.conf 파일에 PHP MIME 유형이 있는지 확인하십시오. 이것은 다음과 같아야 AddType application/x-httpd-php .php합니다. 이것은 아파치에게 .php파일을 PHP 로 실행하도록 지시 합니다. AddType을 검색 한 다음 PHP에 대한 항목이 있고 주석 처리가 제거 되었는지 확인 하십시오 .

  4. 파일의 .php확장자가 3 번 지점의 MIME 정의에 지정된 확장자 인지 확인하십시오 . 그렇지 않으면 PHP로 실행되지 않습니다.

  5. PHP 파일 ( ) 에서 짧은 태그 를 사용하지 않는지 확인하십시오. 기본적 으로 모든 서버에서 활성화되지<?않으며 사용을 권장하지 않습니다. 사용 <?php하는 대신 (또는 php.ini 파일에서 짧은 태그를 사용 하여 short_open_tag=On당신이 그들에 의존하는 코드가있는 경우).

  6. http://localhost/file.php로컬 파일 액세스가 아닌 URL을 사용하여 웹 서버를 통해 파일에 액세스하고 있는지 확인하십시오.file://localhost/www/file.php

마지막으로 PHP 매뉴얼에서 추가 설정 정보를 확인하십시오 .


14
이유를 모르지만 PHP 5.3.15의 설치 프로그램은 라인을 추가하지 않습니다 AddType application/x-httpd-php .php. 고마워요 !!
MatuDuke

7
@shmeeps : 짧은 태그가 더 이상 사용되지 않는 것을 어디에서 보셨습니까? 검색을 수행했으며 권장 사항 만 찾을 수 있으며 더 이상 사용되지 않습니다. 배포 할 응용 프로그램에 대해 부여 된 경우 호스팅 서버에서 사용하도록 설정하지 않은 경우 <? php를 사용하는 것이 좋습니다. 그러나 서버를 완전히 제어 할 수있는 응용 프로그램의 경우 사용하지 않는 이유를 참조하십시오.
ClarkeyBoy

3
포인트 6은 나를 위해 일했다. 로컬 액세스는 아파치 서버를 사용하지 않습니다
KawaiKx

6
포인트 2는 안전한 방법으로 나를 위해 일했습니다 –apt-get purge apache2; apt-get install apache2 libapache-mod-php5
ulkas

1
@full_prog_full .php내용 이있는 확장자를 가진 파일을 업로드하고 <?php echo("Success"); ?>웹 브라우저를 통해 파일에 액세스하면 연관된 PHP 코드없이 "성공"이 표시되는지 확인하십시오.
shmeeps

61

php7 :

sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php7.0-fpm
sudo service apache2 restart

24
이 코드는에 대한 설명을 포함하여 문제 해결 수 있지만 방법이유를 이 해결할 수있는 문제가 문제가 정말 도움이 될 게시물의 품질을 향상시킬 수 있습니다. 지금 질문하는 사람뿐만 아니라 앞으로 독자들에게 질문에 대답하고 있음을 기억하십시오! 제발 편집 설명을 추가하고, 제한 및 가정이 적용 무엇의 표시를 제공하는 답변을.
Toby Speight

4
이 답변은 Linux와 관련이 있으며 topicstarter는 Windows를 명확하게 사용하고 있습니다.
Raymond Nijland

3
@RaymondNijland 사실이지만 이것은 정식 이며이 질문을 발견했으며 한 시간 이상 문제를 해결 한 후 저를 구했습니다.
Goose

방법과 이유 : PHP7이 make 스크립트에서 기본 fast-CGI 서비스를 구성하지 않을 때 발생합니다. sudo a2enmod proxy_fcgi setenvif세 개의 새로운 모드 /mods-available/proxy.conf proxy_fcgi.load proxy.loadsudo a2enconf php7.0-fpm생성합니다. 마찬가지로 설정 파일을 생성합니다. /conf-available/php7.0-fpm.conf일단 이것이 완료되면 Apache2는 PHP7 모듈을 빠른 CGI 서비스로 실행할 수 있습니다.
Talvi Watia

33

우분투에서 Apache를 실행 중이며 내 문제는 /etc/apache2/mods-available/php5.conf파일에 다음이 누락되었다는 것입니다.

<FilesMatch ".+\.ph(p[345]?|t|tml)$">
    SetHandler application/x-httpd-php
</FilesMatch>

나는 그것을 다시 추가했고 PHP는 PHP 파일을 올바르게 구문 분석했습니다.


31

PHP 7 사용자의 경우 httpd.conf 파일에 다음을 추가하십시오.

# PHP 7 specific configuration
<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>

4
이 문제로 다른 사람들을 돕기 위해. httpd.conf파일이있는 /etc/apache2/httpd.conf당신이 우분투를 사용하는 경우, 그것은 될 apache2.conf필요가 PHP7에 대한 수정 될 것과 같은 디렉토리에.
Ahmed Sagarwala

23

이 문제를 일으키는 다른 문제를 발견하고 이미 해결했습니다. 실수로 스크립트를 UTF-16인코딩으로 저장했습니다 . PHP5는 <?php기본적으로 16 비트 인코딩의 태그를 인식하지 못하는 것 같습니다 .


18

내 Virtualmin / Webmin 관리 인터페이스가 PHP 엔진을 비활성화하는 것이 좋은 생각이라고 결정했기 때문에이 답변을 게시하고 있습니다. 솔루션을 찾는 데 시간이 걸렸으므로 여러분과 공유 할 것이라고 생각했습니다.

또한이 특정 호스트 또는 가상 호스트와 관련된 웹 사이트 구성 파일에 다음과 같이 PHP를 끄는 php_admin_value가 없는지 확인하십시오.

php_admin_value engine Off

의심스러운 경우 의견을 말하십시오.

# php_admin_value engine Off

그리고 웹 서버를 다시 시작하십시오.


1
이 구성 설정은 어디에 있습니까?
cronoklee

2
@cronoklee httpd.conf의 vHost 설정에서. 기존 호스트의 경우 webmin에서 Apache 구성을 편집해야합니다. 향후 호스트의 경우 virtualmin> server template> apache 웹 사이트로 이동하십시오. 어쨌든 이것은 fastcgi만큼 안전하지 않습니다-virtualmin의 기본값입니다. 따라서 올바른 접근 방식은 fcgi가 작동하지 않는 이유를 해결하는 것입니다 (예 : 파일 권한으로 인해 발생할 수 있음).
Sheepy

아파치의 버전을 사용하는 경우, httpd.conf를하지 않는 모습에 /etc/apache2/mods-enabled/php7.confphp5.conf
샘 Malayek

특정 구성 설정의 위치가 확실하지 않은 경우 언제든지 grep을 사용하여 다음과 같이 입력하여 원하는 것을 찾을 수 있습니다.sudo grep php_admin_value /etc/* -R
Henry van Megen

16

브라우저에서 PHP 파일을 여는 중입니다. localhost url을 사용하여 열어야합니다. 디렉토리에서 직접 파일을 열면 어떤 경우에도 PHP 코드가 실행되지 않습니다.

사용 : http://locahost/index.php또는http:127.0.0.1/index.php

PHP 짧은 코드를 활성화하십시오. 귀하의 경우에는을 <?위한 PHP 짧은 코드를 사용하고 <?php있습니다. 기본적으로 PHP 단축 코드는 비활성화되어 있습니다.

또한 sudo apt-get install php5 libapache2-mod-php5 php5-mcrypt우분투 사용자 인 경우 사용하십시오 .


1
파일 만 포함 할 때 mcrypt가 필요한 이유는 무엇입니까? 이 질문은 오래되었고 짧은 태그 문제는 16 번이나 내 질문의 맨 위에 언급되었습니다.
Gui

1
방금 솔루션을 공유하고 동일한 오류가 발생하여 mcrypt 명령을 실행 한 후 문제가 해결되었습니다. 시도해 볼 수도 있습니다.
Hasan Baig

기본적으로 PHP 짧은 코드가 활성화됩니다. short_open_tag = php 5.6에서 켜짐 (기본값 = ON)
zond

이것은 내 문제 였고 내 virtualmin / apache 구성은 127.0.0.2 용이지만 브라우저에 외부 IP 주소를 넣었습니다. 방금 v / a 구성을 업데이트하고 작동합니다.
Hayden Thring

방금 libapache2-mod-php7.3이 누락되었습니다.
dxvargas

8

나는 그것이 어리석은 소리를 내야한다는 것을 알고 있지만 거의 일어나지 않습니다.

에서 PHP를 실행하려고하는지 확인하십시오.

**http://localhost/info.php**

에서하지

file:///var/www/info.php

ps> 셸에서 쓰면 알 수 있습니다.

php info.php 

그것은 코드로 응답합니다 (php 함수를 의미합니다.)


PHP는 잘 작동합니다 (명령 줄을 사용하여 확인). 그러나 URL을 사용하여 파일에 액세스하면 PHP 코드가 표시됩니다.
muaaz

8

이것은 처리하는 대신 html 파일을 다운로드하는 서버와 함께 다시 나에게 일어났습니다. 나는 컴퓨터에서 한동안 웹 서버 아파치를 사용하지 않았으며 우분투는 원래 설치된 LTS에서 두 가지 버전보다 더 업데이트되었습니다. 지금이야

$ cat /etc/issue
Ubuntu 16.04 LTS

그래서 PHP는 다음과 같이 작동했습니다.

$ sudo apt-get install lamp-server^
$ sudo a2enmod php7.0
$ sudo service apache2 restart 

웹 서버는 이제 PHP를 파싱했습니다. php7.0이 php5를 실행하기 전의 위치에서 실행되고 있기 때문에 이제 일부 웹을 업데이트해야 할 수도 있습니다. 오 잘


5

XAMPP를 제거하고 WAMP를 설치하여이 문제를 해결했습니다. 도와 주셔서 감사합니다.


나는 xampp이지만 잘 작동합니다. 왜 PHP 코드 @Gui를 보여 주었습니까?
Pie

5

High Sierra (OS X 10.13.5)와 함께 제공되는 PHP 7.1 에서이 문제에 직면 /etc/apache2/httpd.conf하여 다음 변경 사항으로 편집 하면 도움이되었습니다.

  1. 이 줄 주석 해제

    LoadModule php7_module libexec/apache2/libphp7.so
  2. 끝에 따라 붙여 넣기

    <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>

마찬가지로 pls는 Wamp 3 버전과 동일한 오류를 제안 할 수 있습니다. wamp 3에는 /etc/apache2/httpd.conf 폴더 경로가 없습니다. @AamirR
Gem

이것은 나를 위해 일했다! !! 광산은 더 이상한 문제였습니다. 일부 파일은 PHP를 렌더링하고 다른 파일은 코드를 표시하지 않았으며 단지 코드 만 표시했습니다.
sjw0525

4

내 우분투 14.04, 아파치 2.4, PHP 5.5.9 설치에서 / var / www / html (기본 문서 루트)의 sample.php로 시도했지만 정상적으로 작동했습니다. 그래서 문제는 내 가상 서버 구성에있었습니다. 해결책은 .php를 포함하는 Directory def에 다음 행을 포함시키는 것입니다.

    php_admin_flag engine on

가상 서버의 httpd.conf에있는 Apache 파일에서이 줄을 어디에 추가해야합니까? 내가 Webmin은을 사용하고
수레 쉬 pareek

3

나는 비슷한 문제가 있었지만 내 경우에는 해결책이 달랐다. 개최 PHP 코드가 호출되었음을 나타 내 파일 "somename.html는" 로 변경 "somename.php" 일을 잘


이것은 또한 나를 위해 그것을 해결했습니다. 서버가 .html 파일에서 php를 실행할지 아는 사람이 있습니까, 아니면 실행할 PHP 행이있을 때 파일 끝을 항상 .php로 변경해야합니까?
full_prog_full

대부분의 경우 anyfile.html에 존재하는 PHP 코드가 서버 설정에 따라 실행됩니다. 그리고 그것이 없다면 idk how : P
Netrus

3

PHP 7을 실행하는 LAMP를 새로 설정하려면 /etc/httpd/conf/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>

그런 다음 LoadModule을 검색하고 다음 줄을 붙여 넣습니다.

LoadModule php7_module modules/libphp7.so

이 줄은 단순히 httpd에게 PHP 7 모듈을로드하도록 요청합니다.

그런 다음 httpd를 다시 시작하십시오.


3

PHP 용으로 설치 한 모든 패키지를 확인하십시오 사용하여 .

yum list installed | grep remi

모든 관련 PHP 패키지, 특히 php-devel 을 컴퓨터에 설치하십시오.


3

스크립트에 포함되어 있는지 확인하십시오

<?php

실행되어야 할 코드 앞에. 사이에는 공백이 없어야합니다 <?php이있다.


2

이것은 내 .htaccess에있었습니다.

DirectoryIndex index.html index.htm

index.html에는 PHP 코드가 포함되어 있습니다. 기본적으로 PHP는 htm *와 같은 확장자를 가진 파일을 PHP 코드로 처리하지 않습니다.

.htaccess에 다음을 추가하여이를 무시할 수 있습니다.

<FilesMatch ".+\.html$">
    SetHandler application/x-httpd-php
</FilesMatch>

1

결과 대신 코드를 표시하는 문제는 로컬 호스트로 이동하지 않는다는 것입니다. 어떤 주소로 들어오는 지 다시 확인하십시오. 로컬 파일 디렉토리 또는 로컬 호스트로 이동합니다.

전송 된 스크린 샷에서 로컬 호스트가 아닌 컴퓨터로 보내집니다.

"file : ///" "localhost /"여야합니다


1

mcrypt모듈을 다시 설치하면 나에게 도움이되었습니다.

$sudo apt-get install php5-mcrypt
$sudo php5enmod mcrypt

시스템에서 PHP를 올바르게 구성하지 않았기 때문에 정직하게 수행되었지만 동일한 문제에 대해 묻는 질문 이이 질문과 중복으로 표시되어 있기 때문에 여기서 대답 할 수 있습니다. 나는 왜 다운 투표가 궁금합니다.
bg

이 답변은 리눅스 분명히 윈도우를 사용하는 topicstarter 관련
레이몬드 Nijland을

1

실수로 루트에서 내 파일 디렉토리를 untar하기 시작한 경우가있었습니다. 내 파일 폴더에서 .htaccess 파일을 추가하여 모든 PHP를 차단합니다.

# If we know how to do it safely, disable the PHP engine entirely.
<IfModule mod_php5.c>
  php_flag engine off
</IfModule>

결론은 루트에서 .htaccess 파일을 확인하십시오.


1

다음과 같은 구성이있는 경우 :

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot "/var/www/example.com"

    <FilesMatch "\.php$">
        SetHandler "proxy:fcgi://127.0.0.1:9000"
    </FilesMatch>
</VirtualHost>

httpd.conf에서 다음 줄 주석 해제

LoadModule proxy_module lib/httpd/modules/mod_proxy.so
LoadModule proxy_fcgi_module lib/httpd/modules/mod_proxy_fcgi.so

그것은 나를 위해 작동


1

AddType application/x-httpd-php .phpApache 2.4를 사용중인 경우 httpd.conf 파일에 추가


1

Windows 10에서 PHP 5를 Apache 2.4와 함께 실행 하는 데 몇 시간을 보냈습니다 . 마지막으로 httpd.conf 의 오타였습니다 LoadModule. denny2018의이 스레드에서 마지막 답변 통해 작성 및 정확한 모듈 경로에주의를 기울 십시오 . 감사합니다!

이틀 밤 후에 나는 발견했다 ... 나의 디렉토리는 쓰여졌다 c:(소문자)

내가 가지고 LoadModule php5_module "c:/php/php5apache2.dll"있지만 아파치 2.4에 대한 올바른이 있습니다 :

LoadModule php5_module "C:/php/php5apache2_4.dll"

그래서 나는 또한 _4이전 ( 아파치 2.4 ) 을 놓쳤다 . 나를 위해 일한 전체 스 니펫 :

# PHP
LoadModule php5_module "C:/php/php5apache2_4.dll"
AddHandler application/x-httpd-php .php
<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>

방금 PHP 7을 시도했습니다 . 이 LoadModule라인 을 httpd.conf 아파치 2.4 읽기

LoadModule php7_module "C:/php/php7apache2_4.dll"

현재 PHP 매뉴얼은 c:/php/php5apache2.dll 조정해야 할 과정을 보여줍니다 .


1

제 경우에는 (Apache / 2.4.34)

특정 모듈의 주석을 해제 한 후

"LoadModule php7_module libexec / apache2 / libphp7.so"

...에서

"/etc/apache2/httpd.conf"

내 문제는 사라졌다.


1

우리가 같은 페이지에 있다면 다음을 수행하십시오.

sudo apt-get install php -y sudo apt-get install php-{bcmath,bz2,intl,gd,mbstring,mysql,zip,fpm} -y

Apache2에서 PHP 7.2 FPM을 활성화하려면 다음을 수행하십시오.

a2enmod proxy_fcgi setenvif

a2enconf php7.2-fpm

업데이트 2 : Apache가 렌더링 대신 .php 파일을 다운로드 함

그 후, 나는 위의 문제에 직면했다. 이와 비슷한 질문 있습니다.

왜 그런지 모르겠지만 내 .php 파일에서만 발생했습니다. /var/www/html/ 루트 폴더의 . 하위 디렉토리에는 모든 것이 정상이었습니다. (예 : 워드 프레스 및 phpmyadmin이 제대로 작동했습니다)

그래서 여기 내 해결책이 있습니다. PHP 모듈을 사용하기로 결정했습니다. 그래서 나는이 명령을 실행했다 :

a2enmod php7.2

하지만이 오류가 발생했습니다 :

php7.2의 mpm_prefork 종속성 고려 : 충돌 고려 mpm_prefork의 mpm_event : 오류 : mpm_event 모듈이 사용 가능합니다. 충돌로 인해 진행할 수 없습니다. 먼저 비활성화해야합니다! mpm_prefork에 대한 mpm_worker 충돌 고려 : 오류 : php7.2에 대한 mpm_prefork 종속성을 사용할 수 없습니다.

그래서 다음 명령을 실행하여 mpm을 비활성화하기로 결정했습니다.

sudo a2dismod mpm_prefork
sudo a2dismod mpm_worker
sudo a2dismod mpm_event

그런 다음 아파치를 다시 시작하십시오.

systemctl restart apache2

그런 다음 php7.2 (설치된 버전)를 활성화하십시오 :

sudo a2enmod php7.2

지금은 모든 것이 잘 작동합니다.


0

이 문제점의 또 다른 원인은 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>

-1

예를 들어 / var / www / html /에 넣은 파일은 .php for example example.php 여야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.