2015-03-19 160 views
0

所以我試圖用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

回答

0

您的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