9

从以下两个文件我得到输出(2000)1,但它应该只(2000)

在使用 curl extra 1 获得价值后,为什么呢?

平衡.php

<?php
$url = "http://localhost/sms/app/user_balance.php";
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST, 2);
curl_setopt($ch,CURLOPT_POSTFIELDS, "id=2&status=Y");
$result = curl_exec($ch);
curl_close($ch);
echo $result;
?>

用户余额.php

<?php
$conn = mysql_connect("localhost","root","");
mysql_select_db("sms",$conn);
$user_id = $_REQUEST["id"];
$sql = "SELECT * FROM user_sms WHERE user_id='$user_id'";
$rec = mysql_query($sql);
if($row = mysql_fetch_array($rec)) {
    $balance = $row["user_sms_balance"];
}
echo "(".$balance.")";
?>
4

2 回答 2

14

来自 PHP 手册文档curl_setopt()

CURLOPT_RETURNTRANSFER - 将值设置为 TRUE 以将传输作为 curl_exec() 的返回值的字符串返回,而不是直接输出。

如果您不将CURLOPT_RETURNTRANSFER选项设置为TRUE,则 from 的返回值curl_exec()将是操作的布尔值 - 1 或 0。为避免这种情况,您可以设置CURLOPT_RETURNTRANSFERTRUE,如下所示:

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
于 2013-11-03T18:28:23.070 回答
0

我可以看到对这个问题的最后回应是在 2017 年......

过去一天我一直在敲我的头,我终于得到了我想要的结果。我和这个问题的作者有同样的问题。

也许我的解决方案会帮助其他人,如果有帮助,请投票,我将不胜感激。

因此,在我的情况下,我已经构建了插件并使用简码和 cURL API 获取我将 API 数据输入简码输出。

无论如何,我有这个工作但也打印了额外的值,这是来自 CURLOPT_RETURNTRANSFER 的真实值。

我通过在我的简码函数中传递 ob_start() 和 ob_get_clean() 解决了这个问题。这已经清理并返回了我想要的响应,而在我的数据响应末尾没有附加值 1。

我的简码函数看起来像这样

function shortcode_init(){
  ob_start();
  include PLUGIN_URL . 'templates/shortcode.php';
  return ob_get_clean();
}

如您所见,我在其中定义了我的 cURL API 调用的附加 php。万一有人需要这个..给你。

$ch = curl_init();
$url = YOUR API END POINT URL HERE;

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);


$response = curl_exec($ch);
$err = curl_error($ch);
curl_close($ch);

if ($err) {
  echo $err;
} else {
  // this returns the array from object
  // then we can easily iterate thought arrays and echo values that we need,
  $decoded = json_decode($response, true);
}
于 2021-09-29T08:38:26.013 回答