diff --git a/app/Components/Namesilo.php b/app/Components/Namesilo.php index 90f71dc5..4925497f 100644 --- a/app/Components/Namesilo.php +++ b/app/Components/Namesilo.php @@ -36,7 +36,7 @@ class Namesilo { $result = XML2Array::createArray($result); // 出错 - if(empty($result['namesilo']) || $result['namesilo']['reply']['code'] != 300 || $result['namesilo']['reply']['detail'] != 'success'){ + if(empty($result['namesilo']) || $result['namesilo']['reply']['code'] != 300 || $result['namesilo']['reply']['detail'] !== 'success'){ Helpers::addNotificationLog('[Namesilo API] - ['.$operation.']', $content, 1, self::$systemConfig['webmaster_email'], 0, $result['namesilo']['reply']['detail']); }else{ diff --git a/app/Components/NetworkDetection.php b/app/Components/NetworkDetection.php index 1d20814a..fd129062 100644 --- a/app/Components/NetworkDetection.php +++ b/app/Components/NetworkDetection.php @@ -28,7 +28,7 @@ class NetworkDetection { } if(!$ret['success']){ - if($ret['error'] == "execute timeout (3s)"){ + if($ret['error'] === "execute timeout (3s)"){ sleep(10); return self::networkCheck($ip, $type, $port); @@ -76,7 +76,7 @@ class NetworkDetection { return false; } - if($ret['code'] != 1 || $ret['msg'] != "检测成功!"){ + if($ret['code'] != 1 || $ret['msg'] !== "检测成功!"){ Log::warning("【PING】检测".$ip."时,返回".json_encode($ret)); return false; diff --git a/app/Console/Commands/NodeBlockedDetection.php b/app/Console/Commands/NodeBlockedDetection.php index 70a5456a..c2813b71 100644 --- a/app/Console/Commands/NodeBlockedDetection.php +++ b/app/Console/Commands/NodeBlockedDetection.php @@ -63,7 +63,7 @@ class NodeBlockedDetection extends Command { } if($node->detection_type != 1){ $icmpCheck = NetworkDetection::networkCheck($node->ip, true); - if($icmpCheck != false && $icmpCheck != "通讯正常"){ + if($icmpCheck != false && $icmpCheck !== "通讯正常"){ $message .= "| ".$node->name." | ICMP | ".$icmpCheck." |\r\n"; $sendText = true; $info = true; @@ -71,7 +71,7 @@ class NodeBlockedDetection extends Command { } if($node->detection_type != 2){ $tcpCheck = NetworkDetection::networkCheck($node->ip, false, $node->single? $node->port : null); - if($tcpCheck != false && $tcpCheck != "通讯正常"){ + if($tcpCheck != false && $tcpCheck !== "通讯正常"){ $message .= "| ".$node->name." | TCP | ".$tcpCheck." |\r\n"; $sendText = true; $info = true; diff --git a/app/Http/Controllers/Admin/CouponController.php b/app/Http/Controllers/Admin/CouponController.php index 4e6f0719..60782e9e 100644 --- a/app/Http/Controllers/Admin/CouponController.php +++ b/app/Http/Controllers/Admin/CouponController.php @@ -89,21 +89,15 @@ class CouponController extends Controller { $type = $request->input('type'); // 优惠卷LOGO + $logo = null; if($request->hasFile('logo')){ - $file = $request->file('logo'); - $fileType = $file->getClientOriginalExtension(); + $logo = $this->uploadFile($request->file('logo')); - // 验证文件合法性 - if(!in_array($fileType, ['jpg', 'png', 'jpeg', 'bmp'])){ + if(!$logo){ return Redirect::back()->withInput()->withErrors('LOGO不合法'); } - - $logoName = date('YmdHis').random_int(1000, 2000).'.'.$fileType; - $move = $file->move(base_path().'/public/upload/image/', $logoName); - $logo = $move? '/upload/image/'.$logoName : ''; - }else{ - $logo = ''; } + try{ DB::beginTransaction(); $num = $request->input('num'); diff --git a/app/Http/Controllers/Admin/MarketingController.php b/app/Http/Controllers/Admin/MarketingController.php index c2d2d10b..9b783866 100644 --- a/app/Http/Controllers/Admin/MarketingController.php +++ b/app/Http/Controllers/Admin/MarketingController.php @@ -12,6 +12,7 @@ use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Log; use Response; +use RuntimeException; /** * 促销控制器 @@ -81,7 +82,7 @@ class MarketingController extends Controller { if($result->code){ // 失败 $this->addMarketing(2, $title, $content, -1, $result->message); - throw new Exception($result->message); + throw new RuntimeException($result->message); } $this->addMarketing(2, $title, $content, 1); diff --git a/app/Http/Controllers/Admin/ShopController.php b/app/Http/Controllers/Admin/ShopController.php index a7672fef..6e850476 100644 --- a/app/Http/Controllers/Admin/ShopController.php +++ b/app/Http/Controllers/Admin/ShopController.php @@ -58,20 +58,14 @@ class ShopController extends Controller { 'traffic.max' => '内含流量不能超过10TB', ]); - $logo = null; // 商品LOGO + $logo = null; if($request->hasFile('logo')){ - $file = $request->file('logo'); - $fileType = $file->getClientOriginalExtension(); + $logo = $this->uploadFile($request->file('logo')); - // 验证文件合法性 - if(!in_array($fileType, ['jpg', 'png', 'jpeg', 'bmp'])){ + if(!$logo){ return Redirect::back()->withInput()->withErrors('LOGO不合法'); } - - $logoName = date('YmdHis').random_int(1000, 2000).'.'.$fileType; - $move = $file->move(base_path().'/public/upload/image/', $logoName); - $logo = $move? '/upload/image/'.$logoName : ''; } try{ @@ -138,19 +132,13 @@ class ShopController extends Controller { // 商品LOGO if($request->hasFile('logo')){ - $file = $request->file('logo'); - $fileType = $file->getClientOriginalExtension(); + $logo = $this->uploadFile($request->file('logo')); - // 验证文件合法性 - if(!in_array($fileType, ['jpg', 'png', 'jpeg', 'bmp'])){ + if(!$logo){ Session::flash('errorMsg', 'LOGO不合法'); return Redirect::back()->withInput(); } - - $logoName = date('YmdHis').random_int(1000, 2000).'.'.$fileType; - $move = $file->move(base_path().'/public/upload/image/', $logoName); - $logo = $move? '/upload/image/'.$logoName : ''; Goods::query()->whereId($id)->update(['logo' => $logo]); } diff --git a/app/Http/Controllers/Admin/ToolsController.php b/app/Http/Controllers/Admin/ToolsController.php index d41f62da..7ab80254 100644 --- a/app/Http/Controllers/Admin/ToolsController.php +++ b/app/Http/Controllers/Admin/ToolsController.php @@ -140,7 +140,7 @@ class ToolsController extends Controller { $file = $request->file('uploadFile'); // 只能上传JSON文件 - if($file->getClientMimeType() != 'application/json' || $file->getClientOriginalExtension() != 'json'){ + if($file->getClientMimeType() !== 'application/json' || $file->getClientOriginalExtension() !== 'json'){ Session::flash('errorMsg', '只允许上传JSON文件'); return Redirect::back(); diff --git a/app/Http/Controllers/AdminController.php b/app/Http/Controllers/AdminController.php index 15a7ddae..baf4e050 100644 --- a/app/Http/Controllers/AdminController.php +++ b/app/Http/Controllers/AdminController.php @@ -83,23 +83,7 @@ class AdminController extends Controller { ->whereIn('status', [0, 1]) ->count(); // 流量超过100G的用户 - // 1小时内流量异常用户 - $tempUsers = []; - $userTotalTrafficList = UserTrafficHourly::query() - ->whereNodeId(0) - ->where('total', '>', MB * 100) - ->where('created_at', '>=', date('Y-m-d H:i:s', time() - 3900)) - ->groupBy('user_id') - ->selectRaw("user_id, sum(total) as totalTraffic") - ->get(); // 只统计100M以上的记录,加快速度 - if(!$userTotalTrafficList->isEmpty()){ - foreach($userTotalTrafficList as $vo){ - if($vo->totalTraffic > (self::$systemConfig['traffic_ban_value'] * GB)){ - $tempUsers[] = $vo->user_id; - } - } - } - $view['flowAbnormalUserCount'] = User::query()->whereIn('id', $tempUsers)->count(); + $view['flowAbnormalUserCount'] = count($this->trafficAbnormal());// 1小时内流量异常用户 $view['nodeCount'] = SsNode::query()->count(); $view['unnormalNodeCount'] = SsNode::query()->whereStatus(0)->count(); $flowCount = SsNodeTrafficDaily::query() @@ -123,6 +107,24 @@ class AdminController extends Controller { return Response::view('admin.index', $view); } + // 1小时内流量异常用户 + private function trafficAbnormal(): array { + $result = []; + $userTotalTrafficList = UserTrafficHourly::query() + ->whereNodeId(0) + ->where('total', '>', 50 * MB) + ->where('created_at', '>=', date('Y-m-d H:i:s', time() - 3900)) + ->groupBy('user_id') + ->selectRaw("user_id, sum(total) as totalTraffic") + ->get(); // 只统计50M以上的记录,加快速度 + foreach($userTotalTrafficList as $user){ + if($user->totalTraffic > (self::$systemConfig['traffic_ban_value'] * GB)){ + $result[] = $user->user_id; + } + } + return $result; + } + // 用户列表 public function userList(Request $request): \Illuminate\Http\Response { $id = $request->input('id'); @@ -194,22 +196,7 @@ class AdminController extends Controller { // 1小时内流量异常用户 if($flowAbnormal){ - $tempUsers = []; - $userTotalTrafficList = UserTrafficHourly::query() - ->whereNodeId(0) - ->where('total', '>', MB * 100) - ->where('created_at', '>=', date('Y-m-d H:i:s', time() - 3900)) - ->groupBy('user_id') - ->selectRaw("user_id, sum(total) as totalTraffic") - ->get(); // 只统计100M以上的记录,加快速度 - if(!$userTotalTrafficList->isEmpty()){ - foreach($userTotalTrafficList as $vo){ - if($vo->totalTraffic > (self::$systemConfig['traffic_ban_value'] * GB)){ - $tempUsers[] = $vo->user_id; - } - } - } - $query->whereIn('id', $tempUsers); + $query->whereIn('id', $this->trafficAbnormal()); } $userList = $query->orderByDesc('id')->paginate(15)->appends($request->except('page')); @@ -490,20 +477,15 @@ class AdminController extends Controller { }else{ $logo = ''; if($request->hasFile('logo')){ - $file = $request->file('logo'); - $fileType = $file->getClientOriginalExtension(); + $logo = $this->uploadFile($request->file('logo')); - // 验证文件合法性 - if(!in_array($fileType, ['jpg', 'png', 'jpeg', 'bmp'])){ + if(!$logo){ Session::flash('errorMsg', 'LOGO不合法'); return Redirect::back()->withInput(); } - - $logoName = date('YmdHis').random_int(1000, 2000).'.'.$fileType; - $move = $file->move(base_path().'/public/upload/image/', $logoName); - $logo = $move? '/upload/image/'.$logoName : ''; } + $article = new Article(); $article->title = $request->input('title'); $article->type = $request->input('type', 1); @@ -544,19 +526,13 @@ class AdminController extends Controller { }else{ $logo = ''; if($request->hasFile('logo')){ - $file = $request->file('logo'); - $fileType = $file->getClientOriginalExtension(); + $logo = $this->uploadFile($request->file('logo')); - // 验证文件合法性 - if(!in_array($fileType, ['jpg', 'png', 'jpeg', 'bmp'])){ + if(!$logo){ Session::flash('errorMsg', 'LOGO不合法'); return Redirect::back()->withInput(); } - - $logoName = date('YmdHis').random_int(1000, 2000).'.'.$fileType; - $move = $file->move(base_path().'/public/upload/image/', $logoName); - $logo = $move? '/upload/image/'.$logoName : ''; } } @@ -674,7 +650,7 @@ class AdminController extends Controller { $proxyType = 'V2Ray'; } - $data = $this->getUserNodeInfo($id, $node->id, $infoType != 'text'? 0 : 1); + $data = $this->getUserNodeInfo($id, $node->id, $infoType !== 'text'? 0 : 1); return Response::json(['status' => 'success', 'data' => $data, 'title' => $proxyType]); @@ -906,40 +882,22 @@ class AdminController extends Controller { // 首页LOGO if($request->hasFile('website_home_logo')){ - $file = $request->file('website_home_logo'); - $fileType = $file->getClientOriginalExtension(); - - // 验证文件合法性 - if(!in_array($fileType, ['jpg', 'png', 'jpeg', 'bmp'])){ + $ret = $this->uploadFile($request->file('website_home_logo')); + if(!$ret){ Session::flash('errorMsg', 'LOGO不合法'); - return Redirect::back(); } - - $logoName = date('YmdHis').random_int(1000, 2000).'.'.$fileType; - $move = $file->move(base_path().'/public/upload/image/', $logoName); - $websiteHomeLogo = $move? '/upload/image/'.$logoName : ''; - - Config::query()->whereName('website_home_logo')->update(['value' => $websiteHomeLogo]); + Config::query()->whereName('website_home_logo')->update(['value' => $ret]); } // 站内LOGO if($request->hasFile('website_logo')){ - $file = $request->file('website_logo'); - $fileType = $file->getClientOriginalExtension(); - - // 验证文件合法性 - if(!in_array($fileType, ['jpg', 'png', 'jpeg', 'bmp'])){ + $ret = $this->uploadFile($request->file('website_logo')); + if(!$ret){ Session::flash('errorMsg', 'LOGO不合法'); - return Redirect::back(); } - - $logoName = date('YmdHis').random_int(1000, 2000).'.'.$fileType; - $move = $file->move(base_path().'/public/upload/image/', $logoName); - $websiteLogo = $move? '/upload/image/'.$logoName : ''; - - Config::query()->whereName('website_logo')->update(['value' => $websiteLogo]); + Config::query()->whereName('website_logo')->update(['value' => $ret]); } Config::query()->whereName('website_analytics')->update(['value' => $websiteAnalytics]); @@ -1094,13 +1052,13 @@ class AdminController extends Controller { } $country = Country::query()->whereId($id)->first(); - if(empty($country)){ + if($country){ return Response::json(['status' => 'fail', 'data' => '', 'message' => '国家/地区不存在']); } // 校验该国家/地区下是否存在关联节点 $existNode = SsNode::query()->whereCountryCode($country->code)->get(); - if(!$existNode->isEmpty()){ + if(!$existNode){ return Response::json(['status' => 'fail', 'data' => '', 'message' => '该国家/地区下存在关联节点,请先取消关联']); } @@ -1121,13 +1079,13 @@ class AdminController extends Controller { } $country = Country::query()->whereId($id)->first(); - if(empty($country)){ + if(!$country){ return Response::json(['status' => 'fail', 'data' => '', 'message' => '国家/地区不存在']); } // 校验该国家/地区下是否存在关联节点 $existNode = SsNode::query()->whereCountryCode($country->code)->get(); - if(!$existNode->isEmpty()){ + if(!$existNode){ return Response::json(['status' => 'fail', 'data' => '', 'message' => '该国家/地区下存在关联节点,请先取消关联']); } $ret = false; @@ -1234,7 +1192,7 @@ class AdminController extends Controller { } // 如果是返利比例,则需要除100 - if($name == 'referral_percent'){ + if($name === 'referral_percent'){ $value = intval($value) / 100; } @@ -1380,7 +1338,7 @@ class AdminController extends Controller { $query->whereStatus($status); } - if(isset($range_time) && $range_time != ','){ + if(isset($range_time) && $range_time !== ','){ $range_time = explode(',', $range_time); $query->where('created_at', '>=', $range_time[0])->where('created_at', '<=', $range_time[1]); } diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index c722c572..1cb4e954 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -9,6 +9,7 @@ use Exception; use Illuminate\Foundation\Auth\Access\AuthorizesRequests; use Illuminate\Foundation\Bus\DispatchesJobs; use Illuminate\Foundation\Validation\ValidatesRequests; +use Illuminate\Http\UploadedFile; use Illuminate\Routing\Controller as BaseController; use RuntimeException; @@ -113,6 +114,21 @@ class Controller extends BaseController { return ''; } + // 上传文件处理 + public function uploadFile(UploadedFile $file): string { + $fileType = $file->getClientOriginalExtension(); + + // 验证文件合法性 + if(!in_array($fileType, ['jpg', 'png', 'jpeg', 'bmp'])){ + return false; + } + + $name = date('YmdHis').random_int(1000, 2000).'.'.$fileType; + $move = $file->move(base_path().'/public/upload/image/', $name); + + return $move? '/upload/image/'.$name : ''; + } + /** * 节点信息 * @@ -122,7 +138,7 @@ class Controller extends BaseController { * * @return string */ - public function getUserNodeInfo($uid, $nodeId, $infoType): ?string { + public function getUserNodeInfo($uid, $nodeId, $infoType): string { $user = User::whereId($uid)->first(); $node = SsNode::whereId($nodeId)->first(); $scheme = null; diff --git a/app/Http/Controllers/Gateway/CodePay.php b/app/Http/Controllers/Gateway/CodePay.php index 6bde9449..e184ae3d 100644 --- a/app/Http/Controllers/Gateway/CodePay.php +++ b/app/Http/Controllers/Gateway/CodePay.php @@ -30,7 +30,7 @@ class CodePay extends AbstractPayment { $urls = ''; foreach($data as $key => $val){ - if($val == '' || $key == 'sign'){ + if($val == '' || $key === 'sign'){ continue; } if($sign != ''){ @@ -52,7 +52,7 @@ class CodePay extends AbstractPayment { reset($_POST); $sign = ''; foreach($_POST as $key => $val){ - if($val == '' || $key == 'sign'){ + if($val == '' || $key === 'sign'){ continue; } if($sign){ diff --git a/app/Http/Controllers/Gateway/F2Fpay.php b/app/Http/Controllers/Gateway/F2Fpay.php index a693a847..00c188e5 100644 --- a/app/Http/Controllers/Gateway/F2Fpay.php +++ b/app/Http/Controllers/Gateway/F2Fpay.php @@ -82,9 +82,9 @@ class F2Fpay extends AbstractPayment { } $ret = "fail"; - if($result['code'] == 10000 && $result['msg'] == "Success"){ + if($result['code'] == 10000 && $result['msg'] === "Success"){ $ret = "success"; - if($_POST['trade_status'] == 'TRADE_FINISHED' || $_POST['trade_status'] == 'TRADE_SUCCESS'){ + if($_POST['trade_status'] === 'TRADE_FINISHED' || $_POST['trade_status'] === 'TRADE_SUCCESS'){ $this->postPayment($request->input('out_trade_no'), '支付宝当面付'); }else{ Log::info('支付宝当面付-POST:交易失败['.getClientIp().']'); diff --git a/app/Http/Controllers/Gateway/PayPal.php b/app/Http/Controllers/Gateway/PayPal.php index 44d8f6f4..20f679a6 100644 --- a/app/Http/Controllers/Gateway/PayPal.php +++ b/app/Http/Controllers/Gateway/PayPal.php @@ -124,7 +124,7 @@ class PayPal extends AbstractPayment { $response = (string) $this->provider->verifyIPN($post); - if($response == 'VERIFIED' && $request['invoice']){ + if($response === 'VERIFIED' && $request['invoice']){ if(Payment::whereTradeNo($request['invoice'])->first()->status == 0){ $this->postPayment($request['invoice'], 'PayPal'); } diff --git a/app/Http/Controllers/PaymentController.php b/app/Http/Controllers/PaymentController.php index 86b27102..bfeee053 100644 --- a/app/Http/Controllers/PaymentController.php +++ b/app/Http/Controllers/PaymentController.php @@ -110,7 +110,7 @@ class PaymentController extends Controller { } //非余额付款下,检查对应的在线支付是否开启 - if(self::$method != 'credit'){ + if(self::$method !== 'credit'){ // 判断是否开启在线支付 if(!Helpers::systemConfig()['is_onlinePay']){ return Response::json(['status' => 'fail', 'message' => '订单创建失败:系统并未开启在线支付功能']); @@ -153,12 +153,12 @@ class PaymentController extends Controller { return Response::json(['status' => 'fail', 'message' => '订单创建失败:订单总价异常']); } - if($amount == 0 && self::$method != 'credit'){ + if($amount == 0 && self::$method !== 'credit'){ return Response::json(['status' => 'fail', 'message' => '订单创建失败:订单总价为0,无需使用在线支付']); } // 验证账号余额是否充足 - if(self::$method == 'credit' && Auth::getUser()->credit < $amount){ + if(self::$method === 'credit' && Auth::getUser()->credit < $amount){ return Response::json(['status' => 'fail', 'message' => '您的余额不足,请先充值']); } } diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 8235672a..68d87943 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -180,7 +180,7 @@ class UserController extends Controller { }else{ $proxyType = 'V2Ray'; } - $data = $this->getUserNodeInfo(Auth::id(), $node->id, $infoType != 'text'? 0 : 1); + $data = $this->getUserNodeInfo(Auth::id(), $node->id, $infoType !== 'text'? 0 : 1); return Response::json(['status' => 'success', 'data' => $data, 'title' => $proxyType]); } diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php index 387995e5..888fdf21 100644 --- a/app/Http/Middleware/Authenticate.php +++ b/app/Http/Middleware/Authenticate.php @@ -13,7 +13,7 @@ class Authenticate extends Middleware { */ protected function redirectTo($request) { if(!$request->expectsJson()){ - return route('/login'); + return route('login'); } } } diff --git a/app/Http/Middleware/isForbidden.php b/app/Http/Middleware/isForbidden.php index 829451ea..f11522a4 100644 --- a/app/Http/Middleware/isForbidden.php +++ b/app/Http/Middleware/isForbidden.php @@ -70,8 +70,8 @@ class isForbidden { if(!in_array($ipInfo['country'], ['本机地址', '局域网'])){ // 拒绝大陆IP访问 if(Helpers::systemConfig()['is_forbid_china']){ - if(($isIPv6 && $ipInfo['country'] == 'China') - || ($ipInfo['country'] == '中国' + if(($isIPv6 && $ipInfo['country'] === 'China') + || ($ipInfo['country'] === '中国' && !in_array($ipInfo['province'], ['香港', '澳门', '台湾']))){ Log::info('识别到大陆IP,拒绝访问:'.$ip); @@ -81,7 +81,7 @@ class isForbidden { // 拒绝非大陆IP访问 if(Helpers::systemConfig()['is_forbid_oversea']){ - if(($isIPv6 && $ipInfo['country'] != 'China') || $ipInfo['country'] != '中国' + if(($isIPv6 && $ipInfo['country'] !== 'China') || $ipInfo['country'] !== '中国' || in_array($ipInfo['province'], ['香港', '澳门', '台湾'])){ Log::info('识别到海外IP,拒绝访问:'.$ip.' - '.$ipInfo['country']); diff --git a/app/Models/Order.php b/app/Models/Order.php index 90748139..2049a716 100644 --- a/app/Models/Order.php +++ b/app/Models/Order.php @@ -148,9 +148,6 @@ class Order extends Model { $base_path = '/assets/images/payment/'; switch($this->attributes['pay_type']){ - case 0: - $pay_type_icon = $base_path.'coin.png'; - break; case 1: $pay_type_icon = $base_path.'alipay.png'; break; @@ -160,14 +157,13 @@ class Order extends Model { case 3: $pay_type_icon = $base_path.'wechat.png'; break; - case 4: - $pay_type_icon = $base_path.'coin.png'; - break; case 5: $pay_type_icon = $base_path.'paypal.png'; break; + case 0: + case 4: default: - $pay_type_icon = ''; + $pay_type_icon = $base_path.'coin.png'; } return $pay_type_icon; } diff --git a/app/helpers.php b/app/helpers.php index a098ef99..3029b8e2 100644 --- a/app/helpers.php +++ b/app/helpers.php @@ -153,7 +153,7 @@ if(!function_exists('getClientIP')){ $ip = getenv('REMOTE_ADDR'); } - if(trim($ip) == '::1'){ + if(trim($ip) === '::1'){ $ip = '127.0.0.1'; } @@ -196,7 +196,7 @@ if(!function_exists('getIPv6')){ try{ $result = json_decode(Curl::send($url), true); if(!is_array($result) || isset($result['code'])){ - throw new \RuntimeException('解析IPv6异常:'.$ip); + throw new RuntimeException('解析IPv6异常:'.$ip); } return $result; diff --git a/readme.md b/readme.md index 6ccfb9b3..338928ce 100644 --- a/readme.md +++ b/readme.md @@ -17,7 +17,7 @@ Support but not limited to: Shadowsocks,ShadowsocksR,ShadowsocksRR,V2Ray,Trojan, - Mysql 5.5 + - Memory 1G + - Disk 10G + -- PHP Extensions: ZIP、XML、CURL、GD2、FileInfo、OpenSSL、Mbstring、PDO、Tokenizer、Ctype、JSON、BCMath +- PHP Extensions: ZIP、XML、CURL、GD2、FileInfo、Imagick、OpenSSL、Mbstring、PDO、Tokenizer、Ctype、JSON、BCMath - Laravel 5.8 ## Thanks