所以我试图用PHP编写一个简短的函数来检查服务器(或备份)是否可用。该服务提供了两个可供使用的服务器,以及服务器中的一个页面,该页面在id为"server_status"的元素中只包含"OK"。我基本上接受了他们提供的代码,并对其进行了调整,以便它提供我需要的那种输出。我想得到一个true或false的数组(取决于其中一个网站是否可用),以及正确的页面(如果可用)。现在每次的输出都是(false,"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中,但它没有填充$element。我是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
您的html文件是否声明了doctype?
来自http://php.net/manual/en/domdocument.getelementbyid.php
要使此函数工作,您需要使用DOMElement::setIdAttribute设置一些ID属性,或者使用DTD将属性定义为ID类型。
在html文件的顶部包含<!DOCTYPE html>
就足够了,并设置$doc->validateOnParse = true;
,然后调用getElementByID函数。