操作系统和服务器信息:
- CentOS 6.4 (最终版(
- 阿帕奇 2.2.15
- PHP 5.5.1
我以前安装了php 5.3.x,但决定升级。我首先卸载了php 5.3.x,然后安装了php 5.5.1,但是安装完成后,apache没有解析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
Apache 不再下载该文件。现在 apache 正在显示源代码,但不是全部只是部分。我添加了
AddType text/html .php
但没有运气。
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 顽固地缓存结果并且它会继续下载源代码,而在另一个浏览器中它很好。
我今天遇到了这个问题,所描述的解决方案都不适合我。所以这是另一个可能的原因:
如果你有类似的东西
AddHandler x-mapp-php6 .php3 .php4 .php .phtml
在 Web 内容文件夹的.htaccess
文件中,它可能会导致 PHP 脚本停止工作。就我而言,服务器不知道x-mapp-php6
类型,因为该.htaccess
文件是我在传输网站内容时从其他Web主机导入的内容。
只是从.htaccess
文件中删除AddHandler
行为我解决了它。
经过多次挣扎,我终于解决了这个问题。
如果系统提示您下载.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
中。然后应该在启用模组的情况下创建一个符号链接,指向存储在模组可用中的文件。
首先删除原始文件:
$ 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
我希望你的问题得到解决。
请查看您的 addtype 指令。
在我看来,Apache正在告诉浏览器它正在为扩展名为.php5的脚本发送文档类型的应用程序/php。事实上,Apache应该告诉浏览器脚本正在输出text/html。
请尝试以下操作:
AddType text/html .php
关于上面的建议,你应该告诉浏览器你正在输出一个PHP脚本:这对我来说似乎是一个不寻常的想法。我用谷歌搜索了一下,发现网络上有很多关于它的讨论。显然,在某些情况下,您可能想说您正在发送PHP脚本(即使Apache应该执行脚本并发出text/html(,并且在某些情况下,浏览器根本无法识别特定的Mime类型。
清除浏览器缓存始终是一个好主意。
如果有帮助,这里有一份我的/etc/httpd/conf.d/php.conf 文件的副本,来自运行 CentOS 5.9 的服务器:
#
# 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
如果你的.htaccess有这样的东西... AddHandler application/x-httpd-php53 .php .php5 .php4 .php3然后评论它并再次尝试刷新这对我有用......
这可能是由于缺少 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
我有同样的问题。Apache不会从某个网站加载php文件,只是下载了它。我阅读了这篇文章和答案,我看到我已经把这一行放在了.htaccess文件的最后一处:
AddHandler x-mapp-php5.5 .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 一切正常,我在 Vitualmin/系统设置下使用了 /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
<</div>
div class="answers"> 从 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 页面提供服务。
我有类似的症状,还有另一种解决方案:在/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.
我花了两天时间跟踪这个问题,发现我把我的PHP脚本放在了错误的目录中。
在我的标准 Ubuntu 安装中,我将脚本放在 /var/www
中。 他们应该在/var/www/html
我刚刚开始PHP工作,所以我不知道我的解决方案是否与您经历的版本更改有关。
如果有人在 Linux 环境中使用 php7
确保启用 php7
sudo a2enmod php7
重新启动 mysql 服务和 Apache
sudo systemctl restart mysql
sudo systemctl restart apache2
好的...我知道这个问题已经有 1.000.000 个答案了,——但我至少花了 6 个有效小时来弄清楚这个问题;我已经用谷歌搜索了数百次,但没有找到一篇关于它的帖子。所以我想我会在这里为我的问题添加解决方案。
结语
如果我在 /etc/apache2/[[SERVER-NAME].conf
-file 的 .conf 文件中注释了这两行:
php_admin_value engine Off
IPCComTimeout 31
我不知道他们做了什么或他们是如何到达那里的,但它在我的每一个.conf
文件中。如果我删除这些行并确保/etc/apache2/sites-enabled/
文件夹中有一个符号链接,那么它就不会下载索引.php - 并且每个都正常工作。
整个故事
我在Ubuntu 16.04 VPS上安装了VirtualMin。我升级到 PHP 版本 7.2。不久之后,我更新了 Ubuntu 版本并遇到了"内核偏移量:禁用"错误。所以我不得不删除最新的 Ubuntu 版本,- 当我的操作系统再次启动时:轰!我得到了他的帖子谈到的错误:对于我的VPS上的每个网站,它只是下载索引.php而不是显示它。
我尝试了各种东西:
- 删除了 PHP7.2 并安装了 PHP5.6(我现在知道,PHP 版本与它无关;需要工作的是 apache 配置(。
- 尝试在现有安装上启用和禁用 apache 模块,但没有运气。
- 然后我完全删除了 apache 并再次安装它,之后问题仍然存在!
- 尝试在VirtualMin中使用Virutal服务器设置(Webmin>>服务器>>Apache Webserver(。
- 已检查单个虚拟服务器上的配置(Virtualmin>>系统设置>>重新检查配置(...这一步非常好,因为它告诉了 Apache 中缺少哪个模块;之后我可以用
a2enmod [MODULE_NAME]
启用它.我通过谷歌搜索找到了模块名称。在我完成验证中的该步骤之前,我必须激活大约 6-8 个模块 - 在缓存用完之前花了几分钟,所以这样做是一个乏味的步骤。 - 最后,我想出了上面写的结论 - 连同符号链接,然后我让它工作。不过,我必须为VPS上的每个站点检查它。
这为我解决了问题(我安装了php7(:
sudo apt-get install libapache2-mod-php7.0
sudo service apache2 restart
我遇到了这个问题。事实证明,我同时安装了nginx和apache,并在启动时自动启动。问题是nginx首先绑定到http端口,这阻止了apache启动。
也有可能你正在运行nginx,但你的php设置为使用apache运行。若要验证,请运行service nginx status
并service apache2 status
以查看正在运行的。如果 nginx 正在运行而 apache 没有,只需运行sudo service nginx stop; sudo service apache2 start
,您的服务器现在将按预期提供 php 文件。
我遇到了这个问题,如果您实际上从未使用过服务器配置设置,那么您的问题在您的 .htaccess 文件中有 90%
您要么在本地修改.htaccess文件,要么将其删除(本地(
如果您有 virtualmin,请尝试注释掉这些行在/etc/apache2/sites-available 中的 Apache 配置中
#RemoveHandler .php
#RemoveHandler .php7.0
#php_admin_value engine Off
在将 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。
如果以上方法都不起作用,
尝试注释掉该行
SetHandler ....
并使用重新启动 Apache
/etc/init.d/httpd restart
它应该有效!
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
我遇到了这种问题。这就是我解决它的方式。安装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
它正确显示。我认为这将帮助任何人。
对于那些在未来近 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>
zypper rm php*
卸载 PHP 并使用 zypper in php7 php7-gd php7-gettext php7-mbstring php7-mysql php7-pear
再次安装后,我遇到了同样的问题
我通过启用 apache2 模块并重新启动网络服务器解决了它:
a2enmod php7 && service apache2 restart
当我从 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
如果你的.htaccess有这样
的东西
AddType application/x-httpd-ea-php56 .php .php5 .phtm .html .htm
多次尝试解决我的问题,通过清除浏览器缓存以某种方式修复了完全相同的行为。试一试。