Apache正在下载php文件而不是显示它们

Ant*_*nor 87 php apache centos

OS和服务器信息:

  • 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文件.我在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
Run Code Online (Sandbox Code Playgroud)

我真的很感激任何帮助.谢谢.

编辑:

我在php.conf中有这些行

<IfModule !worker.c>
  LoadModule php5_module modules/libphp5.so
</IfModule>
<IfModule worker.c>
  LoadModule php5_module modules/libphp5-zts.so
</IfModule>
Run Code Online (Sandbox Code Playgroud)

编辑:

通过删除

AddType application/x-httpd-php .php5 .php4 .php .php3 .php2 .phtml
Run Code Online (Sandbox Code Playgroud)

apache不再下载该文件.现在apache正在显示源代码,但并非所有内容都只是一部分.我补充道

AddType text/html .php
Run Code Online (Sandbox Code Playgroud)

但没有运气.

小智 75

php的正确AddType是application/x-httpd-php

AddType  application/x-httpd-php         .php
AddType  application/x-httpd-php-source  .phps
Run Code Online (Sandbox Code Playgroud)

还要确保你的php模块已加载

LoadModule php5_module        modules/mod_php55.so
Run Code Online (Sandbox Code Playgroud)

当你配置apache然后尝试从另一个浏览器查看页面时 - 我已经有几天chrome固执地缓存结果并且它一直在下载源代码而在另一个浏览器中它很好.

  • 对于正在寻找将这些线放置在何处的人们。`/ etc / httpd / conf / httpd.conf` (6认同)
  • 您能否添加一些信息来放置这些行? (2认同)

mar*_*kus 17

我今天遇到了这个问题,并没有一个解决方案适合我.所以这是另一个可能的原因:

如果你有类似的东西

AddHandler x-mapp-php6 .php3 .php4 .php .phtml
Run Code Online (Sandbox Code Playgroud)

.htaccess您的Web内容文件夹的文件中,它可能导致您的PHP脚本停止工作.在我的情况下,服务器不知道x-mapp-php6类型,因为该.htaccess文件是我在转移网站内容时从其他Web主机导入的文件.

只是AddHandler.htaccess文件中删除该行解决了它.


小智 15

经过艰苦的努力,我终于解决了这个问题.

如果系统提示您下载.php文件而不是执行它,那么这里是完美的解决方案:我假设您已经安装了PHP5并仍然出现此错误.

$ sudo su
$ a2enmod php5
Run Code Online (Sandbox Code Playgroud)

就是这个.

但是如果你仍然得到错误:

Config file php5.conf not properly enabled: /etc/apache2/mods-enabled/php5.conf is a real file, not touching it
Run Code Online (Sandbox Code Playgroud)

然后执行以下操作:

结果文件不应该存储mods-enabled,而应该存储在mods-available.然后应该在mods-enabled中创建一个符号链接,指向存储在mods-available中的文件.

首先删除原始:

$ mv /etc/apache2/mods-enabled/php5.conf /etc/apache2/mods-available/
Run Code Online (Sandbox Code Playgroud)

然后创建符号链接:

$ ln -s /etc/apache2/mods-available/php5.conf /etc/apache2/mods-enabled/php5.conf
Run Code Online (Sandbox Code Playgroud)

我希望你的问题得到解决.

  • 请注意,这仅适用于Linux(特别是Debian Linux). (2认同)

Sam*_*zer 5

请查看您的addtype指令.

在我看来,Apache正在告诉浏览器它正在为带有.php5等扩展名的脚本发送文件类型的application/php.事实上,Apache应该告诉浏览器该脚本正在输出text/html.

请试试这个:

AddType text/html .php
Run Code Online (Sandbox Code Playgroud)

关于上面的建议,您应该告诉浏览器您正在输出PHP脚本:对我来说这似乎是一个不寻常的想法.我用Google搜索,发现在网上有很多关于它的讨论.显然有些情况下你可能想要说你正在发送一个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
Run Code Online (Sandbox Code Playgroud)


小智 5

如果你的 .htaccess 有这样的东西...... AddHandler application/x-httpd-php53 .php .php5 .php4 .php3 然后评论它并再次尝试刷新这对我有用......


Nou*_*had 5

由于您的php需要缺少模块,这可能会发生.假设您已安装php7,请使用搜索可用的php7模块

sudo apt-cache search php7-*
Run Code Online (Sandbox Code Playgroud)

上面的命令将列出所有可用的PHP7模块以进行安装.你可以开始安装模块,比如

sudo apt-get install libapache2-mod-php7.0 php7.0-mysql php7.0-curl php7.0-json
Run Code Online (Sandbox Code Playgroud)