コード例 #1
0
ファイル: vbseocpform.php プロジェクト: holandacz/nb4
$sw_a = explode('|', VBSEO_PINGBACK_STOPWORDS);
foreach ($sw_a as $v) {
    echo "\n" . $v . "";
}
?>
</textarea></td>
</tr>
<tr class=altsecond>
<td>
<?php 
echo $alang['linkback_black_desc'];
?>
</td>
<td><textarea name="linkback_black" cols="45" rows="8" wrap="VIRTUAL"><?php 
vbseo_extra_inc('linkback');
$sw_a = vbseo_linkback_getbandomains(1);
if (!$sw_a) {
    $sw_a = explode('|', VBSEO_LINKBACK_BLACKLIST);
}
foreach ($sw_a as $v) {
    echo "\n" . $v . "";
}
?>
</textarea></td>
</tr>
<tr class=subheader>
<td colspan=2><a name="out_linkbacks" id="out_linkbacks"></a><?php 
echo $alang['out_linkbacks'];
?>
</td>
</tr>
コード例 #2
0
function vbseo_ping_proc($src_url, $dest_url, $pingtype = 0, $title = '', $snippet = '')
{
    global $vboptions, $vbseo_gcache;
    $ping_type_str = ($pingtype == 1 ? 'track' : ($pingtype == 2 ? 'ref' : 'ping')) . 'backs';
    $error_msg = array();
    $link_confirm = false;
    vbseo_get_options(false);
    vbseo_prepare_seo_replace();
    vbseo_get_forum_info();
    $db = vbseo_get_db();
    $matchfull = $vboptions['bburl2'];
    $postid = $postcount = $threadid = $page = 0;
    if ($GLOBALS['vbseo_linkback_cleanup']) {
        $src_url = preg_replace('#' . implode('|', $GLOBALS['vbseo_linkback_cleanup']) . '#', '', $src_url);
        $dest_url = preg_replace('#' . implode('|', $GLOBALS['vbseo_linkback_cleanup']) . '#', '', $dest_url);
    }
    $arr = $arr2 = $arr3 = array();
    list($dest_url_pre, $dest_url_post) = explode('#', $dest_url);
    if (strstr($dest_url_pre, $matchfull)) {
        $dest_url_pre = substr($dest_url_pre, strlen($matchfull) + 1);
        $dest_url_pre2 = preg_replace('#\\?.*#', '', $dest_url_pre);
        if (!($arrt = vbseo_check_url('VBSEO_URL_THREAD_PAGENUM', $dest_url_pre2))) {
            $arrt = vbseo_check_url('VBSEO_URL_THREAD', $dest_url_pre2);
        }
        if (isset($arrt['thread_id'])) {
            $threadid = $arrt['thread_id'];
        }
        if (($arr = vbseo_check_url('VBSEO_URL_POST_SHOW', $dest_url_pre2)) || preg_match('#showpost\\.' . VBSEO_VB_EXT . '\\?[^"]*?p(?:ostid)?=([0-9]+)[^/"]*$#i', $dest_url_pre, $arr2) || preg_match('#showthread\\.' . VBSEO_VB_EXT . '\\?[^"]*?p=([0-9]+)[^/"]*$#i', $dest_url_pre, $arr2) || $arrt && preg_match('#post(\\d+)#', $dest_url_post, $arr3)) {
            global $found_object_ids;
            $postid = $arr ? $arr['post_id'] : ($arr2 ? $arr2[1] : $arr3[1] + 0);
            if ($postid) {
                $found_object_ids['prepostthread_ids'] = array($postid);
                vbseo_get_post_thread_info($postid);
                $threadid = $vbseo_gcache['post'][$postid]['threadid'];
                $postcount = $vbseo_gcache['post'][$postid]['preposts'];
                $page = vbseo_thread_pagenum($postcount);
                $link_confirm = true;
            }
        } else {
            if (preg_match('#showthread\\.' . VBSEO_VB_EXT . '\\?[^"]*?t=([0-9]+)[^/"]*$#i', $dest_url_pre, $arr2) || $arrt && !$dest_url_post) {
                $threadid = $arr2 ? $arr2[1] : $arrt['thread_id'];
                $page = $arrt['thread_page'] ? $arrt['thread_page'] : 1;
                $link_confirm = true;
            }
        }
        vbseo_get_thread_info($threadid);
        $threadinfo = $vbseo_gcache['thread'][$threadid];
        $forumid = $threadinfo['forumid'];
        if ($threadinfo['visible'] != 1) {
            $link_confirm = false;
        }
    }
    $put_wait = false;
    if ($link_confirm) {
        $c_src_url = preg_replace('|.*?://(www\\.)?|', '', preg_replace('|#.*$|', '', $src_url));
        $pret = vbseo_http_query_full($src_url);
        $pcont = $pret['content'];
        $purl = parse_url($src_url);
        if (!$title) {
            $title = vbseo_get_page_title($pcont);
            $pcharset = vbseo_get_page_charset($pcont);
            $title = vbseo_convert_charset($title, $pcharset);
        }
        $qf = $db->vbseodb_query_first($q = "SELECT * FROM " . vbseo_tbl_prefix('vbseo_linkback') . "\nWHERE (t_src_url LIKE \"%" . addslashes($c_src_url) . "%\" \n" . (VBSEO_LINKBACK_IGNOREDUPE && $purl['host'] ? "OR (\nt_src_url LIKE \"%" . addslashes(str_replace('www.', '', $purl['host'])) . "/%\" \nAND t_title LIKE \"" . addslashes($title) . "\" \n)" : "") . "\n)\nAND t_threadid = \"{$threadid}\"");
        if (VBSEO_LINKBACK_REQUIRE_REF && $pingtype == 2 && $qf['t_wait']) {
            $pingtype = $qf['t_type'];
            $approve = $vbseo_gcache['forum'][$forumid]['vbseo_moderate_pingback'] ? 1 : 0;
            $db->vbseodb_query("UPDATE " . vbseo_tbl_prefix('vbseo_linkback') . "\nSET t_wait = 0, t_approve = " . $approve . "\nWHERE t_id = " . $qf['t_id']);
            vbseo_linkback_approve($qf['t_id']);
            vbseo_send_notification_pingback($threadid, $postid, $src_url, $qf['t_title'], $qf['t_text'], $approve, VBSEO_PINGBACK_NOTIFY);
        } else {
            if (VBSEO_LINKBACK_REQUIRE_REF && $pingtype == 0 && !$qf['t_id']) {
                $put_wait = true;
            }
        }
        if ($qf['t_id']) {
            $error_msg = array('code' => 48, 'msg' => 'The pingback has already been registered.');
        } else {
            if ($pingtype == 1 && VBSEO_TRACKBACK_IPCHECK) {
                $parsed_src_url = @parse_url($src_url);
                $hostip = gethostbyname($parsed_src_url['host']);
                if ($hostip != $_SERVER['REMOTE_ADDR']) {
                    $error_msg = array('code' => 47, 'msg' => 'The target server IP address doesn\'t match request host IP.');
                }
            }
            if (!$error_msg && $pingtype == 2) {
                $qf2 = $db->vbseodb_query_first($q = "SELECT count(*) as cnt FROM " . vbseo_tbl_prefix('vbseo_linkback') . "\nWHERE t_dest_url LIKE \"%" . addslashes($c_src_url) . "%\" AND\nt_threadid = \"{$threadid}\"");
                if ($qf2['cnt'] > 0) {
                    $error_msg = array('code' => 4, 'msg' => 'The outgoing linkback has already been registered, refback skipped.');
                }
            }
            if (!$error_msg && $pingtype != 1) {
                if (!preg_match('#<a[^>]*?' . preg_quote($dest_url, '#') . '.*?>#', $pcont, $lm) && !preg_match('#<a[^>]*?' . preg_quote($matchfull . '/showthread.php?t=' . $threadid, '#') . '.*?>#', $pcont, $lm)) {
                    $error_msg = array('code' => 17, 'msg' => 'The source URI does not contain a link to the target URI, and so cannot be used as a source.');
                } else {
                    $sn = '%vbseo_snippet%';
                    $snippet = preg_replace('#[ \\t]+#s', " ", preg_replace('#<.*?>#is', '', str_replace($lm[0], $sn, $pcont)));
                    $snippet = preg_replace('#(<\\/?(div|p).*?\\>)#m', "\n\$1", $snippet);
                    $snippet = preg_replace('#^\\s+#m', "", $snippet);
                    $snippet = preg_replace('#[\\r\\n]+#', "\n ", $snippet);
                    $halflen = (int) (VBSEO_SNIPPET_LENGTH / 2);
                    preg_match('#\\s(.{0,' . $halflen . '}' . preg_quote($sn) . '.{0,' . $halflen . '})\\b#', $snippet, $sm);
                    $snippet = trim(str_replace($sn, '', $sm[0]));
                }
            }
            if (VBSEO_PINGBACK_STOPWORDS && (preg_match('#' . VBSEO_PINGBACK_STOPWORDS . '#', $snippet) || preg_match('#' . VBSEO_PINGBACK_STOPWORDS . '#', $title) || preg_match('#' . VBSEO_PINGBACK_STOPWORDS . '#', $threadinfo['title']))) {
                $error_msg = array('code' => 1, 'msg' => 'The request has been rejected due to anti-SPAM policy.');
            } else {
                if ($purl['host']) {
                    $banned_domains = vbseo_linkback_getbandomains(1, false);
                    if ($banned_domains && preg_match('#(' . $banned_domains . ')#i', $purl['host'], $pm)) {
                        vbseo_linkback_banhit($pm[1], 1);
                        $error_msg = array('code' => 2, 'msg' => 'The request is originated from blacklisted domain.');
                    }
                }
            }
            if (!$error_msg) {
                if (VBSEO_MAX_TITLE_LENGTH) {
                    $title = vbseo_substr($title, 0, VBSEO_MAX_TITLE_LENGTH);
                }
                vbseo_store_pingback($src_url, $dest_url, $pingtype, $postid, $postcount, $threadid, $page, $title, $snippet, 1, $vbseo_gcache['forum'][$forumid]['vbseo_moderate' . $ping_type_str] ? 0 : 1, 0, $put_wait);
            }
        }
    } else {
        $error_msg = array('code' => 3, 'msg' => 'The link is not confirmed.');
    }
    return $error_msg;
}