【问题标题】:PHP return type not as same as i expectPHP返回类型与我预期的不同
【发布时间】:2015-06-12 13:54:24
【问题描述】:

我正在使用 curl 发送数据,然后作为响应,我给出了一些值。如果满足,则响应应为true,否则将返回字符串错误消息。

我的代码如下,

if(curl_exec($ch) === true){
        return true;
}else{
        return curl_exec($ch);
}

在我的回复文件中我写了这个,

if($_POST['license']=='123456'){
        echo 'License already in use';
}else{
        echo true;
}

我认为echo true 是相同的,第一个条件curl_exec($ch)===true) 应该满足。我无法理解我哪里出错了。请以正确的方式开车。

编辑

我使用 var_dump 转储它并显示 string 类型 insead boolean -> string '' (length=0)

我的 curl 代码是

    $site = array('license' => $this->key, 'domain' => $this->domain, 'server' => $_SERVER['HTTP_HOST']);


    curl_setopt($ch, CURLOPT_URL, EXTENSION_VERIFY_URL);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $site);

    if(curl_exec($ch) === true){
        return true;
    }else{
        return curl_exec($ch);
    }

【问题讨论】:

  • 不会两次调用curl_exec() 导致两次单独的执行吗?我怀疑这是理想的行为,但我认为这甚至不合法,根据此处的示例用法:php.net/manual/en/function.curl-exec.php。另外,我怀疑响应将是布尔值true;它可能是一个等于或包含"true" 的字符串,但它不应该是相同的类型,所以你的 === 会失败。
  • 你设置return_transfer了吗?如果是这样,那么 curl_exec 永远不会返回布尔值 true。它会返回您请求的网址吐出的任何字符串。
  • 发布其余代码,包括 curl opts
  • 是的,我知道不要使用curl_exec() 两次,但如果我将它保存在任何变量中,那么操作我的代码将变得很容易。这就是为什么我必须使用curl_exec() 两次
  • 代码是服务器端的,因此操作结果集不再容易,因为它调用了两次。

标签: php curl boolean


【解决方案1】:

调用curl_exec() 两次可能会失败。相反,您应该将返回值存储在一个变量中(例如$result = curl_exec()),并使用它进行测试。

除此之外,尝试使用 echo 代替 true 和 f:License already in use 之类的 t 代替字符串。这样,如果一切正常,您总是会返回一个字符串。

【讨论】:

  • 如果我像 $result = curl_exec() 这样存储响应,那么聪明的人可以更改 $result 的值,我的代码可能会崩溃。
  • 您如何想象会发生这种情况?如果您控制代码:只有当他设法欺骗您的响应时,这需要一些严重的黑客攻击。如果他控制代码(即它在他的服务器上),那么他可以将curl_exec() 替换为true 并完全跳过许可证检查。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-15
  • 1970-01-01
  • 1970-01-01
  • 2019-12-27
  • 2015-08-13
  • 2012-01-25
相关资源
最近更新 更多