2017-08-24 2 views
1

Lors d'une nouvelle installation auto-hébergée avec la version 4.8.1, site avec le thème par défaut 2017, j'ai activé le plugin Akismet avec la clé API. Modifié single.php avec:Pourquoi le retour d'Akismet a-t-il échoué lors de la vérification des clés?

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

mais il revient toujours failed. Je me suis assuré que le nom de domaine du site est inclus dans le tableau de bord Akismet mais pour une raison quelconque après avoir lu la [documentation de vérification de clé] [1] et la détection de la fonction existait true.

Si je copie l'exemple de PHP et de modifier la convention de nommage de la fonction à 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; 
} 

et de le transmettre:

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

Je ne comprends pas si la fonction est déjà présente et Je peux le détecter pourquoi je reçois un échec. Est-ce que Akismet a une alternative à la vérification des clés, donc je n'ai pas à réécrire une fonction entière pour faire ce qui semble déjà exister si akismet_verify_key ne fonctionne pas ou est-ce que je fais quelque chose de mal?

Répondre

0

Le deuxième paramètre à akismet_verify_key() n'est pas l'URL de votre site, c'est l'adresse IP du serveur API Akismet auquel vous souhaitez vous connecter. Il est utilisé dans Akismet_Admin::check_server_ip_connectivity() pour aider les sites à résoudre les problèmes lorsqu'ils ne peuvent pas toujours se connecter à l'API. Changer votre appel à $testing = akismet_verify_key(akismet_get_key()); devrait fonctionner. Remarque: pourquoi vérifiez-vous la clé API Akismet à l'intérieur du thème? Ou était-ce juste un exemple simplifié pour mettre en évidence le problème?