Конвертировать SimpleXML в cURL - PullRequest
3 голосов
/ 08 июля 2011

Мой хост отключил allow_url_fopen, и он не включил его для меня. Мне нужен следующий код для работы с плагином WordPress. Может кто-нибудь подсказать, как конвертировать этот код в cURL?

else:
    $results = $wpdb->get_results($wpdb->prepare("SELECT mcd_id FROM mcd_cl_coupons WHERE coupon_list_id = %d AND created_by = 'mcd'", array($coupon_list_id)));
    $mcd_id = ''; foreach($results as $row): $mcd_id .= '-' . $row->mcd_id; endforeach; $mcd_id = substr($mcd_id, 1);
    if($mcd_id): 
        $options = get_option('mcd_list');
        $token = $options['api_key'];
        $xml_file = 'http://www.mycoupondatabase.com/api/coupons-xml.php?token=' . $token . '&id_string=' . $mcd_id;
        $xml = simplexml_load_file($xml_file);
    endif;

Ответы [ 2 ]

1 голос
/ 08 июля 2011

Wordpress имеет встроенную функцию для запроса файла с именем wp_remote_get:

    $xml_file = 'http://www.mycoupondatabase.com/api/coupons-xml.php?token=' . $token . '&id_string=' . $mcd_id;
    $xml_data = wp_remote_get($xml_file);
    $xml = simplexml_load_string($xml_data['body']);

Эта функция внутренне использует HTTP-абстракцию Wordpress, которая обычно определяетЛучший способ сделать HTTP-запросы для системы, на которой он работает.Поэтому он будет использовать cUrl, если все остальное ограничено на вашем хосте.

0 голосов
/ 08 июля 2011

Полагаю, вы просто хотите иметь возможность загружать файл с внешнего внешнего URL-адреса с помощью cURL.У меня есть эта функция, которую я иногда использую для простых вещей, таких как эта - не стесняйтесь изменять и повторно использовать ее.

define('SLEEP_TIME', 0);
function get_page_by_curl($searchUrl, $post=false, $postParams="")
{
    print " " . $searchUrl;
    global $errMsg;
    $userAgent = "Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.0.2) Gecko/20121223 Ubuntu/9.25 (jaunty) Firefox/3.5 Robot";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
    curl_setopt($ch, CURLOPT_URL, $searchUrl);
    curl_setopt($ch, CURLOPT_FAILONERROR, true);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_AUTOREFERER, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
    curl_setopt($ch, CURLOPT_NOPROGRESS, true);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
    if($post)
    {
         curl_setopt ($ch, CURLOPT_POST, true);
         curl_setopt ($ch, CURLOPT_POSTFIELDS, $postParams);
    }
    $htmlPage = false;
    do
    {
        $htmlPage = curl_exec($ch);
        $errno = curl_errno($ch);
        if($errno == 28)
        {
            print ".";
            flush();
            sleep(SLEEP_TIME);
        }
        elseif($errno == 7)
        {
            print "*";
            flush();
            sleep(SLEEP_TIME);
        }
        elseif($errno == 6)
        {
            print "+";
            flush();
            sleep(SLEEP_TIME);
        }
        elseif($errno != 0)
        {
            $errMsg = $errno . ": " . curl_error($ch);
        }
    }
    while(!$htmlPage && ($errno == 28 || $errno == 6 || $errno == 7));

    return $htmlPage;
}

Затем из вашего кода измените строку

$xml = simplexml_load_file($xml_file);

до

$sml = get_page_by_curl($xml_file);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...