在Web开发中,不少初学者会把PHP代码写在HTML文件里,然后期待用浏览器打开就能看到动态内容。实际上,HTML本身只是静态标记语言,浏览器并不具备解析PHP的能力。要让HTML中的PHP代码生效,必须借助服务器软件将文件交给PHP解析器处理,再把执行结果返回给浏览器。

为什么HTML不能直接运行PHP
HTML文件由浏览器直接渲染,其中的<?php ?>标签对浏览器来说只是普通文本。当用户访问一个扩展名为.html的文件时,如果服务器没有特别配置,通常会直接把文件内容发送给客户端,PHP代码也就原样显示在页面上。这种现象常让人误以为代码写错了,其实是执行环境不对。
PHP是一种服务端脚本语言,它的运行依赖PHP解释器。只有在请求到达服务器后,由服务器调用PHP解析模块(如PHP-FPM)执行脚本,才能得到处理后的HTML。因此,无论文件后缀是.php还是.html,只要里面包含PHP,就必须经过服务端解析这一步。
使用Apache配置PHP解析
Apache是最常用的Web服务器之一,通过mod_php模块或PHP-FPM方式都能解析PHP。如果是较新的Ubuntu系统,安装libapache2-mod-php后,Apache会自动将.php文件交给PHP处理。若希望.html文件也解析PHP,需要修改配置文件添加处理器。
下面示例展示如何让Apache把.html文件也当作PHP解析。在虚拟主机配置或.htaccess中加入以下内容:
<FilesMatch ".html$">
SetHandler application/x-httpd-php
</FilesMatch>
配置完成后重启Apache,再访问包含PHP的HTML页面,服务器就会先执行PHP再返回结果。不过要注意,让所有HTML都走PHP解析会增加服务器开销,生产环境建议统一使用.php后缀。
使用Nginx配合PHP-FPM
Nginx本身不内置PHP解析,需要通过FastCGI把请求转发给PHP-FPM进程。默认情况下,Nginx只会对.php结尾的文件做转发。如果希望HTML里也能跑PHP,可以修改location规则。
以下配置演示了如何让Nginx将.html请求也交给PHP-FPM:
server {
listen 80;
root /var/www/html;
index index.html index.php;
location ~ .(html|php)$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}
}
这段配置中,location匹配.html或.php结尾的文件,通过fastcgi_pass指向PHP-FPM的套接字。重启Nginx和PHP-FPM后,在/var/www/html下创建一个test.html,写入PHP代码即可看到执行效果。
本地快速搭建运行环境
如果不想手动配置服务器,可以使用集成环境如XAMPP或PHP内置服务器。PHP从5.4起提供了简易内置服务器,在命令行进入项目目录执行:
php -S 127.0.0.1:8000
然后在浏览器访问 http://127.0.0.1:8000/yourfile.html 。不过内置服务器默认只解析.php文件,若要用.html运行PHP,仍需在代码里用router脚本处理。更简单的方式是直接把文件改为.php,避免额外配置。
代码示例:在HTML中嵌入PHP
下面是一个混合了PHP的HTML文件示例,命名为demo.php放在网站根目录:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>PHP in HTML</title>
</head>
<body>
<h1>当前时间</h1>
<p>
<?php
echo "服务器时间是:" . date("Y-m-d H:i:s");
?>
</p>
</body>
</html>
通过服务器访问该文件,浏览器收到的已经是PHP执行后的纯HTML,用户看不到任何PHP源码。这就是服务端解析的核心价值:隐藏逻辑、动态输出。
常见误区与建议
有人试图用<script>标签引入PHP文件,或者把PHP文件双击用浏览器打开,这些都不会触发解析。PHP必须在HTTP请求中被服务器调用,而不是被本地文件系统直接读取。另外,某些编辑器预览功能只是静态展示,不等于服务器运行。
建议新手统一使用.php作为动态文件后缀,减少服务器配置复杂度。当项目确实需要.html解析PHP时,再针对特定目录做规则覆盖,并关注性能与安全,避免把敏感逻辑暴露在不必要的解析路径中。
PHPHTMLserver_configuration修改时间:2026-08-08 07:33:26