2012-05-29 6 views
3

У меня есть следующий скрипт, который получает XML-файл и читает его с file_get_contents(). Я хочу перенаправить этот xml в файл под названием «register», но он не работает, и я понятия не имею, почему.Почему моя функция header() не перенаправляется?

<?php 
    $xml_post=file_get_contents('php://input'); 
    $xml=simplexml_load_string($xml_post); 
    if($xml->action=='register') 
     { 
     header('Location: http://proiectis.host22.com/register.php'); 
     exit; 
     } 

?> 

Я буду благодарен вам за помощь.

Это мой XML:

<xml version="1.0"> 

    <action>register</action> 

    <parameters> 

      <name>Ionel Popescu</name> 

      <username>Ionel P</username> 

     <email>[email protected]</email> 

     <password>abdef01</password> 

    </parameters> 

    </xml> 
+2

Вы уверены, что '$ xml-> action' делает равный' register'? –

+0

Что такое содержимое '$ xml'? – flowfree

+0

да, конечно. протестировал его. – Dianna

ответ

1

Я думаю, что в документе XML есть недоразумение. У вас нет заголовка XML в документе, но вы используете элемент <xml> в качестве корневого элемента. Попробуйте вместо этого:

<?xml version="1.0"?> <!-- This is a typical xml header --> 
<result> <!-- An xml document must contain exactly 1 root element --> 
    <action>register</action> 
    <parameters> 
    <name>Ionel Popescu</name> 
    <username>Ionel P</username> 
    <email>[email protected]</email> 
    <password>abdef01</password> 
    </parameters> 
</result> 

оригинальный PHP код должен работать.

+0

У меня есть только один корневой элемент и это Dianna

+1

Затем вы должны проверить '$ xml_post'. Я попробовал вашу оригинальную версию [здесь] (http://codepad.org/s13tfx0r), и она сработала. –

2

Try:

if ((string) $xml->action === 'register') { 
    // code 
} 

И вам не нужно </xml> в файле XML.

+0

Если вы собираетесь использовать это значение, вы также можете сопоставить по типу:' === ' – orourkek

+0

@orourkek действительно? Я этого не знал. Я отредактировал код, спасибо. – flowfree

+0

его не нужно бросать ... я тестировал« echo $ xml-> action », и он выводит« register », поэтому это отлично работает. Что-то не так с заголовком() я думаю ... – Dianna

0

$xml->action возвращает SimpleXMLElement вместо строки, которую вы ожидали. Поэтому используйте этот код:

<?php 
    $xml_post=file_get_contents('php://input'); 
    $xml=simplexml_load_string($xml_post); 
    if((string)$xml->action == 'register') 
     { 
     header('Location: http://proiectis.host22.com/register.php'); 
     exit; 
     } 

?> 
+0

Я уже сделал это, но все еще не работает. – Dianna

+0

это мой вывод после var_dump: объект (SimpleXMLElement) # 2 (1) { [0] => строка (8) "register" } – Dianna