网络编程
位置:首页>> 网络编程>> php编程>> PHP模拟asp中response类实现方法

PHP模拟asp中response类实现方法

作者:Minho  发布时间:2024-06-05 09:39:32 

标签:PHP,模拟

本文实例讲述了PHP模拟asp中response类的方法。分享给大家供大家参考。具体如下:

习惯了asp或是asp.net开发的人, 他们会经常用到response类,这个类用于处理客户端的响应,可以实现跳转,输出等功能. 在php中没有这个类,但是确实可以通过函数来模拟这个类.


/*
* 类用途: 实现类似于asp中的response功能
*/
final class Response {
 private $headers = array();  
 private $output;
 private $level = 0;
 public function addHeader($key, $value) {
   $this->headers[$key] = $value;
 }
 public function removeHeader($key) {
   if (isset($this->headers[$key])) {
     unset($this->headers[$key]);
   }
 }
 public function redirect($url) {
   header('Location: ' . $url);
   exit;
 }
 public function setOutput($output, $level = 0) {
   $this->output = $output;
   $this->level = $level;
 }
 private function compress($data, $level = 0) {
   if (isset($_SERVER['HTTP_ACCEPT_ENCODING']) && (strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== FALSE)) {
     $encoding = 'gzip';
   }  
   if (isset($_SERVER['HTTP_ACCEPT_ENCODING']) && (strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'x-gzip') !== FALSE)) {
     $encoding = 'x-gzip';
   }
   if (!isset($encoding)) {
     return $data;
   }
   if (!extension_loaded('zlib') || ini_get('zlib.output_compression')) {
     return $data;
   }
   if (headers_sent()) {
     return $data;
   }
   if (connection_status()) {  
     return $data;
   }
   $this->addHeader('Content-Encoding', $encoding);
   return gzencode($data, (int)$level);
 }
 public function output() {
   if ($this->level) {
     $ouput = $this->compress($this->output, $this->level);
   } else {
     $ouput = $this->output;
   }  
   if (!headers_sent()) {
     foreach ($this->headers as $key => $value) {
       header($key . ': ' . $value);
     }
   }
   echo $ouput;
 }
}

希望本文所述对大家的php程序设计有所帮助。

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com