⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 browser.php

📁 一款可以和GOOGLE媲美的开源统计系统,运用AJAX.功能强大. 无色提示:按照需要PHP5.1以上和MySQL数据库支持。
💻 PHP
📖 第 1 页 / 共 3 页
字号:
<?php    /**     *	Base include file for SimpleTest     *	@package	SimpleTest     *	@subpackage	WebTester     *	@version	$Id: browser.php 163 2008-01-14 04:40:16Z matt $     */    /**#@+     *	include other SimpleTest class files     */    require_once(dirname(__FILE__) . '/simpletest.php');    require_once(dirname(__FILE__) . '/http.php');    require_once(dirname(__FILE__) . '/encoding.php');    require_once(dirname(__FILE__) . '/page.php');    require_once(dirname(__FILE__) . '/selector.php');    require_once(dirname(__FILE__) . '/frames.php');    require_once(dirname(__FILE__) . '/user_agent.php');    /**#@-*/    if (!defined('DEFAULT_MAX_NESTED_FRAMES')) {        define('DEFAULT_MAX_NESTED_FRAMES', 3);    }    /**     *    Browser history list.	 *    @package SimpleTest	 *    @subpackage WebTester     */    class SimpleBrowserHistory {        var $_sequence;        var $_position;        /**         *    Starts empty.         *    @access public         */        function SimpleBrowserHistory() {            $this->_sequence = array();            $this->_position = -1;        }        /**         *    Test for no entries yet.         *    @return boolean        True if empty.         *    @access private         */        function _isEmpty() {            return ($this->_position == -1);        }        /**         *    Test for being at the beginning.         *    @return boolean        True if first.         *    @access private         */        function _atBeginning() {            return ($this->_position == 0) && ! $this->_isEmpty();        }        /**         *    Test for being at the last entry.         *    @return boolean        True if last.         *    @access private         */        function _atEnd() {            return ($this->_position + 1 >= count($this->_sequence)) && ! $this->_isEmpty();        }        /**         *    Adds a successfully fetched page to the history.         *    @param SimpleUrl $url                 URL of fetch.         *    @param SimpleEncoding $parameters     Any post data with the fetch.         *    @access public         */        function recordEntry($url, $parameters) {            $this->_dropFuture();            array_push(                    $this->_sequence,                    array('url' => $url, 'parameters' => $parameters));            $this->_position++;        }        /**         *    Last fully qualified URL for current history         *    position.         *    @return SimpleUrl        URL for this position.         *    @access public         */        function getUrl() {            if ($this->_isEmpty()) {                return false;            }            return $this->_sequence[$this->_position]['url'];        }        /**         *    Parameters of last fetch from current history         *    position.         *    @return SimpleFormEncoding    Post parameters.         *    @access public         */        function getParameters() {            if ($this->_isEmpty()) {                return false;            }            return $this->_sequence[$this->_position]['parameters'];        }        /**         *    Step back one place in the history. Stops at         *    the first page.         *    @return boolean     True if any previous entries.         *    @access public         */        function back() {            if ($this->_isEmpty() || $this->_atBeginning()) {                return false;            }            $this->_position--;            return true;        }        /**         *    Step forward one place. If already at the         *    latest entry then nothing will happen.         *    @return boolean     True if any future entries.         *    @access public         */        function forward() {            if ($this->_isEmpty() || $this->_atEnd()) {                return false;            }            $this->_position++;            return true;        }        /**         *    Ditches all future entries beyond the current         *    point.         *    @access private         */        function _dropFuture() {            if ($this->_isEmpty()) {                return;            }            while (! $this->_atEnd()) {                array_pop($this->_sequence);            }        }    }    /**     *    Simulated web browser. This is an aggregate of     *    the user agent, the HTML parsing, request history     *    and the last header set.	 *    @package SimpleTest	 *    @subpackage WebTester     */    class SimpleBrowser {        var $_user_agent;        var $_page;        var $_history;        var $_ignore_frames;        var $_maximum_nested_frames;        /**         *    Starts with a fresh browser with no         *    cookie or any other state information. The         *    exception is that a default proxy will be         *    set up if specified in the options.         *    @access public         */        function SimpleBrowser() {            $this->_user_agent = &$this->_createUserAgent();            $this->_user_agent->useProxy(                    SimpleTest::getDefaultProxy(),                    SimpleTest::getDefaultProxyUsername(),                    SimpleTest::getDefaultProxyPassword());            $this->_page = &new SimplePage();            $this->_history = &$this->_createHistory();            $this->_ignore_frames = false;            $this->_maximum_nested_frames = DEFAULT_MAX_NESTED_FRAMES;        }        /**         *    Creates the underlying user agent.         *    @return SimpleFetcher    Content fetcher.         *    @access protected         */        function &_createUserAgent() {            $user_agent = &new SimpleUserAgent();            return $user_agent;        }        /**         *    Creates a new empty history list.         *    @return SimpleBrowserHistory    New list.         *    @access protected         */        function &_createHistory() {            $history = &new SimpleBrowserHistory();            return $history;        }        /**         *    Disables frames support. Frames will not be fetched         *    and the frameset page will be used instead.         *    @access public         */        function ignoreFrames() {            $this->_ignore_frames = true;        }        /**         *    Enables frames support. Frames will be fetched from         *    now on.         *    @access public         */        function useFrames() {            $this->_ignore_frames = false;        }                /**         *    Switches off cookie sending and recieving.         *    @access public         */        function ignoreCookies() {            $this->_user_agent->ignoreCookies();        }                /**         *    Switches back on the cookie sending and recieving.         *    @access public         */        function useCookies() {            $this->_user_agent->useCookies();        }        /**         *    Parses the raw content into a page. Will load further         *    frame pages unless frames are disabled.         *    @param SimpleHttpResponse $response    Response from fetch.         *    @param integer $depth                  Nested frameset depth.         *    @return SimplePage                     Parsed HTML.         *    @access private         */        function &_parse($response, $depth = 0) {            $page = &$this->_buildPage($response);            if ($this->_ignore_frames || ! $page->hasFrames() || ($depth > $this->_maximum_nested_frames)) {                return $page;            }            $frameset = &new SimpleFrameset($page);            foreach ($page->getFrameset() as $key => $url) {                $frame = &$this->_fetch($url, new SimpleGetEncoding(), $depth + 1);                $frameset->addFrame($frame, $key);            }            return $frameset;        }                /**         *    Assembles the parsing machinery and actually parses         *    a single page. Frees all of the builder memory and so         *    unjams the PHP memory management.         *    @param SimpleHttpResponse $response    Response from fetch.         *    @return SimplePage                     Parsed top level page.         *    @access protected         */        function &_buildPage($response) {            $builder = &new SimplePageBuilder();            $page = &$builder->parse($response);            $builder->free();            unset($builder);            return $page;        }        /**         *    Fetches a page. Jointly recursive with the _parse()         *    method as it descends a frameset.         *    @param string/SimpleUrl $url          Target to fetch.         *    @param SimpleEncoding $encoding       GET/POST parameters.         *    @param integer $depth                 Nested frameset depth protection.         *    @return SimplePage                    Parsed page.         *    @access private         */        function &_fetch($url, $encoding, $depth = 0) {            $response = &$this->_user_agent->fetchResponse($url, $encoding);            if ($response->isError()) {                $page = &new SimplePage($response);            } else {                $page = &$this->_parse($response, $depth);            }            return $page;        }        /**         *    Fetches a page or a single frame if that is the current         *    focus.         *    @param SimpleUrl $url                   Target to fetch.         *    @param SimpleEncoding $parameters       GET/POST parameters.         *    @return string                          Raw content of page.         *    @access private         */        function _load($url, $parameters) {            $frame = $url->getTarget();            if (! $frame || ! $this->_page->hasFrames() || (strtolower($frame) == '_top')) {                return $this->_loadPage($url, $parameters);            }            return $this->_loadFrame(array($frame), $url, $parameters);        }        /**         *    Fetches a page and makes it the current page/frame.         *    @param string/SimpleUrl $url            Target to fetch as string.         *    @param SimplePostEncoding $parameters   POST parameters.         *    @return string                          Raw content of page.         *    @access private         */        function _loadPage($url, $parameters) {            $this->_page = &$this->_fetch($url, $parameters);            $this->_history->recordEntry(                    $this->_page->getUrl(),                    $this->_page->getRequestData());            return $this->_page->getRaw();        }        /**         *    Fetches a frame into the existing frameset replacing the         *    original.         *    @param array $frames                    List of names to drill down.         *    @param string/SimpleUrl $url            Target to fetch as string.         *    @param SimpleFormEncoding $parameters   POST parameters.         *    @return string                          Raw content of page.         *    @access private         */        function _loadFrame($frames, $url, $parameters) {            $page = &$this->_fetch($url, $parameters);            $this->_page->setFrame($frames, $page);        }        /**         *    Removes expired and temporary cookies as if         *    the browser was closed and re-opened.         *    @param string/integer $date   Time when session restarted.         *                                  If omitted then all persistent         *                                  cookies are kept.         *    @access public         */        function restart($date = false) {            $this->_user_agent->restart($date);        }        /**         *    Adds a header to every fetch.         *    @param string $header       Header line to add to every         *                                request until cleared.         *    @access public         */        function addHeader($header) {            $this->_user_agent->addHeader($header);        }        /**         *    Ages the cookies by the specified time.         *    @param integer $interval    Amount in seconds.         *    @access public

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -