Come verificare il meccanismo di trasporto corretto durante l'attivazione di un plugin?

6 mag 2012, 16:28:43
Visualizzazioni: 911
Voti: 1

Per un plugin che comunica con servizi esterni, ho sentito che dovremmo usare wp_remote_post e wp_remote_get invece della libreria Curl di PHP.

Ok, ma esiste un modo rapido e corretto per verificare, durante l'esecuzione del plugin, che il blog/host PHP abbia il meccanismo di trasporto corretto installato? Potrei tentare un POST di test, ma pensavo che WP potesse avere un meccanismo migliore e più veloce per verificare? Fare quanto segue non è accettabile:

if (!function_exists('curl_exec')) {
    wp_die('L\'API CURL non è installata con PHP. Non puoi usare questo plugin senza di essa. Chiedi al tuo provider di hosting web di installarla.');
}
0
Tutte le risposte alla domanda 1
3

Non farei morire il plugin in quel modo. Basta verificare la presenza di cURL ogni volta che devi effettuare una chiamata o ricadere su wp_remote_(post|get) (ad esempio, scrivere una funzione wrapper che si occupa del controllo e invia i dati/header che desideri).

MA, se davvero vuoi disabilitare il plugin se cURL non è installato, puoi usare un hook di attivazione per verificare la presenza della funzione curl_exec e disattivare il plugin in caso contrario.

<?php
register_activation_hook(__FILE__, 'wpse51312_activation');
function wpse51312_activation()
{
    if(!function_exists('curl_exec'))
    {
        // Disattiva il plugin
        deactivate_plugins(__FILE__);

        // Mostra la pagina di errore, forse non dovrebbe accadere?
        wp_die(
            __('È necessario abilitare il supporto cURL per utilizzare INSERT PLUGIN NAME'),
            __('Errore')
        );
    }
}

Per quel che vale, credo che l'API HTTP tenti di utilizzare cURL se disponibile.

6 mag 2012 17:06:14
Commenti

Sì, in questo caso ho scoperto che die() è meglio di wp_die() se eseguito durante l'attivazione del plugin. Comunque, wp_remote_post non utilizza sempre Curl. Su alcuni host, curl_exec() è disabilitato, mentre file_get_contents() o fopen() con un host remoto potrebbero essere abilitati.

Volomike Volomike
6 mag 2012 19:44:43

Tuttavia, la vera domanda è che voglio solo un modo rapido per testare la possibilità di fallimento con wp_remote_post() perché nessuno dei meccanismi di trasporto potrebbe essere abilitato. Verificare semplicemente le funzionalità Curl non sarà sufficiente.

Volomike Volomike
6 mag 2012 19:45:40

L'unico modo per vedere se ciò accade è effettuando una richiesta. wp_remote_post restituirà un oggetto WP_Error se fallisce.

chrisguitarguy chrisguitarguy
6 mag 2012 20:17:14