2013-09-24 2 views
1

Я работаю с PHP 5.3 и Curl.Как получить параметр curl со строкой

Я хочу, чтобы мои поворотные звонки были более гибкими, поэтому одна функция может обрабатывать все мои вызовы. Проблема, с которой я столкнулась, - это вариант завитка.

Он использует значения, такие как CURLOPT_POST, для представления значения LONG.

Чтобы сделать мою функцию более гибкой, я хочу установить эти параметры по умолчанию и изменить их на основе переданного массива.

ex;

function doCurl($options){ 
    $defaults = array('CURLOPT_POST' => true, 'CURLOPT_HEADER' => false); 
    foreach($options AS $k=>$v) $defaults[$k] = $v; 
    foreach($defaults AS $opt_k=>$v) curl_setopt($curl, $opt_k, $v) 

}

Итак, как я могу справиться с $ opt_k так что он может получить LONG значение исходной переменной?

+0

Спасибо, однако, согласно документам, вы должны отправить «Массив, определяющий, какие параметры установить и их значения. Ключи должны быть действительными константами curl_setopt() или их целыми эквивалентами. '. Итак, та же проблема. Мне нужно преобразовать строковые ключи в «целочисленные эквиваленты». –

+0

Вы пытались обернуть это в классе, например '$ curl = new Curl ($ options); echo $ curl-> exec() '? – Yang

ответ

0
function doCurl($options) { 
    $defaults = array(CURLOPT_POST => true, CURLOPT_HEADER => false); 
    curl_setopt_array($curl, !empty($options) ? ($options + $defaults) : $defaults); 
} 

за то, что $ локон переменная не определен в области видимости функции, но вы, вероятно, знаете, как справиться с этим исключением.

Если вы хотите, чтобы преобразовать строку в постоянном использовании значение что-то вроде:

function get_curlopt_from_string($str) { 
    if (preg_match('/^CURLOPT_/', $key) && defined($str)) { 
     return eval('return $str;'); 
    } 
    return $str; 
} 
+0

Спасибо. Но ваш первый ответ отправил меня в правильном направлении для решения моей проблемы. Посмотрев на функцию curl_setopt_array(), мне пришло в голову, что я могу просто передать массив массивом опций с правильными «целыми эквивалентами». –

+0

oh..but в вашем первом ответе у вас были $ options + $ defaults, но это привело к ошибке. В то время $ options было пустым. Является ли это правильным способом обработки 2 массивов, чтобы значения по умолчанию были перезаписаны значениями, установленными в $ options? –

+0

curl_setopt_array ($ curl,! Empty ($ options)? ($ Options + $ defaults): $ defaults); – Marina

0

Попробуйте этот пример поможет вам решить вашу проблему

<?php 

$postdata = http_build_query(
    array(
     'var1' => 'some content', 
     'var2' => 'doh' 
    ) 
); 

$opts = array('http' => 
    array(
     'method' => 'POST', 
     'header' => 'Content-type: application/x-www-form-urlencoded', 
     'content' => $postdata 
    ) 
); 

$context = stream_context_create($opts); 

$result = file_get_contents('http://example.com/submit.php', false, $context); 

?> 
+0

Спасибо. Но я действительно не понимаю, что вы делаете. Похоже, вы могли встать с середины какого-то текста. –

3

Мне кажется, что то, что вам нужно это функция, которая преобразует строки в константы PHP. Вы можете использовать constant function. Ваш код будет выглядеть следующим образом:

function doCurl($options){ 
    $defaults = array('CURLOPT_POST' => true, 'CURLOPT_HEADER' => false); 
    foreach($options AS $k=>$v) $defaults[$k] = $v; 
    foreach($defaults AS $opt_k=>$v) curl_setopt($curl, constant($opt_k), $v) 
} 
+0

Это так просто и реактивно так полезно. Это супер, это не используется чаще, когда речь заходит о таких флагах в php. – DocRattie

Смежные вопросы