热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

视频网站56网的SDK-PHP源码

视频网站56网的SDK

视频网站56网的SDK

1. [图片] 视频网站56网的SDK

2. [文件] SDK.php

 0 ? '-' : '+').(abs(API_TIMEZONE_OFFSET)));
} else {
	putenv('Etc/GMT'.(API_TIMEZONE_OFFSET > 0 ? '-' : '+').(abs(API_TIMEZONE_OFFSET)));
}

/**
 * @description 常用配置.
 */	   	
error_reporting(E_ALL);
define('APPKEY','1000000010');
define('APPSECRET','0e4f13954bc537ec');
/**
 * @description 在oauth认证中请求的token
 */
define('ACCESS_TOKEN','');
define('CONNECT_TIMEOUT', 5);
define('READ_TIMEOUT', 5);

/**
 * @description 56网的接口类
 * 
 * @package open56Client
 */
class open56Client extends Exception{

	/**
	* 应用appkey
	*/
	public $appkey; 
	/**
	* 应用secret  
	*/
	public $secret;
	/**
	* 接口访问host
	*/
	public $domain = "http://oapi.56.com";
	/**
	* 用户授权access_token
	*/
	public $access_token;
	/**
	* 是否调试HTTP
	*/
	public $isDebugHttp = false;


	public function __construct($appkey,$secret){
		if(empty($appkey) || empty($secret)){
			try {
				throw new Exception("appkey or secret cannot be empty!");
			} catch(Exception $e) {
				echo $e->getMessage();
			}
		}
		$this->appkey = $appkey;
		$this->secret = $secret;
	}

	/**
	* @description 设置access_token,提供需要oauth授权才能访问的接口设置用户access_token,该值参与客户端签名。
	* 
	* @access public
	* @param mixed $token
	* @return void
	*/
	public function _setToken($token){
		if(!empty($token)){
			$this->access_token = $token;
		}	
		return $this;
	}

	/**
	* @description 简易上传组件地址
	* 
	* return void
	*/
	public function uploadUrl(){
		$url    = $this->domain."/video/upload.plugin";
		$params = array();
		return $url.'?'.self::signRequest($params);
	}

	/**
	* 复杂上传组件地址
	* 
	* @param $sid 第三方的应用的用户名
	* @param $css 获取的样式加密码
	* @param $rurl 失败时跳转的页面,获取返回信息
	* @param $ourl 成功时跳转的页面,获取返回信息
	*/
	public function customUrl($sid, $css, $rurl, $ourl){
		$url    = $this->domain."/video/custom.plugin";
		$params = array('sid'=> $sid,'css'=> $css ,'rurl'=> $rurl,'ourl'=> $ourl);
		return $url.'?'.self::signRequest($params);
	}

	/**
	* @description 获取视频信息
	* 
	* @param $flvid 56视频的flvid
	* @link /video/getVideoInfo.json
	* @return json
	*/
	public function  getVideoInfoApp($flvid){
		$url    = $this->domain.'/video/getVideoInfo.json';
		$params = array('vid'=>$flvid);
		return self::getHttp($url,$params);
	}

	/**
	* @description 获取更新视频信息的接口
	* 
	* @param $flvid 56视频的flvid
	* @param $title 56视频的名称
	* @param $desc  56视频的名称的描述
	* @param $tag   56视频的标签
	* @link  /video/update.json
	* @return json
	*/
	public function  updateApp($flvid,$title,$desc,$tag){
		$url    = $this->domain.'/video/update.json';
		$params = array('vid'=>$flvid,'title'=>$title,'desc'=>$desc,'tag'=>$tag);
		return self::getHttp($url,$params);
	}

	/*
	* @description 根据关键字获取搜索结果
	*   $data = array(
	*       'keyword'=> $keyword,  //要查找的关键字
	*       'c'=>1,
	*       't'=>'month', 时间,默认为month
	*       's'=>1,
	*       'page'=>1,     当前页数
	*       'rows'=>$rows, 10 每页显示多少个
	*    );  
	* @param $keyword 主要的字段,关键字搜索,其他的默认即可
	* @link  /video/search.json
	* @return json
	*/
	public function  searchVideo($data){
		$url    = $this->domain.'/video/search.json';
		$params = array();
		$params = array_merge($params,$data);
		return self::getHttp($url,$params);
	}

	/**
	* @description 获取用户的个人信息
	* 
	* @param $userid 用户在56网站的user_id或视频的flvid
	* @param $token oauth2认证后的令牌
	* @link  /user/userProfile.json
	* @return json
	*/
	public function userInfo($userid){
		$url	= $this->domain.'/user/userProfile.json';
		$params	= array('userid'=>$userid,'access_token'=>$token);
		return self::getHttp($url,$params);
	}

	/**
	* @description 获取用户的上传的视频
	* 
	* @param $userid 用户在56网站的user_id或视频的flvid
	* @param $token oauth2认证后的令牌
	* @link  /user/userVideos.json 
	* @return json
	*/
	public function userVideos($userid){
		$url    = $this->domain.'/user/userVideos.json';
		$params = array('userid'=>$userid,'access_token'=>$token,'s'=>'time','page'=>1,'rows'=>10);
		return self::getHttp($url,$params);
	}

	/**
	* @description 获得用户的评论或视频的评论
	* 
	* @param $tid 用户在56网站的user_id或视频的flvid
	* @param $type user/flv
	* @param $token oauth2认证后的令牌
	* @param $pct  1为普通视频 3是相册视频
	* @return json
	*/
	public function userComments($tid = 'onesec', $type = 'user', $pct = 1){
		$url    = $this->domain.'/user/userComments.json';
		$params = array('tid'=>$tid,'access_token'=>$token,'type'=> $type,'page'=>1,'rows'=>10, 'pct'=> $pct);
		return self::getHttp($url,$params);
	}

	/**
	* @description 获得频道的视频
	* 
	* @access public
	* @param string $cid
	* @param string $page
	* @param string $num
	* @return json
	*/
	public function channelVideo($cid = '68', $page = '1', $num = '20'){
		$url    = $this->domain.'/video/channel.json';
		$params = array('cid'=>$cid, 'page'=>$page, 'num'=>$num);
		return self::getHttp($url,$params);
	}

	/**
	* @description 获得推荐频道的视频
	* 
	* @access public
	* @param string $mid
	* @param string $page
	* @param string $num
	* @return json
	*/
	public function recommendVideo($mid = '16', $page = '1', $num = '10'){
		$url    = $this->domain.'/video/recommend.json';
		$params = array('mid'=>$mid, 'page'=>$page, 'num'=>$num);
		return self::getHttp($url,$params);
	}

	/**
	* @description 获得56网首页热门的视频
	* 
	* @access public
	* @param string $cid
	* @param string $page
	* @param string $num
	* @return json
	*/
	public function hotVideo($cid = '2', $page = '1', $num = '10'){
		$url    = $this->domain.'/video/hot.json';
		$params = array('cid'=>$cid, 'page'=>$page, 'num'=>$num);
		return self::getHttp($url,$params);
	}

	/**
	* @description 获得56网昨天或某天的推荐的相册视频
	* 
	* @access public
	* @param mixed $day
	* @return json|void
	*/
	public function albumVideo($day){
		$url    = $this->domain.'/video/recAlbum.json';
		$params = array('day'=>$day);
		return self::getHttp($url,$params);
	}

	/**
	* @description GET 方法
	* 
	* @access private
	* @param mixed $url
	* @param array $params
	* @return json
	*/
	public  function getHttp($url,$params=array()){
		$url = $url.'?'.self::signRequest($params);
		return self::httpCall($url);
	}

	/**
	* @description  POST 方法
	* 
	* @access private
	* @param mixed $url
	* @param mixed $params
	* @return json
	*/
	public  function postHttp($url,$params){
		return self::httpCall($url,self::signRequest($params),'post');
	}

	/**
	* @description  curl method,post方法params字符串的位置不同于get
	* 
	* @access public
	* @param mixed $url
	* @param string $params
	* @param string $method
	* @param mixed $connectTimeout
	* @param mixed $readTimeout
	* @return json
	*/
	public function httpCall($url ,$params = '',$method = 'get', $cOnnectTimeout= CONNECT_TIMEOUT, $readTimeout = READ_TIMEOUT) {

		$result = "";
		if (function_exists('curl_init')) {
			$timeout = $connectTimeout + $readTimeout;
			/** Use CURL if installed...  **/
			$ch = curl_init();
			curl_setopt($ch, CURLOPT_URL, $url);
			if (strtolower($method)==='post'){ 
				curl_setopt($ch, CURLOPT_POST, 1);
				curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
			}
			curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $connectTimeout);
			curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
			curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
			curl_setopt($ch, CURLOPT_USERAGENT, '56.com API PHP5 Client 1.1 (curl) ' . phpversion());
			$result = curl_exec($ch);
		} else{
			if (isset($params) and $params){
				$url = $url."?".http_build_query($params);
			}
		    /** Non-CURL based version... */
			$ctx = stream_context_create(
				array(  
					'http' => array(  
						'timeout' => 5 /** 设置一个超时时间,单位为秒 */
					)  
				)  
			);  
			$result = file_get_contents($url, 0, $ctx);
		}
		return $result;
	}

	/**
	* @description 签名方法实现,并构造一个参数串
	* 
	* @access private
	* @param mixed $params
	* @return void
	*/
	public  function signRequest($params){
		if ($this->access_token){
			$params['access_token'] = $this->access_token;
		}
		$keys   = self::urlencodeRfc3986(array_keys($params));
		$values = self::urlencodeRfc3986(array_values($params));
		if($keys and $values){
			$params = array_combine($keys,$values);
		}else{
			throw new Exception("signRequest need params exits!");
		}
		/**
		* 先去除系统级参数
		*/
		unset($params['appkey']);
		unset($params['ts']); 
		ksort($params);
		/**
		* 第一轮md5字符串
		* */	
		$req   =  md5(http_build_query($params));
		$ts    =  time();/**当次请求的时间戳**/
		/**第二轮md5字符串,得到最后的签名变量,注意里面的顺序不可以改变否则结果错误!**/
		$params['sign']   = md5($req.'#'.$this->appkey.'#'.$this->secret.'#'.$ts);
		$params['appkey'] = $this->appkey;
		$params['ts']=$ts;

		return http_build_query($params);
	}

	/**
	* @description 转码异常字符
	* 
	* @access public
	* @param mixed $input
	* @return void
	*/
	public static function urlencodeRfc3986($input){ 
		if (is_array($input)){
			return array_map( array('open56Client', 'urlencodeRfc3986') , $input );
		}else if( is_scalar($input)){
			return str_replace( '+' , ' ' , str_replace( '%7E' , '~' , rawurlencode($input)));
		}else{
			return '';
		}
	}
}


3. [代码][PHP]代码

 0 ? '-' : '+').(abs(API_TIMEZONE_OFFSET)));
} else {
	putenv('Etc/GMT'.(API_TIMEZONE_OFFSET > 0 ? '-' : '+').(abs(API_TIMEZONE_OFFSET)));
}

/**
 * @description 常用配置.
 */	   	
error_reporting(E_ALL);
define('APPKEY','1000000010');
define('APPSECRET','0e4f13954bc537ec');
/**
 * @description 在oauth认证中请求的token
 */
define('ACCESS_TOKEN','');
define('CONNECT_TIMEOUT', 5);
define('READ_TIMEOUT', 5);

/**
 * @description 56网的接口类
 * 
 * @package open56Client
 */
class open56Client extends Exception{

	/**
	* 应用appkey
	*/
	public $appkey; 
	/**
	* 应用secret  
	*/
	public $secret;
	/**
	* 接口访问host
	*/
	public $domain = "http://oapi.56.com";
	/**
	* 用户授权access_token
	*/
	public $access_token;
	/**
	* 是否调试HTTP
	*/
	public $isDebugHttp = false;


	public function __construct($appkey,$secret){
		if(empty($appkey) || empty($secret)){
			try {
				throw new Exception("appkey or secret cannot be empty!");
			} catch(Exception $e) {
				echo $e->getMessage();
			}
		}
		$this->appkey = $appkey;
		$this->secret = $secret;
	}

	/**
	* @description 设置access_token,提供需要oauth授权才能访问的接口设置用户access_token,该值参与客户端签名。
	* 
	* @access public
	* @param mixed $token
	* @return void
	*/
	public function _setToken($token){
		if(!empty($token)){
			$this->access_token = $token;
		}	
		return $this;
	}

	/**
	* @description 简易上传组件地址
	* 
	* return void
	*/
	public function uploadUrl(){
		$url    = $this->domain."/video/upload.plugin";
		$params = array();
		return $url.'?'.self::signRequest($params);
	}

	/**
	* 复杂上传组件地址
	* 
	* @param $sid 第三方的应用的用户名
	* @param $css 获取的样式加密码
	* @param $rurl 失败时跳转的页面,获取返回信息
	* @param $ourl 成功时跳转的页面,获取返回信息
	*/
	public function customUrl($sid, $css, $rurl, $ourl){
		$url    = $this->domain."/video/custom.plugin";
		$params = array('sid'=> $sid,'css'=> $css ,'rurl'=> $rurl,'ourl'=> $ourl);
		return $url.'?'.self::signRequest($params);
	}

	/**
	* @description 获取视频信息
	* 
	* @param $flvid 56视频的flvid
	* @link /video/getVideoInfo.json
	* @return json
	*/
	public function  getVideoInfoApp($flvid){
		$url    = $this->domain.'/video/getVideoInfo.json';
		$params = array('vid'=>$flvid);
		return self::getHttp($url,$params);
	}

	/**
	* @description 获取更新视频信息的接口
	* 
	* @param $flvid 56视频的flvid
	* @param $title 56视频的名称
	* @param $desc  56视频的名称的描述
	* @param $tag   56视频的标签
	* @link  /video/update.json
	* @return json
	*/
	public function  updateApp($flvid,$title,$desc,$tag){
		$url    = $this->domain.'/video/update.json';
		$params = array('vid'=>$flvid,'title'=>$title,'desc'=>$desc,'tag'=>$tag);
		return self::getHttp($url,$params);
	}

	/*
	* @description 根据关键字获取搜索结果
	*   $data = array(
	*       'keyword'=> $keyword,  //要查找的关键字
	*       'c'=>1,
	*       't'=>'month', 时间,默认为month
	*       's'=>1,
	*       'page'=>1,     当前页数
	*       'rows'=>$rows, 10 每页显示多少个
	*    );  
	* @param $keyword 主要的字段,关键字搜索,其他的默认即可
	* @link  /video/search.json
	* @return json
	*/
	public function  searchVideo($data){
		$url    = $this->domain.'/video/search.json';
		$params = array();
		$params = array_merge($params,$data);
		return self::getHttp($url,$params);
	}

	/**
	* @description 获取用户的个人信息
	* 
	* @param $userid 用户在56网站的user_id或视频的flvid
	* @param $token oauth2认证后的令牌
	* @link  /user/userProfile.json
	* @return json
	*/
	public function userInfo($userid){
		$url	= $this->domain.'/user/userProfile.json';
		$params	= array('userid'=>$userid,'access_token'=>$token);
		return self::getHttp($url,$params);
	}

	/**
	* @description 获取用户的上传的视频
	* 
	* @param $userid 用户在56网站的user_id或视频的flvid
	* @param $token oauth2认证后的令牌
	* @link  /user/userVideos.json 
	* @return json
	*/
	public function userVideos($userid){
		$url    = $this->domain.'/user/userVideos.json';
		$params = array('userid'=>$userid,'access_token'=>$token,'s'=>'time','page'=>1,'rows'=>10);
		return self::getHttp($url,$params);
	}

	/**
	* @description 获得用户的评论或视频的评论
	* 
	* @param $tid 用户在56网站的user_id或视频的flvid
	* @param $type user/flv
	* @param $token oauth2认证后的令牌
	* @param $pct  1为普通视频 3是相册视频
	* @return json
	*/
	public function userComments($tid = 'onesec', $type = 'user', $pct = 1){
		$url    = $this->domain.'/user/userComments.json';
		$params = array('tid'=>$tid,'access_token'=>$token,'type'=> $type,'page'=>1,'rows'=>10, 'pct'=> $pct);
		return self::getHttp($url,$params);
	}

	/**
	* @description 获得频道的视频
	* 
	* @access public
	* @param string $cid
	* @param string $page
	* @param string $num
	* @return json
	*/
	public function channelVideo($cid = '68', $page = '1', $num = '20'){
		$url    = $this->domain.'/video/channel.json';
		$params = array('cid'=>$cid, 'page'=>$page, 'num'=>$num);
		return self::getHttp($url,$params);
	}

	/**
	* @description 获得推荐频道的视频
	* 
	* @access public
	* @param string $mid
	* @param string $page
	* @param string $num
	* @return json
	*/
	public function recommendVideo($mid = '16', $page = '1', $num = '10'){
		$url    = $this->domain.'/video/recommend.json';
		$params = array('mid'=>$mid, 'page'=>$page, 'num'=>$num);
		return self::getHttp($url,$params);
	}

	/**
	* @description 获得56网首页热门的视频
	* 
	* @access public
	* @param string $cid
	* @param string $page
	* @param string $num
	* @return json
	*/
	public function hotVideo($cid = '2', $page = '1', $num = '10'){
		$url    = $this->domain.'/video/hot.json';
		$params = array('cid'=>$cid, 'page'=>$page, 'num'=>$num);
		return self::getHttp($url,$params);
	}

	/**
	* @description 获得56网昨天或某天的推荐的相册视频
	* 
	* @access public
	* @param mixed $day
	* @return json|void
	*/
	public function albumVideo($day){
		$url    = $this->domain.'/video/recAlbum.json';
		$params = array('day'=>$day);
		return self::getHttp($url,$params);
	}

	/**
	* @description GET 方法
	* 
	* @access private
	* @param mixed $url
	* @param array $params
	* @return json
	*/
	public  function getHttp($url,$params=array()){
		$url = $url.'?'.self::signRequest($params);
		return self::httpCall($url);
	}

	/**
	* @description  POST 方法
	* 
	* @access private
	* @param mixed $url
	* @param mixed $params
	* @return json
	*/
	public  function postHttp($url,$params){
		return self::httpCall($url,self::signRequest($params),'post');
	}

	/**
	* @description  curl method,post方法params字符串的位置不同于get
	* 
	* @access public
	* @param mixed $url
	* @param string $params
	* @param string $method
	* @param mixed $connectTimeout
	* @param mixed $readTimeout
	* @return json
	*/
	public function httpCall($url ,$params = '',$method = 'get', $cOnnectTimeout= CONNECT_TIMEOUT, $readTimeout = READ_TIMEOUT) {

		$result = "";
		if (function_exists('curl_init')) {
			$timeout = $connectTimeout + $readTimeout;
			/** Use CURL if installed...  **/
			$ch = curl_init();
			curl_setopt($ch, CURLOPT_URL, $url);
			if (strtolower($method)==='post'){ 
				curl_setopt($ch, CURLOPT_POST, 1);
				curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
			}
			curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $connectTimeout);
			curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
			curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
			curl_setopt($ch, CURLOPT_USERAGENT, '56.com API PHP5 Client 1.1 (curl) ' . phpversion());
			$result = curl_exec($ch);
		} else{
			if (isset($params) and $params){
				$url = $url."?".http_build_query($params);
			}
		    /** Non-CURL based version... */
			$ctx = stream_context_create(
				array(  
					'http' => array(  
						'timeout' => 5 /** 设置一个超时时间,单位为秒 */
					)  
				)  
			);  
			$result = file_get_contents($url, 0, $ctx);
		}
		return $result;
	}

	/**
	* @description 签名方法实现,并构造一个参数串
	* 
	* @access private
	* @param mixed $params
	* @return void
	*/
	public  function signRequest($params){
		if ($this->access_token){
			$params['access_token'] = $this->access_token;
		}
		$keys   = self::urlencodeRfc3986(array_keys($params));
		$values = self::urlencodeRfc3986(array_values($params));
		if($keys and $values){
			$params = array_combine($keys,$values);
		}else{
			throw new Exception("signRequest need params exits!");
		}
		/**
		* 先去除系统级参数
		*/
		unset($params['appkey']);
		unset($params['ts']); 
		ksort($params);
		/**
		* 第一轮md5字符串
		* */	
		$req   =  md5(http_build_query($params));
		$ts    =  time();/**当次请求的时间戳**/
		/**第二轮md5字符串,得到最后的签名变量,注意里面的顺序不可以改变否则结果错误!**/
		$params['sign']   = md5($req.'#'.$this->appkey.'#'.$this->secret.'#'.$ts);
		$params['appkey'] = $this->appkey;
		$params['ts']=$ts;

		return http_build_query($params);
	}

	/**
	* @description 转码异常字符
	* 
	* @access public
	* @param mixed $input
	* @return void
	*/
	public static function urlencodeRfc3986($input){ 
		if (is_array($input)){
			return array_map( array('open56Client', 'urlencodeRfc3986') , $input );
		}else if( is_scalar($input)){
			return str_replace( '+' , ' ' , str_replace( '%7E' , '~' , rawurlencode($input)));
		}else{
			return '';
		}
	}
}

推荐阅读
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文讲述了作者通过点火测试男友的性格和承受能力,以考验婚姻问题。作者故意不安慰男友并再次点火,观察他的反应。这个行为是善意的玩人,旨在了解男友的性格和避免婚姻问题。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
author-avatar
世界第一1945_307
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有