【问题标题】:PHP: String not appendingPHP:字符串不附加
【发布时间】:2010-08-16 15:02:39
【问题描述】:

我正在构建一个 url 以使用 curl 执行。该网址将为我正在使用的 LMS 调用一个 api。在能够调用其他任何东西之前,您需要从 LMS 接收令牌以放入 url。我已经从 api 获得了令牌,我可以回显它并且它显示得很好,当我在将令牌附加到它之后回显 url 时,它没有显示出来。

curl_setopt($c, 'CURLOPT_RETURNTRANSFER', true);
$res = curl_exec($c);
curl_close($c);

$start = strpos($res,"<token>");
$end = $start+37;
$token = substr($res,$start+7,$end-$start);

echo "{$token}<br />";

$url = "/www/api2.php?action=create_user";
$url .= "&login=" . urlencode($username);
$url .= "&password=" . urlencode($password);
$url .= "&name=" . urlencode($data['first_name']);
$url .= "&surname=" . urlencode($data['last_name']);
$url .= "&email=" . urlencode($email);
$url .= "&languages=english";
$url .= "&token=" . $token;

echo "{$url}<br />";

echo "{$url}&lt;br /&gt;"; 的输出

/www/api2.php?action=create_user&login=foobar3130&password=6116b3f29c&name=Foo&surname=Bar&email=foobar%40gmail.com&languages=english&token=

echo "{$token}&lt;br /&gt;";的输出

pUCu2BUAE1heAyQ93fApfhvDE1bjKd

编辑 我添加了一个检查以查看 $start 是否为假,它是否为假。我猜它实际上不是得到回显的令牌,因为如果我注释掉那条线,我为令牌输出所拥有的字符串仍然会被打印出来。我不确定它会是什么。

编辑 2 我现在让它返回 xml,但我不知道如何解析它来获取令牌。它返回:

<xml><token>Fp1rYkds4fSuTAQxTvLvSiW5NE2FJz</token></xml>

【问题讨论】:

  • 以及 echo "{$token}
    " 的输出; ??
  • 你在 curl_exec 之前设置了CURLOPT_RETURNTRANSFER 选项吗?
  • 抱歉,忘记添加那个输出了。更新。 @a1ex07 是的,我做了,我只是没有包含脚本的那部分。我得到了令牌的值。它的回声很好。
  • 确保 $res 有值?它会附加所有其他内容,因此如果您没有获得 $token 的值,请确保您实际上首先为其分配了一个值。
  • 我绝对物有所值。我在脚本中间打印它,它显示得很好,只是在我将它附加到 $url 后它没有显示。

标签: php api


【解决方案1】:

您的编辑似乎确认 curl_exec() 没有将数据返回给您 - 它直接将数据发送到浏览器。使用选项CURLOPT_RETURNTRANSFER 让它将值返回给您的变量。

【讨论】:

  • 我同意。因此,只需在调用 curl_exec() 之前添加这一行: curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
  • 这行已经在脚本里了,只是我粘贴的代码里没有。
  • @The.Anti.9,var_dump($res);的输出是什么?
  • 这当然是正确的答案。我以为我做得对,但事实证明,我在引号中加上了 CURLOPT_RETURNTRANSFER,正如您将在我的代码中看到的那样。显然,这使它无法正常工作。
【解决方案2】:

尝试:

ob_start();
echo "/www/api2.php?action=create_user";
echo "&login=" . urlencode($username);
echo "&password=" . urlencode($password);
echo "&name=" . urlencode($data['first_name']);
echo "&surname=" . urlencode($data['last_name']);
echo "&email=" . urlencode($email);
echo "&languages=english";
echo "&token=" . $token;
$url=ob_get_contents();
ob_end_clean();

echo $url;

【讨论】:

    【解决方案3】:

    从您的脚本显示的内容来看,您正试图从 XML 结果中解析出 Token,其宽度固定为 37 个字符。

    从您最近的评论来看,这就是问题所在。

    更好的方法是使用实​​际的XML DOM parsing 从文件中获取令牌。

    【讨论】:

    • 你能举个例子吗?我无法让 DOMDocument 的东西正常工作。
    • 哦,是的,我的错。我现在已经包含在我的帖子中了。
    猜你喜欢
    • 2016-07-14
    • 2020-03-09
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 2011-05-15
    • 2019-06-16
    • 2017-11-28
    相关资源
    最近更新 更多