เล่นง่ายๆ กับเช็คว่า ip, e-email หรือ username ที่สมัครสมาชิกเข้ามาเป็น spammer หรือไม่?

ช่วงนี้เจอเรื่องปวดหัวเกี่ยวกับ spam ใน forum เยอะมาก ตอนนี้เลยใช้วิธีง่ายๆ ไปก่อนผ่าน http://www.stopforumspam.com ก็กันได้ในระดับนึง แต่ว่ามี API Limit อาจจะต้องหาวิธีอื่นๆ แก้ไขเฉพาะหน้ากันต่อไป คิดว่าน่าจะพอไหวอยู่

<?php
function is_forumspam_objectsIntoArray($arrObjData, $arrSkipIndices = array()) {
    $arrData = array();

    // if input is object, convert into array
    if (is_object($arrObjData)) {
        $arrObjData = get_object_vars($arrObjData);
    }

    if (is_array($arrObjData)) {
        foreach ($arrObjData as $index => $value) {
            if (is_object($value) || is_array($value)) {
                $value = is_forumspam_objectsIntoArray($value, $arrSkipIndices);
            }
            if (in_array($index, $arrSkipIndices)) {
                continue;
            }
            $arrData[$index] = $value;
        }
    }
    return $arrData;
}

/**
http://www.stopforumspam.com/api?ip=91.186.18.61
http://www.stopforumspam.com/[email protected]
http://www.stopforumspam.com/api?username=MariFoogwoogy
**/
function is_forumspam($var) {

    $var['email'] = urlencode($var['email']);

    $q = 'username='.$var['username'].'&email='.$var['email'].'&ip='.$var['ip'];

    $xmlUrl = "http://www.stopforumspam.com/api?".$q."&f=xmldom";

    $xmlStr = file_get_contents($xmlUrl);

    $xmlObj = simplexml_load_string($xmlStr);

    $arrXml = is_forumspam_objectsIntoArray($xmlObj);

    if($arrXml['ip']['appears'] == 1)
    return true;
    if($arrXml['email']['appears'] == 1)
    return true;
    if($arrXml['username']['appears'] == 1)
    return true;

    return false;
}

อ้างอิงจาก http://www.stopforumspam.com