Laravel发送响应publicfunctionsend(){$this->sendHeaders();$this->sendContent();如果(function_exists('fastcgi_finish_request')){fastcgi_finish_request();}elseif('cli'!==PHP_SAPI){static::closeOutputBuffers(0,true);}return$this;}发送响应publicfunctionsendHeaders(){if(headers_sent()){return$this;}if(!$this->headers->has('Date')){$this->setDate(\DateTime::createFromFormat('U',time()));}foreach($this->headers->allPreserveCase()as$name=>$values){foreach($valuesas$value){header($name.':'.$value,false,$this->statusCode);}}header(sprintf('HTTP/%s%s%s',$this->version,$this->statusCode,$this->statusText),true,$this->statusCode);foreach($this->headers->getCookies()as$cookie){if($cookie->isRaw()){setrawcookie($cookie->getName(),$cookie->getValue(),$cookie->getExpiresTime(),$cookie->getPath(),$cookie->getDomain(),$cookie->isSecure(),$cookie->isHttpOnly());}else{setcookie($cookie->getName(),$cookie->getValue(),$cookie->getExpiresTime(),$cookie->getPath(),$cookie->getDomain(),$cookie->isSecure(),$cookie->isHttpOnly());}}return$this;}发送响应体publicfunctionsendContent(){echo$this->content;return$this;}发送给client//如果是fastcgi模式,结束client响应后,异步执行server端后续任务,比如中间件的terminate方法和事件等if(function_exists('fastcgi_finish_request')){fastcgi_finish_request();}elseif('cli'!==PHP_SAPI){static::closeOutputBuffers(0,true);}publicstaticfunctioncloseOutputBuffers($targetLevel,$flush){$status=ob_get_status(true);$level=count($status);$flags=defined('PHP_OUTPUT_HANDLER_REMOVABLE')?PHP_OUTPUT_HANDLER_REMOVABLE|($flush?PHP_OUTPUT_HANDLER_FLUSHABLE:PHP_OUTPUT_HANDLER_CLEA不可用):-1;while($level-->$targetLevel&&($s=$status[$level])&&(!isset($s['del'])?!isset($s['flags'])||$flags===($s['flags']&$flags):$s['del'])){if($flush){ob_end_flush();}else{ob_end_clean();}}}后续动作执行中间件的terminate方法和事件等到这里,框架的核心流程就全部完成了
