【问题标题】:Warning: http_build_query(): Parameter 1 expected to be Array or Object whm api警告:http_build_query():参数 1 应为数组或对象 whm api
【发布时间】:2018-12-29 17:00:12
【问题描述】:

我的编码 whm 插件有警告

警告:http_build_query():参数 1 应为数组或对象。第 50 行 /module_functions.php 中给出的值不正确

第 150 行是:$query .= '?' . http_build_query($params);

整行:

public function whmaapicall()
{
    $whmusername = $_ENV['REMOTE_USER'];
    $whmpassword = $_ENV['REMOTE_PASSWORD'];
    $query = 'https://127.0.0.1:2087/json-api/listpkgs?api.version=1';
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $header[0] = 'Authorization: Basic ' . base64_encode($whmusername . ':' . $whmpassword) . "\n\r";
    curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
    curl_setopt($curl, CURLOPT_URL, $query);
    $result = curl_exec($curl);

    if (!$result) {
        error_log('curl_exec threw error "' . curl_error($curl) . '" for ' . $query);
    }

    curl_close($curl);
    return json_decode($result);
}

public function whmapi($function = NULL, $params = NULL)
{
    $whmusername = 'root';

    if ($function == 'listpkgs') {
        $whmusername = $_ENV['REMOTE_USER'];
        return $this->whmapi2();
    }

    $whmhash = $this->gethash();
    $query = 'https://127.0.0.1:2087/json-api/' . $function;
    $query .= '?' . http_build_query($params); //line mentioned
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $header[0] = 'Authorization: WHM ' . $whmusername . ':' . preg_replace('\'(' . "\r" . '|' . "\n" . ')\'', '', $whmhash);
    curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
    curl_setopt($curl, CURLOPT_URL, $query);
    $result = curl_exec($curl);
    curl_close($curl);
    return json_decode($result);
}

【问题讨论】:

  • $params 没有在任何地方定义。此外,$params 显然不是数组或对象。你需要弄清楚为什么。你可以从var_dump($params); 开始,看看它是什么类型……如果它甚至被定义了。
  • 应该 $query .= '?' . var_dump($params); ?
  • 为简单起见,将其包装在If (!empty($params)) 中或将函数参数默认声明为=array()

标签: php curl cpanel whm cpanel-xmlapi


【解决方案1】:

在 whmapi 函数中,$params 有一个默认值 NULL,而 NULL 不是 http_build_query 的合法参数,并且您将 $params 直接传递给 http_build_query 而无需先检查它是否为空。停止给 http_build_query NULL's,做类似的事情

$query .= '?';
if($params!==NULL){
    $query.=http_build_query($params);
}

【讨论】:

  • 您还可以更改函数的定义以将默认值设置为空数组。 Array $params = []
  • @JohnConde uhm.. function f($v=[]){var_dump($v);} f(NULL); => NULL - 但是,如果您运行的是 PHP7+,这将是安全的,但不接受对象:function f(array $v=[]){var_dump($v);},但如果您正在运行PHP7.1+,这也可以工作并接受对象:function f(iterable $v=[]){var_dump($v);}
猜你喜欢
  • 1970-01-01
  • 2011-02-07
  • 1970-01-01
  • 2015-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-27
相关资源
最近更新 更多