2013-07-09 2 views
-2

Я настраиваю веб-API, который, я уверен, можно сделать более эффективно, но это v0.1. Прежде всего, выезд localhost/serverList/api/rest.php?action=allServers&format=xml. Это начинает следующую цепочку. Я удалил НЕРАСПРОСТРАНЕНИИ соответствующие части кода, так что этот вопрос корочеФункция должна возвращать действительный xml. Вместо этого возвращает ошибку «Дополнительный контент»

SERVERLIST/апи/rest.php

<?php 
include 'inc/restFunctions.php'; 
//several lines of code removed. $functionName = allserversxml 
if(in_array($action,$possibleActions)){ 
    if(in_array($format,$possibleFormats)){ 
     $functionName = $action.$format; 
     $result = $functionName(); 
     header('Content-type: text/xml'); 
     $return->flush(); 
    } 
} 
?> 

SERVERLIST/апи/вкл/restFunctions.php

<?php 
function getArrayOfFieldNames($queryResults){ 
    $fieldList = array(); 
    while($finfo = $queryResults->fetch_field()){ 
     $fieldName = $finfo->name; 
     array_push($fieldList, $fieldName); 
    } 
    return $fieldList; 
} 

function getXMLofQuery($queryResults,$xmlTitle){ 
    $fieldList = getArrayOfFieldNames($queryResults); 
    $xml = new XMLWriter(); 
    $xml->openURI("php://output"); 
    $xml->startDocument(); 
    $xml->setIndent(true); 
    $title = $xmlTitle; 
    $titlePlural = $xmlTitle."s"; 
    $xml->startElement($titlePlural); 
    $fieldIDName = $title."ID"; 
     while($row = $queryResults->fetch_assoc()){ 
      $xml->startElement($title); 
       $xml->writeAttribute('id', $row[$fieldIDName]); 
       foreach($fieldList as $field){ 
         $xml->startElement($field); 
          $xml->writeRaw($row[$field]); 
         $xml->endElement(); 
        } 
      $xml->endElement(); 
     } 
    $xml->endElement(); 
    return $xml; 
} 
function allserversxml(){ 
    global $link; //from config.php file 
    $allServerResults = $link->query("SELECT * FROM servers"); 
    $xml = getXMLofQuery($allServerResults,"server"); 
    return $xml; 
} 
?> 

Проблема в том, что когда я перехожу к URL-адресу, я получаю сообщение об ошибке error on line 2 at column 1: Extra content at the end of the document. Below is a rendering of the page up to the first error.

Однако ... ниже нет рендеринга. Что дает?

EDIT: согласно рекомендации ndm, я смог получить сообщение об ошибке через источник страницы.

Call to a member function flush() on a non-object in C:\path\serverList\api\rest.php on line 29 

Так что я полагаю, мой вопрос будет то, что это лучший способ для отображения XML на странице, когда он возвращается из функции?

+0

Посмотрите на источник страницы, это должно показать вам фактическое содержимое XML. – ndm

+0

oh whoa, здесь есть все виды данных, которые не отображаются! Редактирование моего вопроса, чтобы отразить как таковой – mhopkins321

ответ

1

Насколько я могу судить из сообщения об ошибке и кода, считая, что «удаление ненужных частей кода» не включает удаление кода из опубликованных функций и логического потока, похоже, что переменная, которую вы 'd хотите вызвать flush() на должно быть $result вместо $return.

... 
$result = $functionName(); 
header('Content-type: text/xml'); 
$result->flush(); // like this 
+0

О, боже мой. Я чувствую себя очень небрежным. Большое спасибо – mhopkins321

+0

Добро пожаловать, мы все знаем, что чувствуем :) – ndm