代码之家  ›  专栏  ›  技术社区  ›  The.Anti.9

php:string不追加

  •  0
  • The.Anti.9  · 技术社区  · 14 年前

    我正在建立一个URL来用curl执行。该URL将调用我正在使用的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}<br />";

    WWW/API2.PHP?action=create_user&login=foobar3310&password=6116b3f29c&name=foo&name=bar&email=foo bar%40gmail.com&languages=english&token=

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

    pucu2buea1heayq93fapfhvwde1bjkd

    编辑 我加了一张支票看看 $start 是假的,也是假的。我猜它实际上不是得到echo的令牌,因为如果我把这行注释掉,我为令牌输出所拥有的字符串仍然会被打印出来。我不知道它会是什么。

    编辑2 现在我有了返回XML的XML,但是我不知道如何解析它来获取令牌。它返回:

    <xml><token>Fp1rYkds4fSuTAQxTvLvSiW5NE2FJz</token></xml>
    
    3 回复  |  直到 14 年前
        1
  •  3
  •   jasonbar    14 年前

    你的编辑似乎证实了这一点 curl_exec() 不会将数据返回给您,而是直接将其发送到浏览器。使用选项 CURLOPT_RETURNTRANSFER 要让它返回到变量的值。

        2
  •  1
  •   bcosca    14 年前

    尝试:

    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
  •  1
  •   Pekka    14 年前

    根据脚本显示的内容,您正在尝试从XML结果中解析令牌,固定宽度为37个字符。

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

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