PHP超全局变量、php.ini指令严格区分大小写,错写如$_session或File_uploads会导致NULL或配置失效;函数名不区分大小写但埋下维护隐患;验证码等需用strcasecmp()忽略大小写比较。

变量名大小写不一致导致值为 NULL
在 DW(Dreamweaver)中写 PHP 时,常见错误是把 $_SESSION 写成 $_session、$_POST 写成 $_post,结果 var_dump($_session['uid']) 输出 NULL,但调试半天找不到原因——因为 PHP 的超全局变量**严格区分大小写**,错一个字母就完全不是同一个变量。
-
$_SESSION、$_POST、$_GET、$GLOBALS等全部强制大小写敏感,不存在“自动纠错” - DW 不做语法校验,只当普通文本高亮,所以拼写错误不会报红或提示
- 典型现象:登录后
$_SESSION['admin']赋了值,但在其他页面用$_session['admin']读取 → 返回NULL,权限判断直接失效
函数/类名大小写混用却不报错,反而埋雷
DW 里把 mysqli_connect() 写成 Mysqli_Connect() 或 MYSQLI_CONNECT(),PHP 不会报错,照样执行成功——因为 PHP 的函数名、方法名、类名**不区分大小写**。但这恰恰是隐患源头:
- 团队协作时,有人定义
function getUserInfo(),别人调用写成getuserinfo(),看起来能跑,但可读性和维护性归零 - 某些 IDE(如 PhpStorm)或静态分析工具(PHPStan)会警告大小写不一致,DW 完全没这能力
- 若未来迁移到严格模式(如启用
declare(strict_types=1)或使用反射动态调用),大小写不统一可能引发不可预期行为
验证码/表单提交忽略大小写的正确做法
用户输 "AbC123",服务端存的是 "abc123",直接 == 或 === 比较必然失败。DW 里手写逻辑时别靠肉眼判断,要用标准函数:
- 统一转小写比较:
if (strtolower($_POST['captcha']) === strtolower($_SESSION['captcha_code'])) - 更简洁安全的写法:
if (strcasecmp($_POST['captcha'], $_SESSION['captcha_code']) === 0)—— 无需预处理,天然忽略大小写,且二进制安全 - 注意:别用
==做字符串比较,它会触发类型转换,比如"0" == false居然为true,极难排查
php.ini 配置项大小写写错却无提示
DW 编辑 php.ini 时,把 file_uploads = 1 写成 File_uploads = 1 或 FILE_UPLOADS = 1,PHP 直接忽略该行配置,且不报错、不警告——因为所有 php.ini 指令**严格区分大小写**。
立即学习“PHP免费学习笔记(深入)”;
- 常见翻车点:
short_open_tag、display_errors、upload_max_filesize等,首字母大写或下划线位置错即失效 - 验证方式:在 PHP 脚本中运行
var_dump(ini_get('file_uploads'));,看输出是否符合预期,而不是只信配置文件写了什么 - DW 没有 php.ini 语法支持,建议用 VS Code + INI 插件,或直接命令行执行
php --ini和php -m辅助确认
最麻烦的不是报错,而是“看似正常却逻辑错”——比如 session 变量读不到、配置没生效、验证码永远不通过。这些都不是 DW 的问题,而是 PHP 本身规则在安静地起作用。写的时候多看一眼大小写,比事后花两小时翻日志强得多。











