簡體   English   中英

Apache 顯示 PHP 代碼而不是執行它

[英]Apache shows PHP code instead of executing it

我最近一直在嘗試在我的計算機上安裝 PHP 和 Apache。 幾個小時后,它們就安裝好了。 我已經像大家說的那樣修改了 httpd.conf 和 php.ini 文件。 然后我創建了一個簡單的 PHP 腳本:

<?php phpinfo(); ?>

但是當我嘗試使用http://127.0.0.1/phpinfo.php運行它時,它只顯示源代碼而不是執行它。 我正在使用 Apache 2、PHP 5 和 Windows Vista。

編輯線:

PHP.INI:

short_open_tag = On

HTTPD.CONF

LoadModule php5_module "C:/php/php5apache2_2.dll"
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
PHPIniDir "C:/php"

您必須啟用 php! 檢查 Apache 目錄中的mods-enabled文件夾(默認: /etc/apache2/ )以查看是否找到名為php的文件。 我不記得擴展名,但我認為它是.so

還要檢查/var/log/apache2/error.log以查看是否有任何其他錯誤。

哇,這里有很多解決方案! 這是我在Ubuntu 16.04上所做的:

sudo apt-get install php libapache2-mod-php
sudo a2enmod mpm_prefork && sudo a2enmod php7.0
sudo service apache2 restart

對於 PHP 7(也可能適用於以前的版本),但我必須這樣做:

將此添加到 /etc/apache2/apache2.conf 的底部

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

從終端運行:

sudo a2dismod mpm_event && sudo a2enmod mpm_prefork && sudo a2enmod php7

然后不要忘記重新啟動 Apache,以便它知道您更改了內容:

sudo service apache2 restart

這是來自: https : //www.atlantic.net/community/howto/try-php7-lamp-ubuntu-14-04/的摘要

打開文件

/etc/apache2/httpd.conf

和改變

#LoadModule php5_module libexec/apache2/libphp5.so

進入

LoadModule php5_module libexec/apache2/libphp5.so

所以只需在httpd.conf取消注釋 PHP 模塊加載

我發現這可以解決我的相關問題。 我將它添加到相關的<Directory>部分:

<IfModule mod_php5.c>
    php_admin_flag engine on
</IfModule>

一個對我有用的不同答案。 就是這樣,安裝[sudo] apt-get install libapache2-mod-php5.X

Apache 顯示 php 代碼而不是執行已修復的問題

1.打開php5.6 conf或者php7.x conf

# 以下命令:

$ sudo vi /etc/apache2/mods-enabled/php5.6.conf

2. 評論以下幾行

在此處輸入圖像描述

3.重啟服務器

$ sudo 服務 apache2 重啟

4享受:)

好吧,如果您已經嘗試了上面或更早告訴過的內容(這可能是原因),但它仍然顯示代碼而不是執行代碼,那么您做錯了一件事尚未得到解決。 您用於訪問 php 代碼的 url; 有些人試圖通過將 .php 文件拖入 Web 瀏覽器來執行他們的 php 代碼。 這是錯誤的做法,可能會導致此類問題。 如果您在 C://wamp/www 文件夾中將文件保存為“test.php”,那么您必須通過以下方式訪問該文件:localhost://test.php。 這樣訪問就會出現這種錯誤:localhost://wamp/www/test.php

希望我幫助了那里的人。 o/ ~丹尼爾

發布對我有用的東西以防萬一幫助別人,盡管這是一個不尋常的案例。

我設置了一個處理程序來強制我的網絡主機使用比默認版本更高的 php。 有 5.1,但我想要 5.6,所以我有這個:

<FilesMatch \.php$>
    SetHandler php56-cgi
</FilesMatch>

在我的 .htaccess 文件中。

當嘗試在本地運行我的網站時,將其放置在其中會導致 php 代碼輸出到瀏覽器。 刪除它解決了這個問題。

感謝此線程上的其他人的建議。 按照提到的步驟,我發現 apache 服務器無法在/etc/apache2/mods-enabledload文件中開始報告語法錯誤。 原來 php7.0 和 php7.1 都被啟用了。

a2dismod php7.0
systemctl restart apache2

並且 php 再次正確呈現。

您可以刪除您的.htaceess文件並讓系統創建一個新的(空白或基本)文件。 可能是您添加的某些行是不正確的語句,或者是內部的其他內容導致了問題。 然后,您可以從舊的.htaccess文件中逐行添加,以查看導致問題的原因。

這對我有用。 在我的情況下,告訴機器不要顯示 php 擴展的行是問題( RewriteCondRewriteRule )。 我的舊.htaccess文件在共享服務器上運行良好,但是當我切換到 VPS 時出現了這個問題。

在 MAMP 中運行 $_POST 時,我也遇到了這種情況。 我所有的 .ini 和 httpd 文件都設置正確。 如果您正在處理表單並且您有一個 html 文檔並將信息發布到運行 $POST 的 php 表單處理程序,請確保您正在通過您的服務器從 localhost 運行 html 文件,而不僅僅是在本地運行。

這是我運行 html 文檔的快捷方式,只需單擊目錄中的 html 文件並在我的 Web 瀏覽器中啟動,實際上要檢查您的表單中是否正在處理 php,您必須通過服務器運行 html。 我忽略了一個非常簡單的協議。

例子:

錯誤: file:///Applications/MAMP/htdocs/form/form.html

右: http://localhost:your port number/form/form.html

現在,一旦您單擊提交按鈕,就應該處理 php

如果您是 ubuntu 用戶,安裝 apache 后必須在全新安裝中運行以下命令

sudo apt-get install php5 libapache2-mod-php5 php5-mcrypt

在我的情況下工作正常。

對於 PHP7 和 Apache2.4,這就是您需要做的所有事情:

sudo vim /etc/httpd/conf/httpd.conf

轉到最底部並插入以下內容(全部單獨):

<FilesMatch "\.*">
SetHandler application/x-httpd-php
</FilesMatch>

然后,重新啟動 Apache 以加載新配置:

sudo service httpd restart

Apache 現在將使用 PHP 執行所有 HTTP/S 請求。 如果您只有 html、css 和 php 文件,那么這對您來說很好。 如果您正在運行其他語言,則需要根據您的情況定制文件。 我已經用 phpMyAdmin 對此進行了測試,它工作正常。

所有人在這里談論的其他東西對我來說都不是必需的。 當我將“AddType Application .....”放在正確的位置時,Apache 只是告訴我該模塊已經加載並跳過了它。

更多信息可以在這里找到: https : //httpd.apache.org/docs/2.4/mod/core.html#filesmatch

我的安裝完成如下:

sudo yum install -y httpd24 php70 mysql56-server php70-mysqlnd

如果您還沒有,您還應該閱讀此內容: https : //httpd.apache.org/docs/current/howto/htaccess.html#when

將以下配置添加到/etc/apache2/apache2.conf

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

並通過sudo service apache2 restart apache

如果模塊 userdir 已啟用並且您的站點位於 userdir (~/public_html) 中,則必須檢查 /etc/apache2/mods-enabled/php5.conf。 以下部分使其工作(在 Ubuntu 14.10 utopic 上):

# Running PHP scripts in user directories is disabled by default
# 
# 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.

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

什么對我有用:

在活動的 httpd.conf 中,找到

<IfModule mime_module>
...
</IfModule>

它缺少以下內容

AddType application/x-httpd-php .php
AddHandler application/x-httpd-php .php

重新啟動 apache 后,正確解析 .php 文件。

以上都不適用於我... PHP7,Apache Httpd 2.2 on CentOS 6

事實上,我在 Apache 之前安裝了(全部使用 yum)php ......你必須做相反的事情:總是先安裝 Apache,然后是 PHP,然后它才能工作......事實上,你可能缺少libphp7.solibphp7-zts.so/etc/httpd/modules/

我無論如何都能夠在不卸載 PHP 的情況下恢復。 我確實在/etc/httpd/conf/httpd.conf添加了魔法線: AddType application/x-httpd-php .php然后運行: yum install php php-mysql

我嘗試了上面的一些解決方案,但是我們場景中的修復是安裝 fpm-module。

我們在 php 之前安裝了 httpd,這可能與問題有關,但為了解決我們安裝了以下內容:

yum 模塊安裝 php:7.2

這安裝了 php-fpm-7.2.11-4.module+el8.1.0+5443+bc1aeb77.x86_64.rpm 模塊,然后我們通過以下方式啟用:

systemctl enable --now php-fpm

從那時起,我們將 /etc/httpd/conf.d/php.conf 保留為默認值並重新啟動 httpd

服務 httpd 重啟

然后一切正常。

希望這會有所幫助,花費的時間比它應該弄清楚的要長。

我有同樣的問題,由模塊suphp的 Debian/Ubuntu 默認配置引起。 它包含整個 /usr/share 的suPHP_Engine off ,這導致 php 源代碼顯示在瀏覽器中。 使用a2dismod suphp停用是臨時解決方案。

我有同樣的問題。 當我運行一個 php 文件時,網絡瀏覽器向我顯示了 php 代碼而不是執行它。 我嘗試了很多次:卸載/重新安裝 wampserver64,解決 PHP/Apache 設置/模塊等。 2 天后:我意識到當我嘗試通過按默認組合“ctrl +”在記事本 ++ 中運行 php 文件時alt + shift + R" 用於鍍鉻。 它試圖在我的 chrome 地址欄中執行我的 php 文件,例如:“file///C:/wamp64/www/bla/bla..”。 那是我的問題。 我根據頁面配置 Notepad++ 以在 localhost 上運行 php進行了更改 . 我的問題解決了。 但是2天后..

以管理員身份運行 Xampp (apache)。 在谷歌瀏覽器類型:

localhost/<insert folder name here>/<insert file name>

即如果您創建的文件夾是“LearnPhp”,文件是“chapter1.php”然后輸入

localhost/LearnPhp/chapter1.php

我在下載 xampp 時創建的 htdocs 文件夾中的 xampp 文件夾中創建了此文件夾。

Debian 9 解決方案:

touch /etc/apache2/conf-available/php.conf 

添加到文件下一行:

<IfModule mod_php5.c>
    <IfModule mod_mime.c>
        AddType application/x-httpd-php .php
    </IfModule>
    <FilesMatch ".+\.php$">
        SetHandler application/x-httpd-php
    </FilesMatch>
</IfModule>
<IfModule mod_php.c>
    <IfModule mod_mime.c>
        AddType application/x-httpd-php .php
    </IfModule>
    <FilesMatch ".+\.php$">
        SetHandler application/x-httpd-php
    </FilesMatch>
</IfModule>

然后運行:

a2enconf php && service apache2 restart

有時如果你有 php 版本沖突,它會發生要克服這個問題,請按照以下步驟操作

第 1 步:安裝 Yum 列表 | grep 'php'

如果您有多個版本的 php,例如 php 5.6 和 php 7.0,則會發生此沖突

第 2 步:yum 刪除 **您的 php 版本 **

第 3 步:然后重新啟動 apapche /etc/init.d/httpd restartservice apache2 restart

這個解決方案對我有用。 我清除了 apache2 並重新安裝。 它發生在清除和安裝之后。 如果是第一次安裝,就不會遇到這個問題。

在我使用 PHP7.3 Apache2.4 Ubuntu 18.04 的情況下,我必須執行:

$ a2enmod actions fastcgi alias proxy_fcgi

Centos 7、PHP 8、Apache 2

我最近升級了一個 centos 服務器以使用 php 8。

升級后 php 停止工作,apache 開始為我提供 php 代碼作為文本。

花了很長時間尋找未更新的配置設置后,我將其追蹤到:

/etc/httpd/conf.d

<IfModule  mod_php7.c>

需要更改為:

<IfModule  mod_php.c>

在其他地方,您可能會看到mod_php7檢查可能會更新為mod_php變體,但這個絕對為我修復了它。

之后不要忘記重新啟動服務器。

您的其他站點/子目錄是否有效? 它只是一個顯示此行為的目錄嗎?

然后檢查 index.php 中的語法錯誤。 如果您錯過了 PHP 文件中的第一個字符:“<?php”中的“<”,那么瀏覽器會顯示該文件的 rest,因為它是一個文本文件。


例子:

?php
phpinfo(); 
?> 

然后瀏覽器只顯示“?php phpinfo(); ?>”,而不是 phpinfo() 的 output。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM