/libraries/domit/php_http_server_generic.php

https://github.com/shafiqissani/Jewelery-Ecommerce- · PHP · 193 lines · 130 code · 35 blank · 28 comment · 19 complexity · 999a44250559013ae3ca306ba9df8154 MD5 · raw file

  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. if (!defined('PHP_HTTP_TOOLS_INCLUDE_PATH')) {
  17. define('PHP_HTTP_TOOLS_INCLUDE_PATH', (dirname(__FILE__) . "/"));
  18. }
  19. define ('CRLF', "\r\n"); //end-of-line char as defined in HTTP spec
  20. define ('CR', "\r");
  21. define ('LF', "\n");
  22. class php_http_server_generic {
  23. var $httpStatusCodes;
  24. var $protocol = 'HTTP';
  25. var $protocolVersion = '1.0';
  26. var $statusCode = 200;
  27. var $events = array('onRequest' => null, 'onResponse' => null,
  28. 'onGet' => null, 'onHead' => null,
  29. 'onPost' => null, 'onPut' => null);
  30. function php_http_server_generic() {
  31. //require_once(PHP_HTTP_TOOLS_INCLUDE_PATH . 'php_http_status_codes.php');
  32. //$this->httpStatusCodes =&new php_http_status_codes();
  33. } //php_http_server_generic
  34. function &getHeaders() {
  35. $headers = headers_list();
  36. $response = '';
  37. if (count($headers) > 0) {
  38. foreach ($headers as $key => $value) {
  39. $response .= $value . CRLF;
  40. }
  41. }
  42. return $response;
  43. } //getHeaders
  44. function setProtocolVersion($version) {
  45. if (($version == '1.0') || ($version == '1.1')) {
  46. $$this->protocolVersion = $version;
  47. return true;
  48. }
  49. return false;
  50. } //setProtocolVersion
  51. function setHeader($name, $value) {
  52. header($name . ': ' . $value);
  53. } //setHeader
  54. function setHeaders() {
  55. //you will want to override this method
  56. $this->setHeader('Content-Type', 'text/html');
  57. $this->setHeader('Server', 'PHP HTTP Server (Generic)/0.1');
  58. } //setHeaders
  59. function fireEvent($target, $data) {
  60. if ($this->events[$target] != null) {
  61. call_user_func($this->events[$target], $data);
  62. }
  63. } //fireEvent
  64. function fireHTTPEvent($target, $data = null) {
  65. if ($this->events[$target] == null) {
  66. //if no handler is assigned,
  67. //delegate the event to the default handler
  68. $this->setHTTPEvent($target);
  69. }
  70. call_user_func($this->events[$target], $data);
  71. } //fireHTTPEvent
  72. function setHTTPEvent($option, $customHandler = null) {
  73. if ($customHandler != null) {
  74. $handler =& $customHandler;
  75. }
  76. else {
  77. $handler = array(&$this, 'defaultHTTPEventHandler');
  78. }
  79. switch($option) {
  80. case 'onGet':
  81. case 'onHead':
  82. case 'onPost':
  83. case 'onPut':
  84. $this->events[$option] =& $handler;
  85. break;
  86. }
  87. } //setHTTPServerEvent
  88. function defaultHTTPHandler() {
  89. //will add functionality for this later
  90. //work with subclasses for the time being
  91. } //defaultHTTPHandler
  92. function setDebug($option, $truthVal, $customHandler = null) {
  93. if ($customHandler != null) {
  94. $handler =& $customHandler;
  95. }
  96. else {
  97. $handler = array(&$this, 'defaultDebugHandler');
  98. }
  99. switch($option) {
  100. case 'onRequest':
  101. case 'onResponse':
  102. $truthVal ? ($this->events[$option] =& $handler) :
  103. ($this->events[$option] = null);
  104. break;
  105. }
  106. } //setDebug
  107. function getDebug($option) {
  108. switch($option) {
  109. case 'onRequest':
  110. case 'onResponse':
  111. return ($this->events[$option] != null);
  112. break;
  113. }
  114. } //getDebug
  115. function defaultDebugHandler($data) {
  116. //just write to a log file, since can't display in a browser
  117. $this->writeDebug($data);
  118. } //defaultDebugHandler
  119. function writeDebug($data) {
  120. $filename = 'debug_' . time() . '.txt';
  121. $fileHandle = fopen($fileName, 'a');
  122. fwrite($fileHandle, $data);
  123. fclose($fileHandle);
  124. } //writeDebug
  125. function receive() {
  126. global $HTTP_SERVER_VARS;
  127. $requestMethod = strToUpper($HTTP_SERVER_VARS['REQUEST_METHOD']);
  128. switch ($requestMethod) {
  129. case 'GET':
  130. $this->fireHTTPEvent('onGet');
  131. break;
  132. case 'HEAD':
  133. $this->fireHTTPEvent('onHead');
  134. break;
  135. case 'POST':
  136. $this->fireHTTPEvent('onPost');
  137. break;
  138. case 'PUT':
  139. $this->fireHTTPEvent('onPut');
  140. break;
  141. }
  142. } //receive
  143. function respond($response) {
  144. //build header info
  145. //$response = $this->protocol . '/' . $this->protocolVersion . ' ' .
  146. //$this->statusCode . ' ' . $this->httpStatusCodes->getCodeString($this->statusCode) . CRLF;
  147. if (!headers_sent()) { //avoid generating an error when in debug mode
  148. $this->setHeader('Date', "date('r')");
  149. $this->setHeader('Content-Length', strlen($response));
  150. $this->setHeader('Connection', 'Close');
  151. }
  152. echo $response;
  153. } //respond
  154. } //php_http_server_generic
  155. //To invoke the server, do:
  156. //$httpServer = new php_http_server_generic(); //or instance of a subclass
  157. //$httpServer->receive();
  158. ?>