php短标签默认关闭,需开启short_open_tag配置才生效;是echo快捷写法,php 5.4+起不受该配置限制,但仅支持单表达式输出。

PHP 标签必须用 <?php ?> 或短标签 ?>(需开启配置),否则服务器不解析,直接暴露源码。
为什么 ?> 有时会失效
短标签默认关闭,Apache/Nginx + PHP-FPM 环境中,short_open_tag 配置为 Off 时, echo 'hi'; ?> 会被当成纯文本输出,浏览器看到的就是原样代码。常见错误现象:页面上直接显示 phpinfo(); ?>,而不是执行结果。
- 检查当前配置:
php -i | grep short_open_tag或在脚本里写var_dump(ini_get('short_open_tag')); - 生产环境强烈建议统一用
<?php ?>,避免依赖配置 - 模板文件(如 Twig、Blade)里的
{{ }}或@不是 PHP 标签,别混淆
<?php ?> 和 = ?> 的区别
= ?> 是 echo 的快捷写法,仅限输出表达式结果,不能写语句。比如 = $name ?? 'guest' ?> 合法,但 = if($x) { echo 'ok'; } ?> 会报错 Parse error: syntax error, unexpected 'if'。
-
=自动启用short_open_tag,即使short_open_tag=Off也生效(PHP 5.4+) - 它等价于
<?php echo ...; ?>,不支持多条语句、控制结构或函数定义 - 注意 XSS:直接输出用户数据要手动转义,
= htmlspecialchars($input) ?>
HTML 中混写 PHP 的典型陷阱
PHP 是服务端执行,HTML 是客户端渲染,两者嵌套时容易误判执行时机。比如在 <script></script> 块里写 <?php echo "var x = 1"; ?>,看起来像 JS,实际只是 PHP 输出字符串——如果 PHP 出错或没运行,JS 就会语法错误。
- 避免在
<script></script>或<style></style>内部写复杂 PHP 逻辑,优先用 JSON 接口传数据 - HTML 属性值里嵌 PHP 要小心引号:正确是
<div id="<?= $id ?>">,错误是 <code><div id="<?php echo $id; ?>">(少空格易拼错) <li>PHP 标签前后若有多余空白(尤其换行),可能影响 HTML 结构,比如在 <code><pre class="brush:php;toolbar:false;"></pre>里导致意外缩进
最常被忽略的是:PHP 标签是否被 Web 服务器识别,取决于文件扩展名和 MIME 配置。.html 文件默认不走 PHP 解析器,哪怕写了 <?php ?> 也白搭——得用 .php 后缀,或手动配置服务器把 .html 交给 PHP 处理。











