PHP использует глобальную переменную - PullRequest
0 голосов
/ 09 мая 2011

У меня есть некоторые проблемы с использованием глобальной переменной PHP. Я искал из StackOverflow, но ничего похожего на мое (по крайней мере, я не нашел).

У меня есть 2 страницы php. Index.php и Account.php . Index.php вызывает account.php через ajax. Account.php должен получить некоторые данные XML с другого URL-адреса и сохранить их. После этого Index.php должен использовать его.

на index.php:

$("#login-submit").click(function(){
          $("#span-login-loading").css('visibility','visible');
          var dataString = 'user='+ $("#login-name").val() + '&pass=' + $("#login-pass").val();
          $.ajax({
            type: "POST",
            url: "pages/account.php",
            data: dataString,
            success: function(data) {
              $("#login-form").html(data);
              $("#span-login-loading").css('visibility','hidden');
              if (data.substr(0, 12) == "Logged in as"){
                $("#div-login-submit").html('<a href="pages/account.php?logout=1" id="logout">Гарах</a>');
              }
            }
          });
          return false;
        });

на account.php:

$xml_data = "<loginRequest>
        <username>" . $_POST['user'] . "</username>
        <password>" . $_POST['pass'] . "</password>
      </loginRequest>";
    $url = "url here";

    $username = "name here";
    $password = "pass here";
    $process = curl_init($url);
    curl_setopt($process, CURLOPT_HEADER, 0);
    curl_setopt($process, CURLOPT_TIMEOUT, 10);
    curl_setopt($process, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    curl_setopt($process, CURLOPT_USERPWD, $username . ":" . $password);
    curl_setopt($process, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($process, CURLOPT_HTTPHEADER, array('Content-Type: text/xml'));
    curl_setopt($process, CURLOPT_POSTFIELDS, $xml_data);
    $return = curl_exec($process);
    $info = curl_getinfo($process);

    $xml = simplexml_load_string($return);
    curl_close($process);

Как я могу передать $ xml в index.php? Мой вопрос больше похож на «Как я могу хранить объект типа xml в сессии». Потому что в настоящее время я использую сессию для хранения данных. Но в случае строковых данных он работает с окном ниже строки:

$_SESSION['user_name'] = (string)$xml->request->username;

Если я удаляю (строку) из нее, она делает ошибку, такую ​​как Неустранимая ошибка: исключение, выбрасываемое без фрейма стека в поле Неизвестно в строке 0 , но мне нужен проходной объект, а не строка.

Ответы [ 2 ]

1 голос
/ 09 мая 2011

Быстрое решение должно пройти через сериализацию: вы можете сохранить свой XML-объект в сеанс, например:

$_SESSION['whatever']=$xml->asXML();

и получить его как

$xml = simplexml_load_string($_SESSION['wathever']);

Примечание: сериализация - неправильное использование этого термина, поскольку simplexml не реализует сериализуемый интерфейс, насколько я могу видеть из документов, и, таким образом, мы должны serialize опираясь на функции, которые обеспечивает simplexml

1 голос
/ 09 мая 2011
$xml = simplexml_load_string($return);
echo $xml; // add this line at the end of account.php
curl_close($process);

Кроме того - если вы хотите получить содержимое $ xml из других страниц php, вы можете заполнить переменную, получив обработанную страницу account.php, как это

$xml = file_get_contents('http://yourserver.com/pages/account.php');

И для преобразования содержимого в объект XML:

$xml = simplexml_load_string(file_get_contents('http://yourserver.com/pages/account.php'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...