Lastest

godaddy生成ssl证书

生成crt和private key openssl req -new -newkey rsa:2048 -nodes -keyout your_domain_name.key -out your_domain_name.csr 打开godaddy把生成的your_domain_name.csr提供给godaddy。godaddy会去生成证书。 下载godaddy证书。两个文件,一个大概叫做85814333f334c3c5d.crt,另一个大概叫做叫做gd_bundle-g2-g1.crt。把两个文件上传到服务器某一目录下。执行如下操作合并两个文件 cat 85814333f334c3c5d.crt gd_bundle-g2-g1.crt >> your_domain_name.cst 打开nginx网站配置文件,加入 listen 443 ssl http2; ssl on; ssl_certificate /存储路径/your_domain_name; ssl_certificate_key /存储路径/your_domain_name.cst; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers "...

OpenCart 3.x使用SwiftMailer发送邮件

描述 使用系统内置SMTP(system/library/mail/smtp.php)发邮件过程中,html邮件内容总是无法正确处理。 分析 OpenCart 3.x发邮件相关代码结构 mail接口 <?php // system/library/mail.php /** * @package OpenCart * @author Daniel Kerr * @copyright Copyright (c) 2005 - 2017, OpenCart, Ltd. (https://www.opencart.com/) * @license https://opensource.org/licenses/GPL-3.0 * @link https://www.opencart.com */ /** * Mail class */ class Mail { protected $to; protected $from; protected $sender; protected $reply_to; protected $subject; protected $text; protected $html; protected $attachments = ...

基于Swoole重构OpenCart启动代码后性能测试

状况 打开webbench测试,200客户端,60秒。并发只有265page/min。 [root@li1205-86 ~]# webbench -c 500 -t 60 http://swoole-opencart.shyclouds.com/ Webbench - Simple Web Benchmark 1.5 Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software. Benchmarking: GET http://swoole-opencart.shyclouds.com/ 500 clients, running 60 sec. Speed=265 pages/min, 82524 bytes/sec. Requests: 265 susceed, 0 failed. 整体CPU利用率只有10%-15%。 解决 代码问题 开了8个进程,也启动了8个进程,但实际只有1个进程在干活。 一通google发现Swoole\Http\Server启动参数设置不对. $http = new Server("127.0.0.1", 9000, SWOOLE_PROCESS, SWOOLE_SOCK_TCP); $http->set(array( 'task_worker_num' =>...

OpenCart 3.0基准测试

本片旨在测试当前环境下,opencart的benchmark。以方便对比后续常驻内存swoole版本的性能,得出优化成果。 环境 web server,单台1核2g内存VPS 数据库MySQL 5.6,单独一台2核4g内存vps 在database上发起webbench测试 测试准备 关闭opencart模板编译,关闭sccs编译 SET SQL_SAFE_UPDATES = 0; UPDATE oc_setting SET value=1 WHERE `key` = "developer_theme"; UPDATE oc_setting SET value=1 WHERE `key` = "developer_sass"; SET SQL_SAFE_UPDATES = 1; databse server上安装webbench。安装方法参照上一篇文章 开始测试 测试100 clients,60 seconds webbench -c 100 -t 60 http://swoole-opencart.shyclouds.com/ 开着top看了下webserver的反应,nginx占37%cpu,php-fpm八进程平均1%cpu。我这是在给nginx做压测。。。 重新运行测试,试图打开网站,然而网站此时已经nginx 502错误了。 解决办法 调大ngin...

swoole常驻内存性能优势

安装swoole 下载安装最新版本swoole 4.2.13 # 下载 wget https://github.com/swoole/swoole-src/archive/v4.2.13.tar.gz # 解压进入 tar -xzvf v4.2.13.tar.gz cd swoole-src-4.2.13 # 编译参数: ./configure --with-php-config=/usr/local/php/bin/php-config --enable-openssl --enable-http2 --enable-sockets --enable-mysqlnd # 安装 make & make install # 加入php.ini extension=swoole.so # php.ini disable_functions中去掉以下函数 proc_open, proc_get_status 安装压测工具webbench 局域网内另外一台服务器上安装webbench # 安装ctag先 yum install ctags wget http://blog.s135.com/soft/linux/webbench/webbench-1.5.tar.gz tar zxvf webbench-1.5.tar.gz cd webbench-1.5 ...

MySQL主从数据库同步设置

需求背景 我自己blog被墙,而我希望国内能正常访问,同时我自己写blog也不要太卡。刚好手头有一台国内闲置VPS。 所以决定这么折腾一下: 阿里云智能解析,境外访问解析到linode server; 国内访问,解析到腾讯云。 我日常写博客自然是写到linode server的数据库,我不可能手动同步俩数据库,所以设置数据库master slave吧 下面记录下如何设置master slave 找到数据库配置文件位置 找到mysql配置文件my.cnf的位置 # mysql --help|grep 'my.cnf' .... 本文假设配置文件位置:/etc/my.cnf 设置master 修改mysql配置文件/etc/my.cnf 开启master模式,server-id=1 log-bin = mysql-bin # 日志文件名称 server-id = 1 # 主数据库 ID = 1 binlog-do-db = game # 只同步game数据库 # 忽略mysql,performance_schema和information_schema三个库 binlog-ignore-db = mysql binlog-ignore-db = performance_schema binlog-ignore-db = in...

php解八皇后

回忆 八皇后问题,我心底放了多年的痛。还记得08年在西电上补习班,大神讲师三五句话就说完了八皇后问题,黑板上涂涂画画就讲完了算法原理。然而我,坐在下面一脸懵逼,很尴尬。被嘲讽是必然的。。。。 恰好昨天写动态规划,又想起了这个问题。干脆来实现下 直接上naive方法 逐行扫描,对于第i (0 <= i <= N-1)行,根据历史路径$histories(是一个(x,y)坐标集合,0 < = x <i, 0 <= y <= N-1)来生成当前行可用列$availables。 history中已经使用过的列y,不能再用 history中的(x,y)点,和当前(i,j), 0 <= i < = N-1,存在这样的关系:dist=i-x, (i,j) = (x+dist,y+dist), 或者(i,j) = (x-dist,y+dist),则说明当前j列位置不可用,因为他和之前的点在同一斜线上。 <?php const N = 12; $count = 0; function printHistory($row, $histories){ echo "==========n==========\n"; foreach($histories as $history){ echo "($histo...

PHP首次echo会让内存使用量增加x字节

始于群友提出的一个问题 <?php $m1 = memory_get_usage(); echo 'm1:' . $m1; $arr1 = []; for($i = 0; $i < 1000000; $i++){ $arr1[] = $i; } unset($i); echo PHP_EOL; $m2 = memory_get_usage(); echo 'm2:' . $m2; $arr2 = $arr1; echo PHP_EOL; echo 'm2-m1:' . ($m2 - $m1); echo PHP_EOL; $m3 = memory_get_usage(); echo 'm3:' . $m3; echo PHP_EOL; echo 'm3-m2:' . ($m3 - $m2); $arr3 = []; foreach ($arr2 as $key => $value) { $arr3[] = $value; } // unset($m1,$m2); $m4 = memory_get_usage(); echo PHP_EOL; echo 'm4:' . $m4; echo PHP_EOL; echo 'm4-m3:' . ($m4-$m3); 这段代码的输出如下,为什么(m4-m3)比(m2-m1)少32字节? m1:38841...

袋鼠从起点开始跳,问到终点有多少种不同的跳跃方式

题目 有一只袋鼠,它跳跃一次的方式只有两种:①一次跳1米 ②一次跳3米,现在有一段10米长的路,袋鼠从起点开始跳,问到终点有多少种不同的跳跃方式? 方法1:生成二叉树生成 每一步有两种选择:1米或者3米,所以解集是一棵二叉树,每一个节点代表一种选择。 假设当前运动位置是S,则S = sum(根节点 + ... +当前节点)。(我不知道markdown如何打数学公式,google出来的都没成功,凑合着看吧) 当前运动位置 > 10m,说明路走完了。结束当前路径搜索。 遍历二叉树,找到所有sum <?php const TOTAL_STEP = 10; const OPTION_STEP1 = 1; const OPTION_STEP3 = 3; $table = []; $count = 0; // 生成遍历二叉树 function gene1($path, $dist){ global $table; global $count; $path1 = 0; $path2 = 0; $count += 1; if($dist < TOTAL_STEP){ $path1 = $path . OPTION_STEP1; $set1 = gene1($path1, $dist +...

php自己实现排序算法和usort性能能差多少

实验目标 对比两种php排序方法的性能差异。第一种,php代码实现冒泡排序,第二种使用php内置函数usort排序。 实验设计 先生成一定规模的字符串,然后使用两种排序方法分别对齐排序,并对比运行时间。 排序要求: 假设我们有一大堆数据库记录,每条记录包含"a","b","c","d"四个字段。我们需要根据"a"字段的字符长度来进行降续排列。 生成随机数据库记录 //生成随机字符串 function RandomString($length) { $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; $randstring = ''; for ($i = 0; $i < $length; $i++) { $pos = rand(0, strlen($characters) - 1); $randstring .= $characters[$pos]; } return $randstring; } //生成对象数据 function generate_random_objects($keys...