所以我正在尝试使用PHP编写一个简短的函数来检查服务器(或备份)是否可用。该服务提供了两个要使用的服务器,服务器中的一个页面在id为“server_status”的元素中只有“OK”。我基本上采用了他们提供的代码并对其进行了调整,以便它提供我需要的那种输出。我想得到一个真或假的数组(取决于其中一个站点是否可用),以及正确的页面(如果有)。现在每次的输出都是(假,“e404.html”),这是我设置它,如果没有条件满足输出。这是我的代码:
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');
}
进行一些输出测试,看来我正在将文档加载到$ doc中,但它没有填充$元素。我是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';
谢谢, 阿德里安
答案 0 :(得分:0)
您的html文件是否声明了doctype?
来自http://php.net/manual/en/domdocument.getelementbyid.php
要使此功能起作用,您需要使用DOMElement :: setIdAttribute或DTD设置一些ID属性,DTD将属性定义为ID类型。
将<!DOCTYPE html>
包含在html文件的最顶层并设置就足够了
在调用getElementByID函数之前$doc->validateOnParse = true;
。