记录一次中文逗号的神奇 bug
之前写了这样的代码
$result = $uploader->save($request->avatar, 'avatars', $user->id,362)
程序不报任何错误,一切功能正常运行,就是后面的 362 参数无论如何都不生效,之后在 save方法里写了个 1/0; 通过异常堆栈信息来查看实际的参数传入值
Arguments
UploadedFile {#547 ▶}
"avatars"
null
$user->id竟然是null?362 竟然完全没传进去。
后来才发现$user->id,362使用了中文逗号,一般情况下使用中文逗号都会报错的,但这里似乎是符合语法规范的,$user->id,362相当于$user["id,362"] 然后我尝试写了下面的代码
$user->id,362= 1;
dd($user['id,362']);
还有下面的
$user->id,(。,?)362= 1;
dd($user['id,(。,?)362']);
结果都正常返回了1,往后应该小心$aaa->bbb代码后写入中文符号,对程序来说是完全符合语法的,甚至都完全不会报错,上面的代码一切都正常运行,如果我没去看上传图片的尺寸的话,我根本发现不了我写了一个中文逗号!
关于 LearnKu
$user->后可以接任意字符,包括PHP保留字,中文字符,会导致出现一个上传图片名丢失前缀的BUG
解决办法:
在
\App\Handlers\ImageUploadHandler::save中 增加自动生成的前缀变量$file_prefix是否为null的判断,如下:@hustnzj 主要是上诉情况中完全没有任何语法错误的提示,也许换一个严格的代码校验规范就提示错误了