为什么这种模式在preg_match中不起作用

时间:2013-07-19 14:49:08

标签: preg-match

我在函数中使用preg_match来阻止提交图片扩展名! 现在我想阻止“”字符! 谁能告诉我怎么做到这一点?

function is_valid($url) {
    $res = 1;
    if (isset($url['path'])) {
        if (preg_match('/\b.jpg\b/i', $url['path'])) { $res = 0; }
        if (preg_match('/\b.gif\b/i', $url['path'])) { $res = 0; }
        if (preg_match('/\b.png\b/i', $url['path'])) { $res = 0; }
        if (preg_match('/\b.bmp\b/i', $url['path'])) { $res = 0; }
    }
    return $res;
}

我试过这个,但它不起作用:

if (strpos('~', $url['path'])) {
    $res = 0;
}

1 个答案:

答案 0 :(得分:0)

首先,您应该真正阅读有关正则表达式的内容!如果您已完成此操作,请阅读manual获取的phps strpos

您可以尝试preg_match('/[^~]+\.(png|jpg|gif|bmp)/i', $url['path'])或者如果您想坚持自己的版本,

if (strpos($url['path'], '~') !== FALSE) {
    $res = 0;
}

但无论如何,你的支票不会很安全。示例:有人将php文件重命名为png并上传,如果你的apache上激活了mime_magic,代码将被执行。因此检查文件的mimetype更安全。请参阅How do I find the mime-type of a file with php?作为示例。接受的答案提到了(现在)已弃用的函数,但如果你有PHP 5.3 +

,你可以使用http://de3.php.net/manual/en/function.finfo-file.php