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

PHP-CS-FIXER格式化嵌入HTML的PHP代码出现缩进错误求助

PHP-CS-FIXER 格式化嵌入HTML的PHP代码时缩进异常问题

环境信息

  • Mx Linux 23.1(Debian 12)
  • PHP 8.2.7
  • Vscodium 1.85.2
  • php-cs-fixer-v3.phar(版本^3.42)

问题现象

使用PHP-CS-FIXER格式化嵌入HTML的PHP代码时,<div class="right-links">内的$query = mysqli_query(...)行及后续代码无法保持正确缩进;但移除文件开头的PHP会话处理代码块后,格式化结果恢复正常。

配置文件

<?php

return (new PhpCsFixer\Config())
    ->setRules([
        '@PSR12' => true,
        'array_indentation' => true,
        'array_syntax' => ['syntax' => 'short'],
        'combine_consecutive_unsets' => true,
        'class_attributes_separation' => ['elements' => ['method' => 'one',]],
        'multiline_whitespace_before_semicolons' => false,
        'single_quote' => true,

        'binary_operator_spaces' => [
            'operators' => [
                // '=>' => 'align',
                // '=' => 'align'
            ]
        ],
        // 'blank_line_after_opening_tag' => true,
        // 'blank_line_before_statement' => true,
        'braces' => [
            'allow_single_line_closure' => true,
        ],
        // 'cast_spaces' => true,
        // 'class_definition' => array('singleLine' => true),
        'concat_space' => ['spacing' => 'one'],
        'declare_equal_normalize' => true,
        'function_typehint_space' => true,
        'single_line_comment_style' => ['comment_types' => ['hash']],
        'include' => true,
        'lowercase_cast' => true,
        // 'native_function_casing' => true,
        // 'new_with_braces' => true,
        // 'no_blank_lines_after_class_opening' => true,
        // 'no_blank_lines_after_phpdoc' => true,
        // 'no_blank_lines_before_namespace' => true,
        // 'no_empty_comment' => true,
        // 'no_empty_phpdoc' => true,
        // 'no_empty_statement' => true,
        'no_extra_blank_lines' => [
            'tokens' => [
                'curly_brace_block',
                'extra',
                // 'parenthesis_brace_block',
                // 'square_brace_block',
                'throw',
                'use',
            ]
        ],
        // 'no_leading_import_slash' => true,
        // 'no_leading_namespace_whitespace' => true,
        // 'no_mixed_echo_print' => array('use' => 'echo'),
        'no_multiline_whitespace_around_double_arrow' => true,
        // 'no_short_bool_cast' => true,
        // 'no_singleline_whitespace_before_semicolons' => true,
        'no_spaces_around_offset' => true,
        // 'no_trailing_comma_in_list_call' => true,
        // 'no_trailing_comma_in_singleline_array' => true,
        // 'no_unneeded_control_parentheses' => true,
        // 'no_unused_imports' => true,
        'no_whitespace_before_comma_in_array' => true,
        'no_whitespace_in_blank_line' => true,
        // 'normalize_index_brace' => true,
        'object_operator_without_whitespace' => true,
        // 'php_unit_fqcn_annotation' => true,
        // 'phpdoc_align' => true,
        // 'phpdoc_annotation_without_dot' => true,
        // 'phpdoc_indent' => true,
        // 'phpdoc_inline_tag' => true,
        // 'phpdoc_no_access' => true,
        // 'phpdoc_no_alias_tag' => true,
        // 'phpdoc_no_empty_return' => true,
        // 'phpdoc_no_package' => true,
        // 'phpdoc_no_useless_inheritdoc' => true,
        // 'phpdoc_return_self_reference' => true,
        // 'phpdoc_scalar' => true,
        // 'phpdoc_separation' => true,
        // 'phpdoc_single_line_var_spacing' => true,
        // 'phpdoc_summary' => true,
        // 'phpdoc_to_comment' => true,
        // 'phpdoc_trim' => true,
        // 'phpdoc_types' => true,
        // 'phpdoc_var_without_name' => true,
        // 'increment_style' => true,
        // 'return_type_declaration' => true,
        // 'self_accessor' => true,
        // 'short_scalar_cast' => true,
        // 'single_blank_line_before_namespace' => true,
        // 'single_class_element_per_statement' => true,
        // 'space_after_semicolon' => true,
        // 'standardize_not_equals' => true,
        'ternary_operator_spaces' => true,
        // 'trailing_comma_in_multiline' => ['elements' => ['arrays']],
        'trim_array_spaces' => true,
        'unary_operator_spaces' => true,
        'whitespace_after_comma_in_array' => true,
        'space_after_semicolon' => true,
        // 'single_blank_line_at_eof' => false
    ])
    // ->setIndent("\t")
    ->setLineEnding("\n")
;

异常格式化结果

<?php
            $id = $_SESSION['id'];
$query = mysqli_query($conn, "SELECT * FROM users WHERE Id = {$id}");
while ($result = mysqli_fetch_assoc($query)) {
    $res_uname = $result['Username'];
    $res_email = $result['Email'];
    $res_age = $result['Age'];
    $res_id = $result['Id'];
}
echo <<<IDF
            <a href="edit.php?Id={$res_id}">Change profile</a>
            IDF;

?>

移除头部PHP块后的正常格式化结果

<?php
            $id = $_SESSION['id'];
            $query = mysqli_query($conn, "SELECT * FROM users WHERE Id = {$id}");
            while ($result = mysqli_fetch_assoc($query)) {
                $res_uname = $result['Username'];
                $res_email = $result['Email'];
                $res_age = $result['Age'];
                $res_id = $result['Id'];
            }
            echo <<<IDF
            <a href="edit.php?Id={$res_id}">Change profile</a>
            IDF;

            ?>

解决方法

  1. 检查头部PHP块的语法与缩进:确保开头的会话处理PHP块无语法错误,且缩进规则统一(不要混用空格和制表符)。PHP-CS-FIXER对文件开头代码块的缩进敏感,不规则缩进可能干扰后续嵌入HTML的PHP代码的格式化逻辑。

  2. 启用indentation_type规则:在配置文件的setRules中添加'indentation_type' => true,强制统一缩进类型,避免因混合缩进导致的识别错误。

  3. 添加php_tag_indent规则:启用该规则可确保PHP标签内外缩进一致,配置项为'php_tag_indent' => true,帮助工具正确识别嵌入HTML的PHP代码的缩进层级。

  4. 升级PHP-CS-FIXER版本:当前使用的^3.42版本可能存在HTML嵌入PHP场景的缩进处理bug,尝试升级到最新稳定版,此类问题大概率已被修复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 21:47:20