1

我正在使用 PHP 5.3 和 Curl。

我想让我的 curl 调用更加灵活,这样一个函数就可以处理我所有的调用。我遇到的问题是 curl 选项。

它使用 CURLOPT_POST 之类的值来表示 LONG 值。

为了使我的功能更灵活,我想使用默认值设置这些选项,并根据传递的数组更改它们。

前任;

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 值?

4

3 回答 3

3

在我看来,您需要的是将字符串转换为 PHP 常量的函数。您可以使用常量函数。您的代码最终将如下所示:

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)
}
于 2015-04-13T14:07:39.013 回答
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);

?>
于 2013-09-24T04:24:37.133 回答
0
function doCurl($options) {
   $defaults = array(CURLOPT_POST => true, CURLOPT_HEADER => false);
   curl_setopt_array($curl, !empty($options) ? ($options + $defaults) : $defaults);
}

除了 $curl 变量在函数范围内未定义,但您可能知道如何处理它。

如果要将字符串转换为常量值,请使用以下内容:

function get_curlopt_from_string($str) {
    if (preg_match('/^CURLOPT_/', $key) && defined($str)) {
        return eval('return $str;');
    }
    return $str;
}
于 2013-09-24T04:18:58.703 回答