При активации плагина: как проверить наличие правильного транспортного механизма?

6 мая 2012 г., 16:28:43
Просмотры: 911
Голосов: 1

Для плагина, который взаимодействует с внешними сервисами, рекомендуется использовать wp_remote_post и wp_remote_get вместо библиотеки Curl в PHP.

Хорошо, но существует ли быстрый и правильный способ проверить, установлен ли в PHP/хостинге блога необходимый транспортный механизм при активации плагина? Конечно, можно попробовать выполнить тестовый POST-запрос, но возможно в WordPress есть более эффективный и быстрый способ проверки? Следующий вариант неприемлем:

if (!function_exists('curl_exec')) {
    wp_die('API CURL не установлен в PHP. Вы не можете использовать этот плагин без него. Обратитесь к вашему хостинг-провайдеру для его установки.');
}
0
Все ответы на вопрос 1
3

Я бы не стал так просто отключать плагин. Просто проверяйте наличие cURL каждый раз, когда вам нужно сделать запрос, или используйте резервный вариант wp_remote_(post|get) (например, напишите функцию-обертку, которая будет выполнять проверку и отправлять нужные данные/заголовки).

НО, если вы действительно хотите отключить плагин, если cURL не установлен, вы можете использовать хук активации для проверки функции curl_exec и деактивации плагина, если она недоступна.

<?php
register_activation_hook(__FILE__, 'wpse51312_activation');
function wpse51312_activation()
{
    if(!function_exists('curl_exec'))
    {
        // Деактивировать плагин
        deactivate_plugins(__FILE__);

        // Показать страницу ошибки, возможно, этого не должно происходить?
        wp_die(
            __('Для использования INSERT PLUGIN NAME необходимо включить поддержку cURL'),
            __('Ошибка')
        );
    }
}

Насколько я знаю, HTTP API пытается использовать cURL, если он доступен.

6 мая 2012 г. 17:06:14
Комментарии

Да, в этом случае я обнаружил, что die() лучше, чем wp_die(), если используется при активации плагина. Но в любом случае, wp_remote_post не всегда использует Curl. На некоторых хостингах curl_exec() отключен, но file_get_contents() или fopen() с удаленным хостом могут быть доступны.

Volomike Volomike
6 мая 2012 г. 19:44:43

Однако реальный вопрос в том, что мне просто нужен быстрый способ проверить возможность сбоя с wp_remote_post(), потому что ни один из механизмов передачи может быть не включен. Простая проверка на наличие Curl не подойдет.

Volomike Volomike
6 мая 2012 г. 19:45:40

Единственный способ узнать, произойдет ли это — сделать запрос. wp_remote_post вернет объект WP_Error, если произойдет сбой.

chrisguitarguy chrisguitarguy
6 мая 2012 г. 20:17:14