使用PHP合并并压缩CSS文件时输出空白,缺少什么必要配置?
问题原因及修复方案
核心错误点
- 函数定义顺序错误:你在调用
ob_start("compress")的时候,compress函数还没有被定义,PHP会抛出致命错误,若关闭了错误显示就会直接返回空白页。必须把函数定义放在ob_start调用之前。 - 正则表达式语法错误:用来匹配CSS注释的正则没有对特殊字符转义,执行时会报正则解析错误,直接中断脚本运行。
- 转义字符写法错误:替换换行、制表符的参数里漏掉了反斜杠,
"rn"应写为"\r\n",否则无法正确匹配对应的空白字符(这个问题不会直接导致空白,但会让压缩功能失效)。 - 文件路径不匹配:
include引入的三个CSS文件如果和当前PHP脚本不在同一目录,或者权限不足无法读取,会抛出警告,也可能导致输出为空。
修复后的完整代码
<?php // 先定义压缩函数 function compress( $minify ) { /* 移除CSS注释:修正后的正则表达式 */ $minify = preg_replace( '!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $minify ); /* 移除制表符、空格、换行等:修正转义字符 */ $minify = str_replace( array("\r\n", "\r", "\n", "\t", ' ', ' ', ' '), '', $minify ); return $minify; } header('Content-type: text/css'); // 函数定义后再启动输出缓冲 ob_start("compress"); /* css文件引入:用__DIR__定位当前脚本目录,避免相对路径错误 */ include(__DIR__ . '/reset.css'); include(__DIR__ . '/application.css'); include(__DIR__ . '/responsive.css'); ob_end_flush(); ?>
额外排查项
如果修改后还是空白,可以先临时开启错误显示定位问题,在代码最顶部加入:
error_reporting(E_ALL); ini_set('display_errors', 1);
确认无错误后再移除错误显示代码即可。
内容的提问来源于stack exchange,提问作者santa
相关产品推荐
相关产品推荐

