PHP getElementById不工作

问题描述:

所以我试图用PHP编写一个简短的函数来检查服务器(或备份)是否可用。该服务提供了两台服务器供使用,并且服务器内的一个页面在ID为“server_status”的元素中只有“OK”。我基本上把他们提供的代码和调整它,以便它提供我需要的那种输出。我想得到一个真或假的数组(取决于其中一个网站是否可用)以及正确的网页(如果是)。现在每次输出都是(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的新手,所以我不太清楚哪里出了问题。

编辑:

这是服务提供,使这个检查的原代码,我调整了,因为我需要的是能够实际输出链路的使用方法:

<?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 2015-03-19 11:54:09

+0

它为我工作.. PHP 5.4 – 2015-03-19 11:55:26

+0

在这里很好的工作,代码似乎没问题。在PHP conf中猜测一些东西。 – yergo 2015-03-19 11:56:22

您的html文件是否已经声明了文档类型?

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

对于此功能工作,你需要或者可设置与一个DOMElement :: setIdAttribute或定义的属性为ID类型的DTD一些ID属性。

应该足以包括<!DOCTYPE html>在HTML文件的最顶部,并调用函数的getElementById之前设置 $doc->validateOnParse = true;

+0

我在包含php的html文件中声明了doctype,但是我不控制正在加载的两个文件。 – Adrian 2015-03-19 12:02:08

+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 – 2015-03-19 13:22:29

+0

提供的文件已经有doctype,但是当我尝试加载文件内容时不会将任何内容加载到变量中 – Adrian 2015-03-20 12:55:40