2014-01-05 3 views
0

У меня проблема, которую я не могу решить в течение 7 часов.php-переключатель не обрабатывает переменную

это мой PHP скрипт для создания пользователя на сервере OpenFire:

$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». Если запрос не увенчался успехом, возврат будет элементом «ошибка» с текстом тела одной из следующих строк ошибок.

Результат - это XML-файл, поэтому на то, что вы ищете, используется парсер XML для получения элемента результата. SimpleXML загрузит его в массив (так как это XML-страница мала, вы не должны беспокоиться о производительности, так и более сложные XML-парсеры не стоит свеч)

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

Или, вы также можете передать URL используя файл simplexml_load_file , результат будет таким же.

для получения дополнительной информации см: http://www.sitepoint.com/parsing-xml-with-simplexml/

+0

после того, как я попытался загрузить результат, я сбросил его, и это результат: object (SimpleXMLElement) # 1 (1) {[0] => строка (26) «UserAlreadyExistsException»} и переключатель все еще не работает. черт возьми, xml –

+0

Хорошо, я понял. изменил переключатель на: switch ((string) $ output) и, похоже, теперь работает. Большое спасибо за Вашу помощь. –

0

Ваше заявление о переключении прекрасно выглядит для меня. Я бы поставил под вопрос содержание в вашей переменной $odpoved. Используйте var_dump($odpoved), чтобы увидеть, что он содержит, и обязательно проверьте наличие пробелов или скрытых символов (символы новой строки иногда трудно распознать).

Для анализа отчетности выключателя проверить http://www.php.net/manual/en/control-structures.switch.php

+0

это вывод дампа: string (43) «UserAlreadyExistsException», поэтому он включает в переменной тоже. –

Смежные вопросы