首页
友人帐
留言板
关于
Search
1
IDE Eval Resetter:JetBrains 全家桶无限试用插件
383 阅读
2
影视资源采集站收录大全
309 阅读
3
linux安装或升级protoc
226 阅读
4
VFM 3.7.5 源码 - 一个极简的 PHP 私人云盘!
163 阅读
5
批量采集美女写真等图片做图片站
150 阅读
谈天说地
程序源码
技术教程
成品源码
登录
Search
标签搜索
PHP
linux
源码
go
windows
centos
原创
mysql
微信
激活
采集
宝塔
绿色版
API
解析
SDK
图片
破解
域名
html
云青
累计撰写
150
篇文章
累计收到
82
条评论
首页
栏目
谈天说地
程序源码
技术教程
成品源码
页面
友人帐
留言板
关于
搜索到
92
篇与
的结果
2019-07-11
CentOS7中编译安装redis5.0
环境介绍CentOS7 (未安装Development Tools)下载Redis5.0-rc3 wget -O redis-5.0-rc3.tar.gz https://github.com/antirez/redis/archive/5.0-rc3.tar.gz解压redis tar -zxvf redis-5.0-rc3.tar.gz -C /usr/local编译并安装 cd /usr/local/redis-5.0-rc3 make此时会出错: compilation terminated. make[1]: *** [adlist.o] Error 1 make[1]: Leaving directory `/usr/local/redis-5.0-rc3/src' make: *** [all] Error 2安装Development Tools yum groupinstall 'Development Tools'再次执行,还会报错 make cd src && make all make[1]: Entering directory `/usr/local/redis-5.0-rc3/src' CC adlist.o In file included from adlist.c:34:0: zmalloc.h:50:31: fatal error: jemalloc/jemalloc.h: No such file or directory #include <jemalloc/jemalloc.h> ^ compilation terminated. make[1]: *** [adlist.o] Error 1 make[1]: Leaving directory `/usr/local/redis-5.0-rc3/src' make: *** [all] Error 2最后解决方案如下: cd /usr/local/redis-5.0-rc3/deps; make hiredis lua jemalloc linenoise编译完成后再次在/usr/local/redis-5.0-rc3中执行make命令 cd /usr/local/redis-5.0-rc3 make出现如下即编译成功 Hint: It's a good idea to run 'make test' ? make[1]: Leaving directory `/usr/local/redis-5.0-rc3/src'然后在/usr/local/redis-5.0-rc3/src中执行安装命令: cd /usr/local/redis-5.0-rc3/src make install会出现如下日志信息 Hint: It's a good idea to run 'make test' ? INSTALL install INSTALL install INSTALL install INSTALL install INSTALL install修改redis.conf配置文件 vim /usr/local/redis-5.0-rc3/redis.conf只需要调整如下几个即可 protected-mode no # 关闭保护模式 daemonize yes # 守护进程模式开启启动redis5.0 /usr/local/redis-5.0-rc3/src/redis-server /usr/local/redis-5.0-rc3/redis.conf其实我们在执行make install的时候会将src下面的几个命令复制到/usr/local/bin/下面去,也可以执行如下命令启动redis5.0 /usr/local/bin/redis-server /usr/local/redis-5.0-rc3/redis.conf检查端口 netstat -ltnp |grep 6379如果有端口监听,说明redis已经启动成功。连接下试试 redis-cli 127.0.0.1:6379> info # Server redis_version:4.9.103 redis_git_sha1:00000000 redis_git_dirty:0 redis_build_id:207f31cf830c081e redis_mode:standalone os:Linux 3.10.0-693.17.1.el7.x86_64 x86_64 arch_bits:64 multiplexing_api:epoll atomicvar_api:atomic-builtin gcc_version:4.8.5 process_id:20361 run_id:4835668974ad86f1db9b3c8b98e02be1a87a7b9b tcp_port:6379 uptime_in_seconds:689 uptime_in_days:0 hz:10 lru_clock:3944003 为什么能在任意目录执行redis-cli命令呢,因为redis-cli命令在/usr/local/bin目录里面,而该目录又配置在PATH中,所以你可以向执行ls、mkdir等命令的方式去执行redis-cli或者redis-server等命令。一般我们在安装完redis后就会将其安装包给删除,那么我们只需要将redis.conf配置文件移动的其他目录,比如:/etc/redis/redis.conf中,具体位置在哪请按照自己的习惯或者规范放置即可。
2019年07月11日
11 阅读
0 评论
0 点赞
2019-07-08
某宝购买的简历模板
n含套个人简历模板,自荐信模板,面试技巧等等就不一一截图了,各种风格任你挑选,总用一款适合你链接:https://pan.baidu.com/s/1C1iPJ54_KHYoQJkO_cIkxghttps://pan.baidu.com/s/1C1iPJ54_KHYoQJkO_cIkxg 提取码:ienj
2019年07月08日
3 阅读
0 评论
0 点赞
2019-06-30
PHP实现无顺序连贯操作
想必大家都用过tp的Db类吧,连贯操作是不是很酷实现很简单不需要用到__call方法简单分析一下tp框架的Db类 Db::name('user')->where('id', 1)->find()以上这行代码 首先调用name方法不过是静态的最后返回当前对象继续调用其他方法重点:结束时是return当前对象,静态方法使用 return new self() 返回,非静态使用 return $this;下面举一个小例子: <?php /** * @author anderyly * @email anderyly@sina.com * @link https://blog.aaayun.cc * @copyright Copyright (c) 2019 */ namespace ay; class Test { public static $name; public static function set($name) { self::$name = $name; return new self(); } public function add() { self::$name = "an" . self::$name; return $this; } public function get() { return self::$name; } }调用Test类 $name = Test::set('deryly')->add()->get(); echo $name; // 输出 anderyly
2019年06月30日
4 阅读
0 评论
0 点赞
2019-04-22
PHP实现微博登入(非开放平台)
用到官方的两个接口,一个是获取图片地址以及qrid,一个是用qrid验证二维码状态获取新浪登入二维码 public function getqrpic() { $url = "https://login.sina.com.cn/sso/qrcode/image?entry=weibo&size=180&callback=STK_" . $this->getTime(); $header = [ 'Accept:' => '*/*', 'Accept-Encoding:' => 'gzip, deflate, br', 'Accept-Language:' => 'en-US,en;q=0.9', 'Connection:' => 'keep-alive', 'Cookie:' => 'mm_lang=en; mm_lang=en', 'Host:' => 'login.wx.qq.com', 'Referer:' => 'https://wx.qq.com/', 'User-Agent:' => 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36' ]; $res = Curl::url($url)->setHeader($header)->get(); $regex = "#window(.*?)\(#"; $resArr = json_decode(rtrim(rtrim(preg_replace($regex, "", $res), ';'), ')'), true); // echo ltrim($resArr['data']['image'], '//'); if ($resArr['retcode'] == 20000000) { Json::msg(0, 'success', ['qrid' => $resArr['data']['qrid'], 'image' => 'https://' . ltrim($resArr['data']['image'], '//')]); } else { Json::msg(1, '二维码获取失败'); } }利用返回的qrid验证二维码状态 public function cron() { if (input('?get.qrid')) { $qrid = input('get.qrid'); } else { Json::msg(400, 'qrid不能为空'); } $url = "https://login.sina.com.cn/sso/qrcode/check?entry=weibo&qrid=" . $qrid . "&callback=STK_" . $this->getTime(); // echo $url;exit; $header = [ 'Accept:' => '*/*', 'Accept-Encoding:' => 'gzip, deflate, br', 'Accept-Language:' => 'en-US,en;q=0.9', 'Connection:' => 'keep-alive', 'Cookie:' => 'mm_lang=en; mm_lang=en', 'Host:' => 'login.wx.qq.com', 'Referer:' => 'https://wx.qq.com/', 'User-Agent:' => 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36' ]; $res = Curl::url($url)->setHeader($header)->get(); $regex = "#window(.*?)\(#"; $resArr = json_decode(rtrim(rtrim(preg_replace($regex, "", $res), ';'), ')'), true); if($resArr['retcode'] == 50114003){ Json::msg(205, '二维码已失效'); } elseif($resArr['retcode'] == 50114001) { Json::msg(202, '二维码未失效'); } elseif($resArr['retcode'] == 50114002) { Json::msg(204, '正在验证二维码'); } elseif ($resArr['retcode'] == 50114004) { Json::msg(204, '该二维码已登录,请重新扫描'); } elseif ($resArr['retcode'] == 20000000) { //Json::msg(200, 'sucess', $resArr); preg_match("/-(.*?)-/", $resArr['data']['alt'], $ts_arr); $wb = base64_decode($ts_arr[1]); // 这里写成功后的操作 // 扫码成功后会返回一个固定的base64,利用这个值登入吧 $this->reg($wb); } else{ Json::msg(306, $res); } }附getTime方法,此方法获取13位时间戳 private function getTime() { $arr = explode('.', microtime(true)); return (float)($arr[0] . substr($arr[1], 0 , 3)); }前端代码博主就不贴了,定时器罢了示例网站:http://www.chinawenshu.com
2019年04月22日
13 阅读
0 评论
0 点赞
2019-04-18
PHP实现QQ扫码登入,非开放平台
近期有个需求,需要做扫码登入,而又不想去开放平台申请,看了一下彩虹大神的提取qq的sid,提取了几个重要的方法原理就是生成二维码后,前端设置定时器查看二维码状态,因为没有openid只能保存固定的值,那就是qq号了 // 生成二维码 public function getqrpic() { $url = 'https://ssl.ptlogin2.qq.com/ptqrshow?appid=1006102&e=2&l=M&s=4&d=72&v=4&t=0.5409099' . time() . 'daid=1&pt_3rd_aid=0'; $arr = $this->get_curl($url, 0, 0, 0, 1, 0, 0, 1); preg_match('/qrsig=(.*?);/', $arr['header'], $match); if ($qrsig = $match[1]) { Json::msg(0, 'success', ['qrsig' => $qrsig, 'data' => base64_encode($arr['body'])]); } else { Json::msg(1, '二维码获取失败'); } } // 获取二维码状态 public function qqlogin() { error_reporting(0); if (input('?get.qrsig')) { $qrsig = input('get.qrsig'); } else { Json::msg(400, 'qrsig不能为空'); } $sig = ''; $url = 'https://ssl.ptlogin2.qq.com/ptqrlogin?u1=https%3A%2F%2Fid.qq.com%2Findex.html&ptqrtoken=' . $this->getqrtoken($qrsig) . '&ptredirect=1&h=1&t=1&g=1&from_ui=1&ptlang=2052&action=0-0-' . time() . '0000&js_ver=10291&js_type=1&login_sig=' . $sig . '&pt_uistyle=40&aid=1006102&daid=1&'; $ret = $this->get_curl($url, 0, $url, 'qrsig=' . $qrsig . '; ', 1); preg_match("/ptuiCB\('(.*?)'\)/", $ret, $ts_arr); $r = @explode("','", str_replace("', '", "','", $ts_arr[1])); if ($r[0] == 65) { Json::msg(205, '二维码已失效'); } elseif ($r[0] == 66) { Json::msg(202, '二维码未失效'); } elseif ($r[0] == 67) { Json::msg(204, '正在验证二维码'); } else { if (strpos($ret, '403')) Json::msg(306, $ret); } if (strlen($ret) > 1000) { $arr = explode(';', $ret); $data = substr($arr[17], strpos($arr[17], '=o') + 2, strlen($arr[17])); if (empty($data)) { Json::msg(400, '请切换二维码' . $ret); } $qq = ltrim($data, '0'); // $qq是qq号,下面写你接下来需要处理的语句 } } private function get_curl($url, $post = 0, $referer = 0, $cookie = 0, $header = 0, $ua = 0, $nobaody = 0, $split = 0) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); $httpheader[] = "Accept:*/*"; $httpheader[] = "Accept-Encoding:gzip,deflate,sdch"; $httpheader[] = "Accept-Language:zh-CN,zh;q=0.8"; $httpheader[] = "Connection:close"; curl_setopt($ch, CURLOPT_HTTPHEADER, $httpheader); if ($post) { curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post); } if ($header) { curl_setopt($ch, CURLOPT_HEADER, TRUE); } if ($cookie) { curl_setopt($ch, CURLOPT_COOKIE, $cookie); } if ($referer) { curl_setopt($ch, CURLOPT_REFERER, $referer); } if ($ua) { curl_setopt($ch, CURLOPT_USERAGENT, $ua); } else { curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.152 Safari/537.36'); } if ($nobaody) { curl_setopt($ch, CURLOPT_NOBODY, 1); } curl_setopt($ch, CURLOPT_ENCODING, "gzip"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $ret = curl_exec($ch); if ($split) { $headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE); $header = substr($ret, 0, $headerSize); $body = substr($ret, $headerSize); $ret = array(); $ret['header'] = $header; $ret['body'] = $body; } curl_close($ch); return $ret; }前端js getqrpic(); function getqrpic() { var getvcurl = "qlogin/getqrpic/r/" + Math.random(1); $.get(getvcurl, function (res) { console.log(res.info.qrsig) if (res.status == 0) { $('#qrimg').attr('qrsig', res.info.qrsig); $('#qrimg').html('<img onclick="getqrpic()" src="data:image/png;base64,' + res.info.data + '" title="点击刷新">'); } else { //alert(res.msg); } }, 'json'); } $(document).ready(function(){ interval1=setInterval(getMsg,2000); }); function getMsg() { var qrsig=$('#qrimg').attr('qrsig'); var getvcurl = "qlogin/qqlogin/qrsig/" + decodeURIComponent(qrsig) + '/r/' + Math.random(1); $.get(getvcurl, function (res) { if (res.status == 200) { // 这里写登入过后你执行的语句 } else if (res.status == 205 || res.status == 306) { getqrpic(); } else { } }, 'json'); }示例网站:http://www.chinawenshu.com
2019年04月18日
16 阅读
3 评论
0 点赞
1
...
11
12
13
...
19