[英]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
好吧,如果您已經嘗試了上面或更早告訴過的內容(這可能是原因),但它仍然顯示代碼而不是執行代碼,那么您做錯了一件事尚未得到解決。 您用於訪問 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-enabled
的load
文件中開始報告語法錯誤。 原來 php7.0 和 php7.1 都被啟用了。
a2dismod php7.0
systemctl restart apache2
並且 php 再次正確呈現。
您可以刪除您的.htaceess文件並讓系統創建一個新的(空白或基本)文件。 可能是您添加的某些行是不正確的語句,或者是內部的其他內容導致了問題。 然后,您可以從舊的.htaccess文件中逐行添加,以查看導致問題的原因。
這對我有用。 在我的情況下,告訴機器不要顯示 php 擴展的行是問題( RewriteCond和RewriteRule )。 我的舊.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.so
和libphp7-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,這可能與問題有關,但為了解決我們安裝了以下內容:
這安裝了 php-fpm-7.2.11-4.module+el8.1.0+5443+bc1aeb77.x86_64.rpm 模塊,然后我們通過以下方式啟用:
從那時起,我們將 /etc/httpd/conf.d/php.conf 保留為默認值並重新啟動 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 restart
或service apache2 restart
這個解決方案對我有用。 我清除了 apache2 並重新安裝。 它發生在清除和安裝之后。 如果是第一次安裝,就不會遇到這個問題。
在我使用 PHP7.3 Apache2.4 Ubuntu 18.04 的情況下,我必須執行:
$ a2enmod actions fastcgi alias proxy_fcgi
我最近升級了一個 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.