2015-03-19 2 views
0

Итак, я пытаюсь написать короткую функцию с помощью PHP, чтобы проверить, доступен ли сервер (или резервная копия). Служба предоставляет два сервера для использования и страницу на сервере, которая просто имеет «ОК» в элементе с идентификатором «server_status». Я в основном взял свой код, который они предоставили, и скорректировал его так, чтобы он обеспечивал необходимый объем вывода. Я хочу получить массив истинных или ложных (в зависимости от того, доступен ли один из сайтов) и правильной страницы, если это так. Прямо сейчас каждый раз выводится результат (false, «e404.html»), и это то, что я установил для вывода, если условия не выполнены. Вот мой код:PHP getElementById не работает

function checkURL() { 
     $servers = array('tpeweb.paybox.com', // primary URL 
     'tpeweb1.paybox.com'); // backup URL 
     foreach($servers as $server){ 
      $doc = new DOMDocument(); 
      $doc->loadHTMLFile('https://'.$server.'/load.html'); 
      $server_status = ""; 
      $element = $doc->getElementById('server_status'); 

      if($element){ 
      $server_status = $element->textContent; 
      } 
      if($server_status == "OK"){ 
      // Server is up and services are available 
      return array(true, 'https://'.$server.'/cgi/MYchoix_pagepaiement.cgi'); 
      } 
     } 
     return array(false, 'e404.html'); 
    } 

Выполнение некоторых выходного тестирования, оказалось, что я загружаю документ в $ документ, но он не заполняет $ элемент. Я новичок в PHP, поэтому я не совсем уверен, что не так.

EDIT:

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

<?php 
    $servers = array('urlserver.paybox.com', // primary URL 
    'urlserver1.paybox.com'); // backup URL 
    $serverOK = ""; 
    foreach($servers as $server){ 
     $doc = new DOMDocument(); 
     $doc->loadHTMLFile('https://'.$server.'/load.html'); 
     $server_status = ""; 
     $element = $doc->getElementById('server_status'); 
     if($element){ 
      $server_status = $element->textContent; 
     } 
     if($server_status == "OK"){ 
      // Server is up and services are available 
      $serverOK = $server; 
      break; 
     } 
     // else : Server is up but services are not available . 
    } 
    if(!$serverOK){ 
    die("Error : no server found"); 
} 
?> 
//echo 'Connecting to https://'.$server.'/cgi/MYchoix_pagepaiement.cgi'; 

Спасибо, Adrian

+0

Что такое содержимое переменной вашего сервера? – siddhesh

+0

Он работает для меня .. PHP 5.4 –

+0

Хорошо работает здесь, код кажется ОК. Угадайте что-то в PHP conf. – yergo

ответ

0

В вашем html-файле объявлен doctype?

из http://php.net/manual/en/domdocument.getelementbyid.php

Для работы этой функции, вам нужно будет либо установить некоторые атрибуты ID с DOMElement :: setIdAttribute или DTD, который определяет атрибут с типом ID.

Это должно быть достаточно, чтобы включить <!DOCTYPE html> на самом верху вашего HTML-файлов, а также установить $doc->validateOnParse = true; перед вызовом функции getElementByID.

+0

У меня есть doctype, объявленный в html-файле, содержащем php, но я не контролирую два загружаемых файла. – Adrian

+0

вы можете попробовать сначала загрузить содержимое файла html [file_get_contents] (http://php.net/manual/en/function.file-get-contents.php), а затем добавить к нему тип doctype и использовать полученную строку как вход для вашего DOMDocument с использованием [loadHTML] (http://php.net/manual/en/domdocument.loadhtml.php) вместо loadHTMLFile –

+0

Имеющиеся файлы уже имеют тип doctype, но когда я пытаюсь загрузить содержимое файла, это ничего не загружает в переменную – Adrian

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