我正在使用有关图像上传的扩展程序,该扩展程序使用下面提到的功能,这是一个常用功能,通常用于获取以字节为单位的max_upload_size,但我想知道它是如何工作的?
例如,如果$ val = 20M,那么它将如何乘以20M * 1024并获得正确的字节输出。
function get_config_bytes($val) {
$val = trim($val);
$last = strtolower($val[strlen($val)-1]);
switch($last) {
case 'g':
$val *= 1024;
case 'm':
$val *= 1024;
case 'k':
$val *= 1024;
}
return $this->fix_integer_overflow($val);
}
我对此感到很好奇,因为前一段时间,当我使用此函数时,它正在生成一个通知,即非整数乘以整数,但现在可以正常工作了。我不知道发生了什么事。谢谢
答案 0 :(得分:1)
这个问题有两个部分。
如果您通过filtered_list = [w for w in list1 if w in list2]
,则20M
将与switch/case
相匹配。由于case 'm':
块中缺少case
块,因此将执行匹配的break;
块,然后执行所有其他case
块。这将导致case
Here's a demo showing how the switch/case works in this context
以上函数将在PHP7.1 +上引发通知。以前,如果您有一个像20 * 1024 (from the m block) * 1024 (from the k-block)
这样的字符串并将其用作数字(对其执行数学运算),它将被无提示地转换为数字20M
。
从PHP 7.1开始,它仍然可以工作,但是会抛出通知“遇到了格式错误的数值” ,除非您已关闭通知的错误报告。
这是不会发出任何通知的更新版本:
20
我敢肯定有更有效的方法可以做到这一点,但这可以通过任一方式解决问题。