Apache 正在下载 php 文件而不是显示它们
Posted
技术标签:
【中文标题】Apache 正在下载 php 文件而不是显示它们【英文标题】:Apache is downloading php files instead of displaying them 【发布时间】:2013-08-27 15:28:42 【问题描述】:操作系统和服务器信息:
CentOS 6.4(最终版) Apache 2.2.15 php 5.5.1我之前安装了 php 5.3.x,但决定升级。我首先卸载了 php 5.3.x,然后安装了 php 5.5.1,但是安装完成后,apache 没有解析 php 文件,它只是下载了它们。我在 *** 中检查了类似的问题,但到目前为止没有一个对我有帮助。
作为记录,我的 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
apache 不再下载该文件。现在 apache 正在显示源代码,但并非全部只是一部分。我加了
AddType text/html .php
但没有运气。
【问题讨论】:
嗯,如何你是怎么安装它的?哪个 SAPI?另见How to check which apache modules are enabled/installed? 你的 php 模块没有运行。 检查你的httpd.conf
php 模块是否被注释
我编辑了问题。模块确实退出并且它们显然正在加载
安装后有没有重启apache?
【参考方案1】:
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
当您配置 apache 时,请尝试从另一个浏览器查看页面 - 我曾经有过 chrome 顽固地缓存结果并继续下载源代码的日子,而在另一个浏览器中它很好。
【讨论】:
在我的情况下没有模块路径 你能补充一些信息把这些行放在哪里吗? 适合那些想在哪里放置这些行的人。/etc/httpd/conf/httpd.conf
就我而言,在 Apache-2.4.6+PHP-7.3.13 > LoadModule php7_module modules/libphp7.so
这项工作,将d
部分添加到x-http-php
就像在您的帖子作品中一样!我已经从源代码配置了 php【参考方案2】:
我今天遇到了这个问题,所描述的解决方案都不适合我。所以这是另一个可能的原因:
如果你有类似的东西
AddHandler x-mapp-php6 .php3 .php4 .php .phtml
在您的 Web 内容文件夹的 .htaccess
文件中,它可能会导致您的 PHP 脚本停止工作。在我的情况下,服务器不知道 x-mapp-php6
类型,因为 .htaccess
文件是我在传输网站内容时从不同的网络主机导入的。
只需从.htaccess
文件中删除AddHandler
行就为我解决了这个问题。
【讨论】:
完美。在我的情况下,必须删除AddHandler application/x-httpd-php54 .php54 .php
。
我遇到了一些问题,但在主目录(“public_html”Web 目录上方的一个目录)中找到了罪魁祸首 .htaccess 文件。如果其他人也有同样的问题,请在父目录中查找 .htaccess(设置级联)。
我有一个像这样的 .htaccess 文件,我是从网络托管服务器中提取的。它强制使用了一个未安装在我的本地计算机上的 PHP 版本。因此虚拟主机没有正确执行 PHP 文件。
如果一些网站可以工作而其他网站不能工作,这几乎肯定是问题所在。 Joomla .htaccess 包含一个 AddHandler 但 WordPress 没有。
这对我有用,只是从我的 public/.htaccess 文件中删除了该行并加载了索引。【参考方案3】:
经过一番努力,我终于解决了这个问题。
如果系统提示您下载 .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-enabled 中创建一个符号链接,指向存储在 mods-available 中的文件。
先去掉原来的:
$ 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
希望您的问题得到解决。
【讨论】:
请注意,这只适用于 Linux(特别是 Debian Linux)。【参考方案4】:请查看您的 addtype 指令。
在我看来,Apache 正在告诉浏览器它正在为带有 .php5 之类的扩展名的脚本发送应用程序/php 的文档类型。事实上,Apache 应该告诉浏览器脚本正在输出 text/html。
请试试这个:
AddType text/html .php
关于上面的建议,你应该告诉浏览器你正在输出一个 PHP 脚本:这对我来说似乎是一个不寻常的想法。我用谷歌搜索了一下,发现网上有很多关于它的讨论。显然,在某些情况下您可能想说您正在发送一个 PHP 脚本(即使 Apache 应该执行该脚本并发出 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 没有以某种方式正确运行,或者发送了错误的标头... 请注意最后一个 AddType 指令(在上面的示例中已被注释掉)导致 .phps 文件以 HTML 格式打印。您的 Apache 配置是否可以打印漂亮的 .php 文件?【参考方案5】:如果你的 .htaccess 有这样的东西...... AddHandler 应用程序/x-httpd-php53 .php .php5 .php4 .php3 然后评论它并再次尝试刷新这对我有用...
【讨论】:
【参考方案6】:这可能是由于缺少 php.ini 所需的模块而发生的。 假设您安装了 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
【讨论】:
【参考方案7】:我也有同样的问题。 Apache 不会从某个网站加载 php 文件,只是下载它。我阅读了这篇文章和答案,我看到我已经将这一行放入 .htaccess 文件的最后一个位置:
AddHandler x-mapp-php5.5 .php
我已对其发表评论,一切正常。
谢谢大家!!!
【讨论】:
【参考方案8】:将 PHP 更新到 7.3 后,PHP 脚本在运行时使用 www-data 而不是像以前那样使用 $USER。
我需要重新安装并激活 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 一切正常,我使用了 Re-Check Configuration 向导 /virtual-server/check.cgi
,位于 Virtualmin/系统设置。
在那之后,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
【讨论】:
【参考方案9】:在从 5.3 升级到 5.4 后,我之前也遇到过类似的问题。但是我的设置看起来有点不同,因为我正在运行 Debian 并使用 fcgid 来服务器 PHP 页面,而不是 PHP5 apache/cgi 模块。 所以在我升级之后,它也安装了php5_cgi,它和我的fcgid设置冲突了,不再执行PHP文件了。
我不得不禁用 Apache 模块并重新启动 Apache
a2dismod php5_cgi
/etc/init.d/apache2 restart
一旦 php5_cgi 模块退出,fcgid 就能够再次为 PHP 页面提供服务。
【讨论】:
噢,是的,这个棘手的 cgi 混蛋 ^^ 从 dotdeb 也将 php 从 5.3 更新到 5.4 后解决了我的问题。【参考方案10】:我有类似的症状,还有另一种解决方案: 在 /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.
【讨论】:
【参考方案11】:万一有人在Linux环境下使用php7
确保启用 php7
sudo a2enmod php7
重启mysql服务和Apache
sudo systemctl restart mysql
sudo systemctl restart apache2
【讨论】:
【参考方案12】:我花了两天时间跟踪这件事,发现我把我的 PHP 脚本放在了错误的目录中。
在我的标准 Ubuntu 安装中,我将脚本放在 /var/www
中。他们应该在/var/www/html
。
我刚刚开始 PHP 工作,所以我不知道我的解决方案是否与您经历的版本更改有关。
【讨论】:
【参考方案13】:这解决了我的问题(我安装了 php7):
sudo apt-get install libapache2-mod-php7.0
sudo service apache2 重启
【讨论】:
【参考方案14】:我遇到了这个问题。事实证明,我同时安装了 nginx 和 apache,并在启动时自动启动。问题是 nginx 首先绑定到 http 端口,导致 apache 无法启动。
【讨论】:
【参考方案15】:也有可能您正在运行 nginx,但您的 php 设置为与 apache 一起运行。要进行验证,请运行 service nginx status
和 service apache2 status
以查看哪个正在运行。如果 nginx 正在运行而 apache 没有,只需运行 sudo service nginx stop; sudo service apache2 start
,您的服务器现在将按预期提供 php 文件。
【讨论】:
【参考方案16】:好的...我知道这个问题已经有 1.000.000 个答案,但我至少花了 6 个有效时间来解决这个问题;我已经用谷歌搜索了数百次,但没有找到一篇关于它的帖子。所以我想我会在这里为我的问题添加解决方案。
结论
如果我在 /etc/apache2/[[SERVER-NAME].conf
-file 的 .conf 文件中将这两行注释掉:
php_admin_value engine Off
IPCComTimeout 31
我不知道他们做了什么或他们是如何到达那里的,但它在我的每个.conf
-文件中。如果我在/etc/apache2/sites-enabled/
-文件夹中删除这些行和ensure that there is a symlink,那么它不会下载index.php - 并且每个都可以正常工作。
整个故事
我在 Ubuntu 16.04 VPS 上安装了 VirtualMin。我升级到 PHP 7.2 版。不久之后,我更新了 Ubuntu 版本并遇到了“内核偏移:禁用”错误。所以我不得不去删除最新的 Ubuntu 版本,当我的操作系统再次启动时:BOOM!我得到了他的帖子提到的错误:对于我的 VPS 上的每个站点,它只是下载了 index.php 而不是显示它。
我尝试了各种各样的东西:
删除了 PHP7.2 并安装了 PHP5.6(我现在知道,PHP 版本与它无关;需要工作的是 apache 配置)。 尝试在现有安装上启用和禁用 apache 模块,但没有成功。 然后我removed apache completely 并再次安装了它,但问题仍然存在! 尝试在 VirtualMin 中设置虚拟服务器(Webmin >> 服务器 >> Apache Webserver)。 检查了单个虚拟服务器上的配置(Virtualmin >> 系统设置 >> 重新检查配置)...这一步非常好,因为它告诉 Apache 中缺少哪个模块;之后我可以使用a2enmod [MODULE_NAME]
启用它。我通过谷歌搜索找到了模块名称。我必须激活大约 6 到 8 个模块,然后才能通过验证中的那一步 - 缓存用完之前需要几分钟,所以这样做是一个乏味的步骤。
最后,我想出了上面写的结论 - 连同符号链接, - 然后我得到它的工作。不过,我必须为我的 VPS 上的每个站点都检查一遍。
【讨论】:
【参考方案17】:我遇到了这个问题,如果您实际上从未使用过服务器配置设置,那么您的问题 90% 在您的 .htaccess 文件中
您要么在本地修改 .htaccess 文件,要么将其删除(本地)
【讨论】:
【参考方案18】:如果你有 virtualmin 尝试注释掉这些行 在 /etc/apache2/sites-available 中的 apache 配置中
#RemoveHandler .php
#RemoveHandler .php7.0
#php_admin_value engine Off
【讨论】:
【参考方案19】:在将 php5 从旧版本升级到 5.5.9(即安装了 Mint 17 的版本)时,我遇到了与 OP 类似的问题。
我正在本地网络上的一台机器上运行 LAMP 设置,在我将这些更改上传到实际的实时服务器之前,我使用它来预览对网站的更改。所以我维护了一个实际站点的完美本地镜像。
升级后,在实际站点上运行和显示完美的文件将不显示,或者在本地机器上只显示html。 PHP 没有被解析。 phpinfo() 命令有效,所以我知道 php 可以正常工作。日志没有产生错误。查看页面源代码向我展示了实际的 php 代码。
我已经构建了一个包含以下代码的 test.php 页面:
<?php
phpinfo();
?>
这行得通。然后我发现当我将<?php
更改为<?
时,该命令不再起作用。我所有的 php 站点都使用<?
而不是<?php
,这可能并不理想,但这是现实。我通过转到 /etc/php5/apache2 来解决问题,搜索“short_open_tag”并将值从 Off 更改为 On。
【讨论】:
【参考方案20】:如果以上都不起作用,
尝试注释掉该行
SetHandler ....
并使用
重新启动 apache/etc/init.d/httpd restart
应该可以了!
【讨论】:
【参考方案21】:PHP56
vim /etc/httpd/conf/httpd.conf
LoadModule php5_module libexec/apache/libphp5.so
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
【讨论】:
【参考方案22】:我遇到了这种问题。这就是我解决它的方法。 安装 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
它显示正确。我认为这对任何人都有帮助。
【讨论】:
【参考方案23】:对于在近 6 年后(甚至更久!)从 Google 找到这篇文章的人,您可能会在使用 Apache 2 和 PHP 7 时遇到这个问题,同时还使用 UserDir
模块。
此问题的另一个可能原因可能是您试图在 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>
【讨论】:
【参考方案24】:我在使用zypper rm php*
卸载PHP并使用zypper in php7 php7-gd php7-gettext php7-mbstring php7-mysql php7-pear
再次安装后遇到了同样的问题
我通过启用 apache2 模块并重新启动网络服务器解决了这个问题:
a2enmod php7 && service apache2 restart
【讨论】:
【参考方案25】:当我从 PHP 7.2 升级到 PHP 7.4 时,我也遇到了同样的问题。通过以下方式工作:-
在[domain].conf file
,评论如下:
php_admin_value engine Off
并添加:
AddType application/x-httpd-php-source .phps
AddType text/html .php
通过以下方式禁用 mod 7.2 并启用 7.4:
a2dismod php7.2
a2enmod php7.4
在/etc/apache2/mods-enabled/php7.4.conf
文件中,评论如下:
SetHandler application/x-httpd-php
php_admin_flag engine Off
【讨论】:
【参考方案26】:如果您的 .htaccess 有类似的内容
AddType application/x-httpd-ea-php56 .php .php5 .phtm .html .htm
【讨论】:
以上是关于Apache 正在下载 php 文件而不是显示它们的主要内容,如果未能解决你的问题,请参考以下文章