2014-01-05 26 views
0

我有一個問題,我現在不能解決7個小時。php開關不處理變量

這是我創造的Openfire服務器上的用戶PHP腳本:

$f = fopen("LINK","r"); 
$odpoved = fread($f, 1024); 

手動http://www.igniterealtime.org/projects/openfire/plugins/userservice/readme.html寫在我的變量應包含「OK」或「UserAlreadyExistsException」。當我嘗試打印$ odpoved時,它顯示出良好的效果,當我查看該頁面的源代碼時,它包含標籤,如手冊中所寫。我的問題是,我不能爲上帝的緣故找到一種方法來在開關中使用這個變量。這是它現在的樣子:

switch($odpoved){ 
    case 'OK': 
     print("something"); 
     break; 
    case 'UserAlreadyExistsException': 
     print("something2"); 
     break; 
    default: 
     print("X"); 
} 
fclose($f); 

無論我做什麼,它總是打印默認值。我不明白它有什麼問題。我已經試過將它與帶有標籤的選項進行比較,但它沒有幫助,並且總是以默認方式結束。 請問你好嗎?感謝您的幫助,如果需要我會提供更多的細節。

+0

什麼打印$的結果odpoved? – rullof

+1

正如你所說,當你查看源代碼時,它將輸出和標籤一起打印出來,當然它不會在開關盒中輸出'OK'或'UserAlreadyExistsException'。 – rahul

+0

在切換之前,執行echo intval($ odproved)。 「與」 。 intval(「UserAlreadyExistsException」)。 「與」 。 INTVAL( 「OK」);看看他們是否是相同的字符,也許有空白或什麼的。 – OBV

回答

1

服務器將回復到一個XML結果頁面的所有用戶的服務請求。如果請求被成功處理,返回將是一個「結果」元素,其文本正文爲「OK」。如果請求不成功,返回將是一個「error」元素,其文本正文爲以下錯誤字符串之一。

輸出是一個XML文件,所以你在看什麼是使用XML解析器來獲得結果元素。 simplexml的將其加載到一個數組(因爲此XML頁面是小,你不應該擔心性能,因此更復雜的XML解析器是不值得的麻煩)

$output = simplexml_load_string($odpoved) 
switch($output->result) //check $odpoved to make sure the XML structure matches 

或者,您也可以通過網址使用simplexml_load_file 的輸出將是相同的。

瞭解更多信息,請參見:http://www.sitepoint.com/parsing-xml-with-simplexml/

+0

我試圖加載輸出後,我傾銷它,這是結果:對象(SimpleXMLElement)#1(1){[0] =>字符串(26)「UserAlreadyExistsException」}和開關仍然無法正常工作。該死的xml –

+0

好吧,我想清楚了。改變切換到:開關((字符串)$輸出),它似乎現在工作。非常感謝您的幫助。 –

0

您的switch語句對我來說看起來很好。我會質疑您的變量$odpoved中的內容。使用var_dump($odpoved)來查看它包含的內容,並確保檢查前導空格或尾隨空格或隱藏字符(新行字符有時很難找到)。

對於switch語句分析檢查http://www.php.net/manual/en/control-structures.switch.php

+0

這是dump的輸出:string(43)「UserAlreadyExistsException」所以它也包含也在變量中。 –