当在Linux环境下PHP文件不被解析而是直接显示源代码时,通常是由于Web服务器配置问题导致的。以下是常见原因及解决方法:
检查与解决方法:
# 检查是否加载了PHP模块
apache2ctl -M | grep php
# 如果没有显示php相关模块,需要安装并启用
sudo apt install libapache2-mod-php # Ubuntu/Debian
sudo yum install php php-mysql # CentOS/RHEL
# 启用模块并重启Apache
sudo a2enmod php
sudo systemctl restart apache2
检查与解决方法:
# 检查PHP-FPM是否运行
systemctl status php-fpm
# 如果未运行,启动服务
sudo systemctl start php-fpm
sudo systemctl enable php-fpm
# 检查Nginx配置中是否包含PHP处理
# 通常在server块中应有类似配置:
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php-fpm.sock;
}
解决方法: 确保在Apache的配置中有以下内容:
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
解决方法:
# 确保PHP文件有正确的权限
sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html
创建测试文件:
echo "<?php phpinfo(); ?>" > /var/www/html/info.php
然后通过浏览器访问 http://your-server/info.php
,应该显示PHP信息页面。
# 确保安装了PHP模块
sudo apt install php libapache2-mod-php
# 检查并启用模块
sudo a2enmod php
sudo systemctl restart apache2
# 安装PHP-FPM
sudo apt install php-fpm
# 检查Nginx配置
sudo nano /etc/nginx/sites-available/default
# 确保有正确的PHP处理配置(如前所述)
# 重启服务
sudo systemctl restart nginx php-fpm
# 启用PHP模块
sudo lighty-enable-mod fastcgi-php
# 重启服务
sudo service lighttpd restart
PHP包未安装:
sudo apt install php # Ubuntu/Debian
sudo yum install php # CentOS/RHEL
错误的PHP文件扩展名:
.php
结尾SELinux限制(CentOS/RHEL):
# 临时禁用SELinux(不推荐生产环境)
setenforce 0
# 或设置正确的安全上下文
sudo chcon -R -t httpd_sys_content_t /var/www/html
如果以上方法都不能解决问题,建议检查Web服务器错误日志获取更详细的信息:
# Apache
tail -f /var/log/apache2/error.log
# Nginx
tail -f /var/log/nginx/error.log