You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP代码部署后<?php标签被自动加<!--注释导致代码损坏如何解决?

问题根因

该问题和GitHub代码提交无关,仅出现在同事的部署环境层面,常见触发原因如下:

  • PHP配置冲突:部署环境的php.ini中开启了asp_tags或者错误配置了short_open_tag参数,解析器误将标准<?php长标签识别为非合法标记,触发自动注释转换
  • Web服务器规则错误:Apache的mod_security安全模块、Nginx的自定义安全拦截规则,将PHP起始标签判定为注入攻击特征,自动将其包裹为HTML注释进行拦截
  • 部署流程的错误过滤:部署脚本中集成了HTML清理、静态化处理工具(比如Tidy、自定义内容格式化脚本),没有排除PHP后缀文件,误将PHP标签当作非法HTML标签注释处理

修复方案

前置校验

先让同事在拉取代码后未部署的状态下,执行命令查看源文件内容:

cat 目标PHP文件名.php | head -20

如果源文件中已经存在<!--?php,说明是git配置了错误的文本过滤钩子,重置git全局配置即可;如果源文件正常,说明是运行时环境问题,按以下步骤修复:

运行时问题修复

  1. 修正PHP配置
    编辑部署环境的php.ini文件,修改对应参数:
short_open_tag = Off
asp_tags = Off

修改完成后重启PHP-FPM或Apache服务验证。
2. 排查Web服务器规则
临时关闭Web服务器的安全模块、删除站点配置中的自定义输出重写规则,重启服务后验证是否恢复正常,确认是规则问题后调整规则排除PHP文件的拦截逻辑。
3. 调整部署脚本
排查部署流程中所有涉及代码格式化、内容清理的步骤,添加.php后缀文件的排除规则,禁止工具处理PHP源文件。

兜底兼容方案

可以在项目中添加服务器配置文件,强制指定PHP文件的解析逻辑,避免环境差异影响:

  • Apache环境在项目根目录添加.htaccess文件:
AddType application/x-httpd-php .php
php_flag short_open_tag Off
  • Nginx环境修改站点配置:
location ~ \.php$ {
    fastcgi_pass unix:/run/php/php8.1-fpm.sock; # 替换为实际的fpm套接字路径
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

内容的提问来源于stack exchange,提问作者Jake Nguyen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 17:48:10