2017-08-24 86 views
1

在自我託管的4.8.1版本的新安裝中,使用2017默認主題的網站我已使用API​​密鑰激活了Akismet插件。修改single.php有:爲什麼Akismet在密鑰驗證中返回失敗?

if (function_exists('akismet_verify_key')) : 
    $testing = akismet_verify_key(akismet_get_key(), site_url()); 
    echo $testing; 
endif; 

,但它總是回來failed。我已確認網站域名包含在Akismet儀表板中,但無論出於何種原因,在閱讀[密鑰驗證文檔] [1]並檢測到存在函數後,它將不會返回true

如果我複製PHP例如,改變功能的命名約定akismet_check

function akismet_check($key, $blog) { 
    $blog   = urlencode($blog); 
    $request  = 'key='. $key .'&blog='. $blog; 
    $host   = $http_host = 'rest.akismet.com'; 
    $path   = '/1.1/verify-key'; 
    $port   = 443; 
    $akismet_ua  = "WordPress/4.4.1 | Akismet/3.1.7"; 
    $content_length = strlen($request); 
    $http_request = "POST $path HTTP/1.0\r\n"; 
    $http_request .= "Host: $host\r\n"; 
    $http_request .= "Content-Type: application/x-www-form-urlencoded\r\n"; 
    $http_request .= "Content-Length: {$content_length}\r\n"; 
    $http_request .= "User-Agent: {$akismet_ua}\r\n"; 
    $http_request .= "\r\n"; 
    $http_request .= $request; 
    $response  = ''; 
    if (false != ($fs = @fsockopen('ssl://' . $http_host, $port, $errno, $errstr, 10))) : 
     fwrite($fs, $http_request); 
     while (!feof($fs)) 
      $response .= fgets($fs, 1160); // One TCP-IP packet 
      fclose($fs); 
      $response = explode("\r\n\r\n", $response, 2); 
    endif; 
    if ('valid' == $response[1]) : 
     return true; 
    else : 
     return false; 
    endif; 
} 

,並把它傳遞:

echo 'Akismet shows ' . $result = akismet_check(akismet_get_key(), site_url()); 

我不明白,如果功能已經存在和我可以檢測到爲什麼我會失敗。 Akismet是否具有密鑰驗證的替代方案,因此如果akismet_verify_key不起作用或者我做錯了什麼,我不需要重新編寫整個函數來執行似乎已經存在的內容?

回答

0

akismet_verify_key()的第二個參數不是您的站點URL,而是您要連接的Akismet API服務器的IP。它在Akismet_Admin::check_server_ip_connectivity()中用於幫助站點在無法始終連接到API時進行故障排除。

將您的呼叫改爲$testing = akismet_verify_key(akismet_get_key());應該可以工作。

附註:爲什麼要驗證主題中的Akismet API密鑰?或者這只是一個簡單的例子來展示這個問題?

相關問題