我遇到了麻烦我无法修复此错误。我正在使用此上传脚本来检查mime类型。
警告:preg_match():未知修饰符' p'
警告:preg_match():未知修饰符' g'
警告:preg_match():未知修饰符'('
if (preg_match('/^image/p?jpeg$/i', $_FILES['upload']['type']) or
preg_match('/^image/gif$/i', $_FILES['upload']['type']) or
preg_match('/^image/(x-)?png$/i', $_FILES['upload']['type']))
{
// Handle the file...
}
else
{
$error = 'Please submit a JPEG, GIF, or PNG image file.';
include $_SERVER['DOCUMENT_ROOT'] . '/includes/error.html.php';
exit();
}
提前谢谢
答案 0 :(得分:3)
第二个/
(结束delimiter)后的所有内容都被视为flags。使用其他分隔符,例如~
~^image/p?jpeg$~i
或者匹配模式内的分隔符文字使用反斜杠转义它:
/^image\/p?jpeg$/i
选择分隔符非常舒服,在模式中不需要>不用担心逃跑。经常使用的分隔符为/
,~
,#
,@
或甚至括号样式分隔符,例如(
模式)
。
旁注
您可以使用alternation将所有三个preg_match
合并为一个{<1}}:
if(preg_match('~^image/(?:gif|p?jpeg|(?:x-)?png)$~i', $_FILES['upload']['type'])) { ... }
(?:
启动非捕获group。适合测试:regex101.com