0

最近的任务是通过 CACTI 监控外部网页响应/加载时间。我发现了一些使用 cURL 工作的 PHP 脚本(pageload-agent.php 和 class.pageload.php)。一切正常,直到他们要求将其从 LINUX 转移到 Windows 2012R2 服务器。我很难修改脚本以适用于 Windows。已经安装了 PHP 和 cURL 并且都按照测试工作。以下是从 askaboutphp 获取的脚本。

类.pageload.php

<?php
class PageLoad {
var $siteURL = "";
var $pageInfo = "";
/*
* sets the URLs to check for loadtime into an array $siteURLs
*/
function setURL($url) {
    if (!empty($url)) {
        $this->siteURL = $url;
        return true;
    }
    return false;
}

/*
* extract the header information of the url 
*/
function doPageLoad() {
    $u = $this->siteURL;
    if(function_exists('curl_init') && !empty($u)) {
        $ch = curl_init($u);
        curl_setopt($ch, CURLOPT_HEADER, true);
        curl_setopt($ch, CURLOPT_ENCODING, "gzip");
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_NOBODY, false);
        curl_setopt($ch, CURLOPT_FRESH_CONNECT, false); 
        curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)");
        $pageBody = curl_exec($ch);
        $this->pageInfo = curl_getinfo($ch);
        curl_close ($ch);
        return true;
    }
    return false;
}

/*
* compile the page load statistics only
*/
function getPageLoadStats() {
    $info = $this->pageInfo;

    //stats from info
    $s['dest_url'] = $info['url'];
    $s['content_type'] = $info['content_type'];
    $s['http_code'] = $info['http_code'];
    $s['total_time'] = $info['total_time'];
    $s['size_download'] = $info['size_download'];
    $s['speed_download'] = $info['speed_download'];
    $s['redirect_count'] = $info['redirect_count'];
    $s['namelookup_time'] = $info['namelookup_time'];
    $s['connect_time'] = $info['connect_time'];
    $s['pretransfer_time'] = $info['pretransfer_time'];
    $s['starttransfer_time'] = $info['starttransfer_time'];
    return $s;
}   
}
?>

页面加载代理.php

#! /usr/bin/php -q
<?php
//include the class
include_once 'class.pageload.php';
// read in an argument - must make sure there's an argument to use
if ($argc==2) {
//read in the arg.
$url_argv = $argv[1];
if (!eregi('^http://', $url_argv)) {
    $url_argv = "http://$url_argv";
}
// check that the arg is not empty
if ($url_argv!="") {

    //initiate the results array
    $results = array();

    //initiate the class
    $lt = new PageLoad();

    //set the page to check the loadtime
    $lt->setURL($url_argv);

    //load the page
    if ($lt->doPageLoad()) {
        //load the page stats into the results array
        $results = $lt->getPageLoadStats();
    } else {
        //do nothing
        print "";
    }

    //print out the results
    if (is_array($results)) {
        //expecting only one record as we only passed in 1 page.
        $output = $results;

        print "dns:".$output['namelookup_time'];
        print " con:".$output['connect_time'];
        print " pre:".$output['pretransfer_time'];
        print " str:".$output['starttransfer_time'];
        print " ttl:".$output['total_time'];
        print " sze:".$output['size_download'];
        print " spd:".$output['speed_download'];
    } else {
        //do nothing
        print "";
    }
}
} else {
//do nothing
print "";
}
?>

谢谢你。非常感谢任何类型的帮助。

4

0 回答 0