PHP[Img]BBCode,但仅当图像是真实图像时才显示


PHP [Img] BBCode, but display only if the image is a real image?

在我的网站上,我在论坛上启用了BBCode,然而,我的一些用户一直在利用这一点,并将图片的来源打造成一个给用户"尊重点"的页面。我想知道是否有一种方法可以检查[img]标签中的URL是否是真实的图像,而不仅仅是网页。我认为"getimagesize"函数在这里可能很有用,但我找不到一种正确的方法来检查它是否是真实的图像,并且之后能够用正则表达式解析它。我宁愿不只是检查文件扩展名,因为有些图片在我的网站上没有文件扩展名。对此有什么见解吗?

getimagesize()是一种方法。它确实支持TIFF以及几乎所有流行的网络图像格式。我能想到的唯一例外是SVG。

除此之外,您还应该设置一个黑名单,以防止访问某些页面。

<?php
function validURL($url){
    $bad = array("respect.php","website.com","etc");
    /* Check each array element to see if it is in the URL */
    foreach($bad as $fail){
        if(strpos($url,$fail) !== FALSE){
            return false;
        }
    }
    return true;
}
if(validURL($url) && getimagesize($url) !== FALSE){
    // Valid image
} else {
    // Strip url
}
?>

这里的关键是,如果validURL()返回false,则if语句将变短。这将阻止getimagesize()访问任何恶意URL。