PHP5.4升级至7.4:ereg_replace转preg_replace后文件上传异常
解决PHP7.4中preg_replace替换ereg_replace后文件扩展名匹配失败问题
问题原因
你在替换ereg_replace为preg_replace时,给正则表达式添加了分隔符,但分隔符前后的空格是多余的,导致正则无法正确匹配文件名格式。比如对于test.jpg这类正常文件名,正则/ ^.+\\.([^.]+)$ /要求字符串开头必须有空格、结尾也必须有空格,显然不符合实际文件名结构,因此提取出的扩展名$ext不正确,最终触发了扩展名不匹配的警告。
修复方案
方案1:修正正则表达式
去掉分隔符前后的空格,还原正确的正则匹配逻辑:
$ext = preg_replace("/^.+\\.([^.]+)$/", "\\1", $file2);
方案2:使用更可靠的内置函数
推荐直接使用PHP专门用于解析文件路径的pathinfo函数,比正则表达式更稳定且可读性更高:
$ext = pathinfo($file2, PATHINFO_EXTENSION);
内容的提问来源于stack exchange,提问作者n00b007
相关产品推荐
相关产品推荐

