2010-08-16 93 views
0

我建立了一個URL來執行curl。該網址將爲我正在使用的LMS調用api。在能夠調用其他任何東西之前,您需要從LMS接收一個令牌以放入網址。我已經從api獲取了令牌,並且可以回顯它,並且它顯示得很好,當我在將令牌附加到該令牌後回顯該URL時,它不會顯示出來。在echo "{$url}<br />";PHP:不添加字符串

/www/api2.php?action=create_user &登錄

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 />"; 

輸出= foobar3130 &密碼= 6116b3f29c &名=美孚&姓=酒吧&電子郵件= foobar的%40gmail。 COM &語言=英語&令牌=

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

UT pUCu2BUAE1heAyQ93fApfhvDE1bjKd

編輯 我添加了一個檢查,看看是否$start是假的,這是假的。我猜它實際上並不是獲得echo'd的標記,因爲如果我將該行註釋掉,我爲標記輸出獲得的字符串仍然會打印出來。我不確定它甚至會來自哪裏。

編輯2 我現在有它返回的XML,但我不知道如何解析它來獲取令牌。它返回:

<xml><token>Fp1rYkds4fSuTAQxTvLvSiW5NE2FJz</token></xml> 
+1

並輸出回聲「{$ token}
」; ?? – 2010-08-16 15:10:31

+1

您是否在curl_exec之前設置了'CURLOPT_RETURNTRANSFER'選項? – a1ex07 2010-08-16 15:16:41

+0

對不起,忘了添加那個輸出。更新。 @ a1ex07是的,我做了,我只是沒有包含腳本的那部分內容。我獲得了令牌的價值。它回聲很好。 – 2010-08-16 15:18:15

回答

3

您的編輯似乎確認curl_exec()沒有將數據返回給您 - 它將直接發送給瀏覽器。使用選項CURLOPT_RETURNTRANSFER讓它將值返回給您的變量。

+0

我同意。因此,在調用curl_exec()之前添加下面這行:curl_setopt($ c,CURLOPT_RETURNTRANSFER,1); – Obto 2010-08-16 16:11:03

+0

此行已經在腳本中,我只是沒有在我粘貼在這裏的代碼中。 – 2010-08-16 16:15:51

+0

@ The.Anti.9,var_dump($ res);'?的輸出是什麼? – jasonbar 2010-08-16 16:17:28

1

嘗試:

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; 
1

從你的腳本顯示,您試圖解析令牌出XML結果,有37個字符的固定寬度。

從您最近的評論來看,這就是問題所在。

更好的方法是使用實​​際的XML DOM parsing從文件中獲取令牌。

+0

你可能舉個例子嗎?我無法使DOMDocument的東西工作。 – 2010-08-16 16:09:15

+0

@你需要顯示你的XML。 – 2010-08-16 16:17:21

+0

噢,是的,我的錯誤。我現在已經加入了我的文章。 – 2010-08-16 16:20:05