PHP if条件判断引入CSS样式表时toast功能异常问题
问题原因与修复方案
你遇到的问题90%以上是**$_SERVER['PHP_SELF']的实际值和你写死的判断条件不匹配**,所谓的「样式表正常输出加载」基本是浏览器缓存给你的错觉,剩下的小概率是资源引入顺序/判断范围写错导致的,按下面步骤排查就行:
第一步:先验证判断条件是否真的生效
别靠网络请求的缓存状态判断资源有没有真的被PHP输出,先做两个校验:
- 在你写这段条件判断的位置临时加一行调试代码:
<?php var_dump($_SERVER['PHP_SELF']); ?>,刷新首页看实际输出的值,绝大多数场景下这个值根本不是/index:- 如果是默认没做重写的PHP项目,首页值通常是
/index.php - 如果做了伪静态、入口文件在public目录下,值可能是
/public/index.php - 如果访问带尾斜杠,值可能是
/index/
条件不匹配的话,PHP根本不会输出这个link标签,你之前看到css加载是因为之前直接引入时浏览器把css缓存到了本地,清缓存强刷(Ctrl+F5)之后就会发现css根本没加载,toast拿不到样式自然无法正常显示。
- 如果是默认没做重写的PHP项目,首页值通常是
- 打开浏览器开发者工具的「元素(Elements)」面板,直接在
<head>标签里找toastr的css链接标签,找不到就说明判断条件完全没命中。
第二步:修复判断逻辑
$_SERVER['PHP_SELF']的值受服务器配置、路由重写规则影响很大,不适合用来做路径判断,换成基于请求URI的规整判断更稳妥,代码如下:
<?php // 解析当前请求路径,去掉查询参数、末尾斜杠做归一化处理 $currentPath = rtrim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/'); // 首页路径兼容空、/index两种情况 if($currentPath === '' || $currentPath === '/index'){ ?> <link rel="stylesheet" type="text/css" href="app-assets/vendors/css/extensions/toastr.min.css"> <!-- 注意:toastr依赖的jQuery、toastr自身的JS文件如果之前也写在判断外,要确认这里不要漏引入,且引入顺序正确 --> <?php } ?>
第三步:剩余小概率问题排查
如果改完判断逻辑确认link标签已经正常输出、css也返回200(非缓存状态)还是不生效,查两个点:
- 看浏览器控制台(Console)有没有JS报错:toast功能需要对应JS文件支持,如果你不小心把toastr的JS引入、或者toast初始化调用的代码也包在了错误的判断逻辑里,就算CSS加载完成JS也不会执行,功能自然失效。
- 检查资源引入顺序:toastr的CSS要放在所有自定义弹窗样式之前引入,toastr的JS要放在jQuery引入之后、你自己调用
toastr.success()这类方法的代码之前引入,条件判断很容易打乱原本的资源加载顺序,导致样式被覆盖、或者JS执行时找不到依赖对象。
内容的提问来源于stack exchange,提问作者MK Smith
相关产品推荐
相关产品推荐

