[ Index ] |
|
Code source de Joomla 1.0.13 |
1 <?php 2 //******************************************************************* 3 //php_http_server_generic represents a basic http server 4 //******************************************************************* 5 //by John Heinstein 6 //johnkarl@nbnet.nb.ca 7 //******************************************************************* 8 //Version 0.1 9 //copyright 2004 Engage Interactive 10 //http://www.engageinteractive.com/dom_xmlrpc/ 11 //All rights reserved 12 //******************************************************************* 13 //Licensed under the GNU General Public License (GPL) 14 //http://www.gnu.org/copyleft/gpl.html 15 //******************************************************************* 16 17 if (!defined('PHP_HTTP_TOOLS_INCLUDE_PATH')) { 18 define('PHP_HTTP_TOOLS_INCLUDE_PATH', (dirname(__FILE__) . "/")); 19 } 20 21 define ('CRLF', "\r\n"); //end-of-line char as defined in HTTP spec 22 define ('CR', "\r"); 23 define ('LF', "\n"); 24 25 class php_http_server_generic { 26 var $httpStatusCodes; 27 28 var $protocol = 'HTTP'; 29 var $protocolVersion = '1.0'; 30 var $statusCode = 200; 31 32 var $events = array('onRequest' => null, 'onResponse' => null, 33 'onGet' => null, 'onHead' => null, 34 'onPost' => null, 'onPut' => null); 35 36 function php_http_server_generic() { 37 //require_once(PHP_HTTP_TOOLS_INCLUDE_PATH . 'php_http_status_codes.php'); 38 //$this->httpStatusCodes =&new php_http_status_codes(); 39 } //php_http_server_generic 40 41 function &getHeaders() { 42 $headers = headers_list(); 43 $response = ''; 44 45 if (count($headers) > 0) { 46 foreach ($headers as $key => $value) { 47 $response .= $value . CRLF; 48 } 49 } 50 51 return $response; 52 } //getHeaders 53 54 function setProtocolVersion($version) { 55 if (($version == '1.0') || ($version == '1.1')) { 56 $$this->protocolVersion = $version; 57 return true; 58 } 59 60 return false; 61 } //setProtocolVersion 62 63 function setHeader($name, $value) { 64 header($name . ': ' . $value); 65 } //setHeader 66 67 function setHeaders() { 68 //you will want to override this method 69 $this->setHeader('Content-Type', 'text/html'); 70 $this->setHeader('Server', 'PHP HTTP Server (Generic)/0.1'); 71 } //setHeaders 72 73 function fireEvent($target, $data) { 74 if ($this->events[$target] != null) { 75 call_user_func($this->events[$target], $data); 76 } 77 } //fireEvent 78 79 function fireHTTPEvent($target, $data = null) { 80 if ($this->events[$target] == null) { 81 //if no handler is assigned, 82 //delegate the event to the default handler 83 $this->setHTTPEvent($target); 84 } 85 86 call_user_func($this->events[$target], $data); 87 } //fireHTTPEvent 88 89 function setHTTPEvent($option, $customHandler = null) { 90 if ($customHandler != null) { 91 $handler =& $customHandler; 92 } 93 else { 94 $handler = array(&$this, 'defaultHTTPEventHandler'); 95 } 96 97 switch($option) { 98 case 'onGet': 99 case 'onHead': 100 case 'onPost': 101 case 'onPut': 102 $this->events[$option] =& $handler; 103 break; 104 } 105 } //setHTTPServerEvent 106 107 function defaultHTTPHandler() { 108 //will add functionality for this later 109 //work with subclasses for the time being 110 } //defaultHTTPHandler 111 112 function setDebug($option, $truthVal, $customHandler = null) { 113 if ($customHandler != null) { 114 $handler =& $customHandler; 115 } 116 else { 117 $handler = array(&$this, 'defaultDebugHandler'); 118 } 119 120 switch($option) { 121 case 'onRequest': 122 case 'onResponse': 123 $truthVal ? ($this->events[$option] =& $handler) : 124 ($this->events[$option] = null); 125 break; 126 } 127 } //setDebug 128 129 function getDebug($option) { 130 switch($option) { 131 case 'onRequest': 132 case 'onResponse': 133 return ($this->events[$option] != null); 134 break; 135 } 136 } //getDebug 137 138 function defaultDebugHandler($data) { 139 //just write to a log file, since can't display in a browser 140 $this->writeDebug($data); 141 } //defaultDebugHandler 142 143 function writeDebug($data) { 144 $filename = 'debug_' . time() . '.txt'; 145 $fileHandle = fopen($fileName, 'a'); 146 fwrite($fileHandle, $data); 147 fclose($fileHandle); 148 } //writeDebug 149 150 function receive() { 151 global $HTTP_SERVER_VARS; 152 $requestMethod = strToUpper($HTTP_SERVER_VARS['REQUEST_METHOD']); 153 154 switch ($requestMethod) { 155 case 'GET': 156 $this->fireHTTPEvent('onGet'); 157 break; 158 159 case 'HEAD': 160 $this->fireHTTPEvent('onHead'); 161 break; 162 163 case 'POST': 164 $this->fireHTTPEvent('onPost'); 165 break; 166 167 case 'PUT': 168 $this->fireHTTPEvent('onPut'); 169 break; 170 } 171 } //receive 172 173 function respond($response) { 174 //build header info 175 //$response = $this->protocol . '/' . $this->protocolVersion . ' ' . 176 //$this->statusCode . ' ' . $this->httpStatusCodes->getCodeString($this->statusCode) . CRLF; 177 178 if (!headers_sent()) { //avoid generating an error when in debug mode 179 $this->setHeader('Date', "date('r')"); 180 $this->setHeader('Content-Length', strlen($response)); 181 $this->setHeader('Connection', 'Close'); 182 } 183 184 echo $response; 185 } //respond 186 } //php_http_server_generic 187 188 189 //To invoke the server, do: 190 //$httpServer = new php_http_server_generic(); //or instance of a subclass 191 //$httpServer->receive(); 192 193 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Wed Nov 21 14:43:32 2007 | par Balluche grâce à PHPXref 0.7 |
![]() |