侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

YII Framework学习之request与response用法(基于CHttpRequest响应)

框架(架构)  /  管理员 发布于 7年前   186

本文实例讲述了YII Framework学习之request与response用法。分享给大家供大家参考,具体如下:

YII中提供了CHttpRequest,封装了请求常用的方法。具体代码如下:

class CHttpRequest extends CApplicationComponent{  public $enableCookieValidation=false;  public $enableCsrfValidation=false;  public $csrfTokenName='YII_CSRF_TOKEN';  public $csrfCookie;  private $_requestUri;  private $_pathInfo;  private $_scriptFile;  private $_scriptUrl;  private $_hostInfo;  private $_baseUrl;  private $_cookies;  private $_preferredLanguage;  private $_csrfToken;  private $_deleteParams;  private $_putParams;  public function init()  {    parent::init();    $this->normalizeRequest();  }  protected function normalizeRequest()  {    // normalize request    if(function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc())    {      if(isset($_GET))        $_GET=$this->stripSlashes($_GET);      if(isset($_POST))        $_POST=$this->stripSlashes($_POST);      if(isset($_REQUEST))        $_REQUEST=$this->stripSlashes($_REQUEST);      if(isset($_COOKIE))        $_COOKIE=$this->stripSlashes($_COOKIE);    }    if($this->enableCsrfValidation)      Yii::app()->attachEventHandler('onBeginRequest',array($this,'validateCsrfToken'));  }  public function stripSlashes(&$data)  {    return is_array($data)?array_map(array($this,'stripSlashes'),$data):stripslashes($data);  }  public function getParam($name,$defaultValue=null)  {    return isset($_GET[$name]) ? $_GET[$name] : (isset($_POST[$name]) ? $_POST[$name] : $defaultValue);  }  public function getQuery($name,$defaultValue=null)  {    return isset($_GET[$name]) ? $_GET[$name] : $defaultValue;  }  public function getPost($name,$defaultValue=null)  {    return isset($_POST[$name]) ? $_POST[$name] : $defaultValue;  }  public function getDelete($name,$defaultValue=null)  {    if($this->_deleteParams===null)      $this->_deleteParams=$this->getIsDeleteRequest() ? $this->getRestParams() : array();    return isset($this->_deleteParams[$name]) ? $this->_deleteParams[$name] : $defaultValue;  }  public function getPut($name,$defaultValue=null)  {    if($this->_putParams===null)      $this->_putParams=$this->getIsPutRequest() ? $this->getRestParams() : array();    return isset($this->_putParams[$name]) ? $this->_putParams[$name] : $defaultValue;  }  protected function getRestParams()  {    $result=array();    if(function_exists('mb_parse_str'))      mb_parse_str(file_get_contents('php://input'), $result);    else      parse_str(file_get_contents('php://input'), $result);    return $result;  }  public function getUrl()  {    return $this->getRequestUri();  }  public function getHostInfo($schema='')  {    if($this->_hostInfo===null)    {      if($secure=$this->getIsSecureConnection())        $http='https';      else        $http='http';      if(isset($_SERVER['HTTP_HOST']))        $this->_hostInfo=$http.'://'.$_SERVER['HTTP_HOST'];      else      {        $this->_hostInfo=$http.'://'.$_SERVER['SERVER_NAME'];        $port=$secure ? $this->getSecurePort() : $this->getPort();        if(($port!==80 && !$secure) || ($port!==443 && $secure))          $this->_hostInfo.=':'.$port;      }    }    if($schema!=='')    {      $secure=$this->getIsSecureConnection();      if($secure && $schema==='https' || !$secure && $schema==='http')        return $this->_hostInfo;      $port=$schema==='https' ? $this->getSecurePort() : $this->getPort();      if($port!==80 && $schema==='http' || $port!==443 && $schema==='https')        $port=':'.$port;      else        $port='';      $pos=strpos($this->_hostInfo,':');      return $schema.substr($this->_hostInfo,$pos,strcspn($this->_hostInfo,':',$pos+1)+1).$port;    }    else      return $this->_hostInfo;  }  public function setHostInfo($value)  {    $this->_hostInfo=rtrim($value,'/');  }  public function getBaseUrl($absolute=false)  {    if($this->_baseUrl===null)      $this->_baseUrl=rtrim(dirname($this->getScriptUrl()),'\\/');    return $absolute ? $this->getHostInfo() . $this->_baseUrl : $this->_baseUrl;  }  public function setBaseUrl($value)  {    $this->_baseUrl=$value;  }  public function getScriptUrl()  {    if($this->_scriptUrl===null)    {      $scriptName=basename($_SERVER['SCRIPT_FILENAME']);      if(basename($_SERVER['SCRIPT_NAME'])===$scriptName)        $this->_scriptUrl=$_SERVER['SCRIPT_NAME'];      else if(basename($_SERVER['PHP_SELF'])===$scriptName)        $this->_scriptUrl=$_SERVER['PHP_SELF'];      else if(isset($_SERVER['ORIG_SCRIPT_NAME']) && basename($_SERVER['ORIG_SCRIPT_NAME'])===$scriptName)        $this->_scriptUrl=$_SERVER['ORIG_SCRIPT_NAME'];      else if(($pos=strpos($_SERVER['PHP_SELF'],'/'.$scriptName))!==false)        $this->_scriptUrl=substr($_SERVER['SCRIPT_NAME'],0,$pos).'/'.$scriptName;      else if(isset($_SERVER['DOCUMENT_ROOT']) && strpos($_SERVER['SCRIPT_FILENAME'],$_SERVER['DOCUMENT_ROOT'])===0)        $this->_scriptUrl=str_replace('\\','/',str_replace($_SERVER['DOCUMENT_ROOT'],'',$_SERVER['SCRIPT_FILENAME']));      else        throw new CException(Yii::t('yii','CHttpRequest is unable to determine the entry script URL.'));    }    return $this->_scriptUrl;  }  public function setScriptUrl($value)  {    $this->_scriptUrl='/'.trim($value,'/');  }  public function getPathInfo()  {    if($this->_pathInfo===null)    {      $pathInfo=$this->getRequestUri();      if(($pos=strpos($pathInfo,'?'))!==false)        $pathInfo=substr($pathInfo,0,$pos);      $pathInfo=urldecode($pathInfo);      $scriptUrl=$this->getScriptUrl();      $baseUrl=$this->getBaseUrl();      if(strpos($pathInfo,$scriptUrl)===0)        $pathInfo=substr($pathInfo,strlen($scriptUrl));      else if($baseUrl==='' || strpos($pathInfo,$baseUrl)===0)        $pathInfo=substr($pathInfo,strlen($baseUrl));      else if(strpos($_SERVER['PHP_SELF'],$scriptUrl)===0)        $pathInfo=substr($_SERVER['PHP_SELF'],strlen($scriptUrl));      else        throw new CException(Yii::t('yii','CHttpRequest is unable to determine the path info of the request.'));      $this->_pathInfo=trim($pathInfo,'/');    }    return $this->_pathInfo;  }  public function getRequestUri()  {    if($this->_requestUri===null)    {      if(isset($_SERVER['HTTP_X_REWRITE_URL'])) // IIS        $this->_requestUri=$_SERVER['HTTP_X_REWRITE_URL'];      else if(isset($_SERVER['REQUEST_URI']))      {        $this->_requestUri=$_SERVER['REQUEST_URI'];        if(isset($_SERVER['HTTP_HOST']))        {          if(strpos($this->_requestUri,$_SERVER['HTTP_HOST'])!==false)$this->_requestUri=preg_replace('/^\w+:\/\/[^\/]+/','',$this->_requestUri);        }        else          $this->_requestUri=preg_replace('/^(http|https):\/\/[^\/]+/i','',$this->_requestUri);      }      else if(isset($_SERVER['ORIG_PATH_INFO'])) // IIS 5.0 CGI      {        $this->_requestUri=$_SERVER['ORIG_PATH_INFO'];        if(!empty($_SERVER['QUERY_STRING']))          $this->_requestUri.='?'.$_SERVER['QUERY_STRING'];      }      else        throw new CException(Yii::t('yii','CHttpRequest is unable to determine the request URI.'));    }    return $this->_requestUri;  }  public function getQueryString()  {    return isset($_SERVER['QUERY_STRING'])?$_SERVER['QUERY_STRING']:'';  }  public function getIsSecureConnection()  {    return isset($_SERVER['HTTPS']) && !strcasecmp($_SERVER['HTTPS'],'on');  }  public function getRequestType()  {    return strtoupper(isset($_SERVER['REQUEST_METHOD'])?$_SERVER['REQUEST_METHOD']:'GET');  }  public function getIsPostRequest()  {    return isset($_SERVER['REQUEST_METHOD']) && !strcasecmp($_SERVER['REQUEST_METHOD'],'POST');  }  public function getIsDeleteRequest()  {    return isset($_SERVER['REQUEST_METHOD']) && !strcasecmp($_SERVER['REQUEST_METHOD'],'DELETE');  }  public function getIsPutRequest()  {    return isset($_SERVER['REQUEST_METHOD']) && !strcasecmp($_SERVER['REQUEST_METHOD'],'PUT');  }  public function getIsAjaxRequest()  {    return isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH']==='XMLHttpRequest';  }  public function getServerName()  {    return $_SERVER['SERVER_NAME'];  }  public function getServerPort()  {    return $_SERVER['SERVER_PORT'];  }  public function getUrlReferrer()  {    return isset($_SERVER['HTTP_REFERER'])?$_SERVER['HTTP_REFERER']:null;  }  public function getUserAgent()  {    return isset($_SERVER['HTTP_USER_AGENT'])?$_SERVER['HTTP_USER_AGENT']:null;  }  public function getUserHostAddress()  {    return isset($_SERVER['REMOTE_ADDR'])?$_SERVER['REMOTE_ADDR']:'127.0.0.1';  }  public function getUserHost()  {    return isset($_SERVER['REMOTE_HOST'])?$_SERVER['REMOTE_HOST']:null;  }  public function getScriptFile()  {    if($this->_scriptFile!==null)      return $this->_scriptFile;    else      return $this->_scriptFile=realpath($_SERVER['SCRIPT_FILENAME']);  }  public function getBrowser($userAgent=null)  {    return get_browser($userAgent,true);  }  public function getAcceptTypes()  {    return isset($_SERVER['HTTP_ACCEPT'])?$_SERVER['HTTP_ACCEPT']:null;  }  private $_port;  public function getPort()  {    if($this->_port===null)      $this->_port=!$this->getIsSecureConnection() && isset($_SERVER['SERVER_PORT']) ? (int)$_SERVER['SERVER_PORT'] : 80;    return $this->_port;  }  public function setPort($value)  {    $this->_port=(int)$value;    $this->_hostInfo=null;  }  private $_securePort;  public function getSecurePort()  {    if($this->_securePort===null)      $this->_securePort=$this->getIsSecureConnection() && isset($_SERVER['SERVER_PORT']) ? (int)$_SERVER['SERVER_PORT'] : 443;    return $this->_securePort;  }  public function setSecurePort($value)  {    $this->_securePort=(int)$value;    $this->_hostInfo=null;  }  public function getCookies()  {    if($this->_cookies!==null)      return $this->_cookies;    else      return $this->_cookies=new CCookieCollection($this);  }  public function redirect($url,$terminate=true,$statusCode=302)  {    if(strpos($url,'/')===0)      $url=$this->getHostInfo().$url;    header('Location: '.$url, true, $statusCode);    if($terminate)      Yii::app()->end();  }  public function getPreferredLanguage()  {    if($this->_preferredLanguage===null)    {      if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) && ($n=preg_match_all('/([\w\-_]+)\s*(;\s*q\s*=\s*(\d*\.\d*))?/',$_SERVER['HTTP_ACCEPT_LANGUAGE'],$matches))>0)      {        $languages=array();        for($i=0;$i<$n;++$i)          $languages[$matches[1][$i]]=empty($matches[3][$i]) ? 1.0 : floatval($matches[3][$i]);        arsort($languages);        foreach($languages as $language=>$pref)          return $this->_preferredLanguage=CLocale::getCanonicalID($language);      }      return $this->_preferredLanguage=false;    }    return $this->_preferredLanguage;  }  public function sendFile($fileName,$content,$mimeType=null,$terminate=true)  {    if($mimeType===null)    {      if(($mimeType=CFileHelper::getMimeTypeByExtension($fileName))===null)        $mimeType='text/plain';    }    header('Pragma: public');    header('Expires: 0');    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');    header("Content-type: $mimeType");    if(ini_get("output_handler")=='')      header('Content-Length: '.(function_exists('mb_strlen') ? mb_strlen($content,'8bit') : strlen($content)));    header("Content-Disposition: attachment; filename=\"$fileName\"");    header('Content-Transfer-Encoding: binary');    if($terminate)    {      // clean up the application first because the file downloading could take long time      // which may cause timeout of some resources (such as DB connection)      Yii::app()->end(0,false);      echo $content;      exit(0);    }    else      echo $content;  }  public function xSendFile($filePath, $options=array())  {    if(!is_file($filePath))      return false;    if(!isset($options['saveName']))      $options['saveName']=basename($filePath);    if(!isset($options['mimeType']))    {      if(($options['mimeType']=CFileHelper::getMimeTypeByExtension($filePath))===null)        $options['mimeType']='text/plain';    }    if(!isset($options['xHeader']))      $options['xHeader']='X-Sendfile';    header('Content-type: '.$options['mimeType']);    header('Content-Disposition: attachment; filename="'.$options['saveName'].'"');    header(trim($options['xHeader']).': '.$filePath);    if(!isset($options['terminate']) || $options['terminate'])      Yii::app()->end();    return true;  }  public function getCsrfToken()  {    if($this->_csrfToken===null)    {      $cookie=$this->getCookies()->itemAt($this->csrfTokenName);      if(!$cookie || ($this->_csrfToken=$cookie->value)==null)      {        $cookie=$this->createCsrfCookie();        $this->_csrfToken=$cookie->value;        $this->getCookies()->add($cookie->name,$cookie);      }    }    return $this->_csrfToken;  }  protected function createCsrfCookie()  {    $cookie=new CHttpCookie($this->csrfTokenName,sha1(uniqid(mt_rand(),true)));    if(is_array($this->csrfCookie))    {      foreach($this->csrfCookie as $name=>$value)        $cookie->$name=$value;    }    return $cookie;  }  public function validateCsrfToken($event)  {    if($this->getIsPostRequest())    {      // only validate POST requests      $cookies=$this->getCookies();      if($cookies->contains($this->csrfTokenName) && isset($_POST[$this->csrfTokenName]))      {        $tokenFromCookie=$cookies->itemAt($this->csrfTokenName)->value;        $tokenFromPost=$_POST[$this->csrfTokenName];        $valid=$tokenFromCookie===$tokenFromPost;      }      else        $valid=false;      if(!$valid)        throw new CHttpException(400,Yii::t('yii','The CSRF token could not be verified.'));    }  }}

request操作的相关方法,一目了然。

public function init(){  parent::init();  $this->normalizeRequest();}protected function normalizeRequest(){  // normalize request  if(function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc())  {    if(isset($_GET))      $_GET=$this->stripSlashes($_GET);    if(isset($_POST))      $_POST=$this->stripSlashes($_POST);    if(isset($_REQUEST))      $_REQUEST=$this->stripSlashes($_REQUEST);    if(isset($_COOKIE))      $_COOKIE=$this->stripSlashes($_COOKIE);  }  if($this->enableCsrfValidation)    Yii::app()->attachEventHandler('onBeginRequest',array($this,'validateCsrfToken'));}public function stripSlashes(&$data){  return is_array($data)?array_map(array($this,'stripSlashes'),$data):stripslashes($data);}

可以看到yii对$_GET\$_POST\$_REQUEST\$_COOKIE进行了必要的过滤处理,所以可以放心的使用数据。

常用的有如下方法:

获取get参数

public function getParam($name,$defaultValue=null)

获取get参数

public function getQuery($name,$defaultValue=null)

获取post数据

public function getPost($name,$defaultValue=null)

获取请求的url

public function getUrl()

获取主机信息

public function getHostInfo($schema='')

设置

public function setHostInfo($value)

获取根目录

public function getBaseUrl($absolute=false)

获取当前url

public function getScriptUrl()

获取请求的url

public function getRequestUri()

获取querystring

public function getQueryString()

判断是否是https

public function getIsSecureConnection()

获取请求类型

public function getRequestType()

是否是post请求

public function getIsPostRequest()

是否是ajax请求

public function getIsAjaxRequest()

获取服务器名称

public function getServerName()

获取服务端口

public function getServerPort()

获取引用路径

public function getUrlReferrer()

获取用户ip地址

public function getUserHostAddress()

获取用户主机名称

public function getUserHost()

获取执行脚本名称

public function getScriptFile()

获取cookie

public function getCookies()

重定向

public function redirect($url,$terminate=true,$statusCode=302)

设置下载文件头

public function sendFile($fileName,$content,$mimeType=null,$terminate=true){if($mimeType===null){if(($mimeType=CFileHelper::getMimeTypeByExtension($fileName))===null)$mimeType='text/plain';}header('Pragma: public');header('Expires: 0');header('Cache-Control: must-revalidate, post-check=0, pre-check=0');header("Content-type: $mimeType");if(ini_get("output_handler")=='')header('Content-Length: '.(function_exists('mb_strlen') ? mb_strlen($content,'8bit') : strlen($content)));header("Content-Disposition: attachment; filename=\"$fileName\"");header('Content-Transfer-Encoding: binary');if($terminate){// clean up the application first because the file downloading could take long time// which may cause timeout of some resources (such as DB connection)Yii::app()->end(0,false);echo $content;exit(0);}elseecho $content;}public function xSendFile($filePath, $options=array()){if(!is_file($filePath))return false;if(!isset($options['saveName']))$options['saveName']=basename($filePath);if(!isset($options['mimeType'])){if(($options['mimeType']=CFileHelper::getMimeTypeByExtension($filePath))===null)$options['mimeType']='text/plain';}if(!isset($options['xHeader']))$options['xHeader']='X-Sendfile';header('Content-type: '.$options['mimeType']);header('Content-Disposition: attachment; filename="'.$options['saveName'].'"');header(trim($options['xHeader']).': '.$filePath);if(!isset($options['terminate']) || $options['terminate'])Yii::app()->end();return true;}

为了防止csrf,yii提供了相应的方法
(
CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。
《CSRF的攻击方式详解 黑客必备知识》
)

public function getCsrfToken(){if($this->_csrfToken===null){$cookie=$this->getCookies()->itemAt($this->csrfTokenName);if(!$cookie || ($this->_csrfToken=$cookie->value)==null){$cookie=$this->createCsrfCookie();$this->_csrfToken=$cookie->value;$this->getCookies()->add($cookie->name,$cookie);}}return $this->_csrfToken;}protected function createCsrfCookie(){$cookie=new CHttpCookie($this->csrfTokenName,sha1(uniqid(mt_rand(),true)));if(is_array($this->csrfCookie)){foreach($this->csrfCookie as $name=>$value)$cookie->$name=$value;}return $cookie;}public function validateCsrfToken($event){if($this->getIsPostRequest()){// only validate POST requests$cookies=$this->getCookies();if($cookies->contains($this->csrfTokenName) && isset($_POST[$this->csrfTokenName])){$tokenFromCookie=$cookies->itemAt($this->csrfTokenName)->value;$tokenFromPost=$_POST[$this->csrfTokenName];$valid=$tokenFromCookie===$tokenFromPost;}else$valid=false;if(!$valid)throw new CHttpException(400,Yii::t('yii','The CSRF token could not be verified.'));}}

对于$_GET的使用,不仅仅可以使用$_GET和以上提供的相关方法,在action中,可以绑定到action的方法参数。

http://www.yiiframework.com/doc/guide/1.1/zh_cn/basics.controller

这里就一并罗列官方给出的说明。

从版本 1.1.4 开始,Yii 提供了对自动动作参数绑定的支持。 就是说,控制器动作可以定义命名的参数,参数的值将由 Yii 自动从 $_GET 填充。

为了详细说明此功能,假设我们需要为 PostController 写一个 create 动作。此动作需要两个参数:

category: 一个整数,代表帖子(post)要发表在的那个分类的ID。
language: 一个字符串,代表帖子所使用的语言代码。
从 $_GET 中提取参数时,我们可以不再下面这种无聊的代码了:

class PostController extends CController{  public function actionCreate()  {    if(isset($_GET['category']))      $category=(int)$_GET['category'];    else      throw new CHttpException(404,'invalid request');    if(isset($_GET['language']))      $language=$_GET['language'];    else      $language='en';    // ... fun code starts here ...  }}

现在使用动作参数功能,我们可以更轻松的完成任务:

class PostController extends CController{  public function actionCreate($category, $language='en')  {    $category=(int)$category;    // ... fun code starts here ...  }}

注意我们在动作方法 actionCreate 中添加了两个参数。 这些参数的名字必须和我们想要从 $_GET 中提取的名字一致。 当用户没有在请求中指定 $language 参数时,这个参数会使用默认值 en 。 由于 $category 没有默认值,如果用户没有在 $_GET 中提供 category 参数, 将会自动抛出一个 CHttpException (错误代码 400) 异常。 Starting from version 1.1.5, Yii also supports array type detection for action parameters. This is done by PHP type hinting using the syntax like the following:

class PostController extends CController{  public function actionCreate(array $categories)  {    // Yii will make sure $categories be an array  }}

That is, we add the keyword array in front of $categories in the method parameter declaration. By doing so, if $_GET['categories'] is a simple string, it will be converted into an array consisting of that string.

Note: If a parameter is declared without the array type hint, it means the parameter must be a scalar (i.e., not an array). In this case, passing in an array parameter via $_GET would cause an HTTP exception.

request的使用你只要保持和以前在php中的使用方式一样,在yii中是不会出错的

更多关于Yii相关内容感兴趣的读者可查看本站专题:《Yii框架入门及常用技巧总结》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php日期与时间用法总结》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

您可能感兴趣的文章:

  • PHP实现支持GET,POST,Multipart/form-data的HTTP请求类
  • php处理restful请求的路由类分享
  • 通过JS和PHP两种方法判断用户请求时使用的浏览器类型
  • php自定义类fsocket模拟post或get请求的方法
  • 解读PHP的Yii框架中请求与响应的处理流程
  • YII2框架中使用yii.js实现的post请求
  • yii2 在控制器中验证请求参数的使用方法
  • Yii框架通过请求组件处理get,post请求的方法分析
  • Yii 框架控制器创建使用及控制器响应操作示例
  • Yii框架响应组件用法实例分析
  • Yii2框架RESTful API 格式化响应,授权认证和速率限制三部分详解
  • PHP封装请求类实例分析【基于Yii框架】


  • 上一条:
    yii2.0实现pathinfo的形式访问的配置方法
    下一条:
    YII Framework的filter过滤器用法分析
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • Filament v3.1版本发布(0个评论)
    • docker + gitea搭建一个git服务器流程步骤(0个评论)
    • websocket的三种架构方式使用优缺点浅析(0个评论)
    • ubuntu20.4系统中宿主机安装nginx服务,docker容器中安装php8.2实现运行laravel10框架网站(0个评论)
    • phpstudy_pro(小皮面板)中安装最新php8.2.9版本流程步骤(0个评论)
    • 近期文章
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2018-05
    • 2020-02
    • 2020-03
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-08
    • 2020-11
    • 2021-03
    • 2021-09
    • 2021-10
    • 2021-11
    • 2022-01
    • 2022-02
    • 2022-03
    • 2022-08
    • 2023-08
    • 2023-10
    • 2023-12
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客