<?php
namespace app\index\controller;
class Base
{
protected $input;
protected $httpClient;
protected function initialize()
{
parent::initialize();
set_time_limit(900); // 最大超时15分钟
$input = request()->getInput();
if (empty($input) || empty($input = json_decode($input, false))) {
$this->breakInit(ajax_json_all(20002, '参数错误,请求传json数据流'));
}
$this->input = $input;
$options = array();
if (env('islocal', false)) {
$options['proxy'] = '127.0.0.1:10809';
$options['verify'] = false;
}
$this->httpClient = new \GuzzleHttp\Client($options);
}
/**
* 中断init
*/
private function breakInit($response) {
if (!empty($response) && $response instanceof \think\Response) {
throw new \think\exception\HttpResponseException($response);
}
}
// 立即响应,响应给请求端后继续执行业务
private function jsonImmediately($code = 0, $msg = 'ok', $data = []) {
if (is_array($code)) {
$response = $code;
}else{
$response = array('code' => $code, 'msg' => $msg, 'data' => $data);
}
ob_end_clean();
header("Connection: close");
header("HTTP/1.1 200 OK");
header("Content-Type: application/json;charset=utf-8");// 如果前端要的是json则添加,默认是返回的html/text
ob_start();
echo json_encode($response);// 输出结果到前端
$size = ob_get_length();
header("Content-Length: $size");
ob_end_flush();
flush();
if (function_exists("fastcgi_finish_request")) { // yii或yaf默认不会立即输出,加上此句即可(前提是用的fpm)
fastcgi_finish_request(); // 响应完成, 立即返回到前端,关闭连接
}
ignore_user_abort(true);// 在关闭连接后,继续运行php脚本
}
// 回调响应输出
private function backResponse($url, $params) {
try {
$this->httpClient->request('POST', $url, [
'verify' => false,
'timeout' => 60,
'form_params' => $params
]);
return false;
}
catch(\GuzzleHttp\Exception\TransferException $e) {
return $e->getMessage();
}
}
}
10-18
419
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交