ช่วงนี้เจอเรื่องปวดหัวเกี่ยวกับ 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