windows7计划任务定时运行bat的时候老是弹出一个窗口影响工作,网上搜索一般都是vbs方式,后来我发现只要在对应的计划任务->常规->选择不管用户是否登录都要运行,点确定,之后它运行的时候就不会弹出cmd窗口了。终于不影响工作了,简单方便。
【原创】Yii2使用swiftMailer发送QQ邮件
今天想在监控上做一个yii2使用qq邮箱发送邮件的功能。
一、安装swiftMailer扩展
默认yii 2.0会有这个扩展,如果没有就安装。
composer require –prefer-dist yiisoft/yii2-swiftmailer
或者修改composer.json,require加入: “yiisoft/yii2-swiftmailer”: “*”,
二、开启QQ邮箱IMAP/STMP服务
进入你的QQ邮箱,进入账户界面->设置->账户->开启服务:IMAP/SMTP服务
这里的意思是可以使用imap.qq.com作为邮件接收服务器,smtp.qq.com作为邮件发送服务器。
IMAP是什么?
IMAP,即Internet Message Access Protocol(互联网邮件访问协议),您可以通过这种协议从邮件服务器上获取邮件的信息、下载邮件等。IMAP与POP3类似,都是一种邮件获取协议。区别就是一个有消息反馈,一个没反馈。
根据页面要求发送短信开启后可以获取授权码,相当于发送账号的密码,记得保存下来。
三、修改yii2配置文件
我是修改了advanced\common\config\main-local.php,加入以下内容:
<?php return [ 'components' => [ 'mailer' => [ 'class' => 'yii\swiftmailer\Mailer', 'useFileTransport' =>false,//这句一定有,false发送邮件,true只是生成邮件在runtime文件夹下,不发邮件 'transport' => [ 'class' => 'Swift_SmtpTransport', 'host' => 'smtp.qq.com', //每种邮箱的host配置不一样 'username' => 'xxx@qq.com',//用发送开启了功能的邮箱 'password' => 'xxxxxx',//授权码 'port' => '465', 'encryption' => 'ssl', ], 'messageConfig'=>[ 'charset'=>'UTF-8', 'from'=>['xxx@qq.com'=>'admin'] ], ],
四、控制器或命令行编写发送代码
$url='http://www.jd.com/'; $mail= Yii::$app->mailer->compose(); $mail->setTo('xxx@foxmail.com'); $mail->setSubject("上架了"); //$mail->setTextBody('zheshisha '); //发布纯文字文本 $mail->setHtmlBody("<br>商品:<a href='".$url."' target='_blank'>购买地址</a>"); //发布可以带html标签的文本 if($mail->send()) echo "success"; else echo "failse"; //批量多发 $users = ['xxx1@qq.com', 'xxx2@qq.com']; $messages = []; foreach ($users as $user) { $messages[] = Yii::$app->mailer->compose() ->setTo($user) ->setSubject('测试主题') ->setHtmlBody('测试内容'); } Yii::$app->mailer->sendMultiple($messages);
还可以模板方式,发送附件等,具体看官方文档:
https://www.yiiframework.com/doc/guide/2.0/en/tutorial-mailing
【原创】港版ipad2018 ios11忘记功能限制的密码
ipad2018港版为了孩子使用设置了一个密码,结果直接却忘记了。找半天,刷机和远程iCloud抹掉都不适合我会丢失数据,尝试修改备份文件添加密码恢复失败,恢复过程老是中断。最后发现一个老外网站可以很容易解决问题。
iOS7-iOS11 采用pbkdf2-hmac-sha1加密, 非常强壮,可是因为一般密码只有(0000 to 9999) 4位非常简单又短的数字,所以还是非常快就能匹配出来的。
但是目前看应该不适合ios12,因为IOS12最终将限制代码移到了IOS钥匙链中!还好我还没升级到最新版。不然就只能重新刷机或抹掉数据了。希望你们也还没升级!
我windows7
1、ipad连接电脑,打开itunes,备份你的ipad到本地(不要加密)。
xp的文件备份目录是C:\Users\Administrator\Application Data\Apple Computer\MobileSync\Backup,其他系统请问度娘。
2、下载iBackupBot for iTunes软件
3、打开iBackupBot for iTunes软件,点打开文件,找到备份目录。
4、打开左边窗口的目录,点system files,在右边的窗口中的搜索框中录入com.apple.restrictionspassword.plist回车。
5、点击此文件(会弹出注册窗口,点cancel)
<dict> <key>RestrictionsPasswordKey</key> <data> FklNcq4P3mJYSNjDFWvv2ei2+uE= </data> <key>RestrictionsPasswordSalt</key> <data> aSbUXg== </data> </dict>
打开网站:http://ios7hash.derson.us/
把对应的RestrictionsPasswordKey和RestrictionsPasswordSalt输入到对应的文本框内,点击start searching搜索。最后发现密码就是: 0020,简单吧。
详细内容还是看看老外怎么解释吧。
yii2打印print_r、var_dump、echo出现Headers already sent in错误
yii2在打印输出的时候遇到奇葩错误问题;
An Error occurred while handling another error:
yii\web\HeadersAlreadySentException: Headers already sent in
因为Yii2输出模板的时候触发了Yii Response类的异常。
方法选一个:
1、可以在action或函数的开始加
Yii::$app->response->send();
2、在结束结尾加die或者exit可以解决
【原创】phpstudy在window下nginx支持php多版本
由于项目使用一些不同的扩展和框架,而对php的版本支持又不同,所以需要多版本运行项目。
由于我原来使用的就是phpstudy来搭建php环境的,nginx整合各个php免安装版本Non Thread Safe(nts)都有了。
当然你可以上http://windows.php.net/download下载最新版。
phpstudy运行的是php5.5n版本,需要运行更多一个php7的版本,phpstudy网上都是说使用apache实现,我的配置都在nginx下,不想动。
需要RunHiddenConsole,用于启动php-cgi,可以实现关闭窗口依然在后台运行。解压后放在phpstudy目录下就可以了。
http://redmine.lighttpd.net/attachments/660/RunHiddenConsole.zip
配置nginx
在要使用php7的修改nginx.conf配置文件中将请求发送到9001端口。
location ~ \.php$ {
fastcgi_index /index.php;
fastcgi_pass 127.0.0.1:9001;
include fastcgi_params;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
php7由于phpstudy都自带的,找到对应的目录就可以了。
启动脚本
在phpstudy目录下新建启动脚本start.bat
。让php7启动在9001端口。
@ECHO OFF
ECHO Starting PHP7.0 FastCGI...
RunHiddenConsole.exe E:/phpStudy/php70n/php-cgi.exe -b 127.0.0.1:9001
新建关闭脚本stop.bat。可以用以下代码关闭,也可以直接用phpstudy关闭。
@ECHO OFF
ECHO Stoping PHP FastCGI...
taskkill /F /IM php-cgi.exe > nul
这里麻烦的就是一旦使用phpstudy重启的时候,必须使用start.bat命令启动下php7,当然你自己也可以写个nginx+mysql+php一起重启关闭的bat批处理命令,这样就不用使用phpstudy来操作了。
php7安装memcache扩展windows
memcache扩展最高只支持php版本5.x,后面都不维护了。
http://pecl.php.net/package/memcache
这时候就需要老外帮忙了
https://stackoverflow.com/questions/34952502/memcache-for-php7-on-windows
git下载地址:https://github.com/nono303/PHP7-memcache-dll
下载对应的版本扩展放入php-7.0.12-nts\ext目录
打开php.ini 配置文件增加行 : extension=php_memcache.dll
重启下就可以了 php -m查看扩展加载了吗
【原创】冒泡排序和选择排序区别
两种排序算法都是2次for循环,每一轮都把最大或最小的元素筛选出来放在相应的位置上,时间复杂度为O(n^2),空间复杂度为O(1)。
但交换的次数,选择排序是更少的 ,所以一般选择排序更快一点,冒泡排序是每一次都可能要左右交换,而选择排序是在比较时记录下标的位置最后来交换。
但是选择排序是不稳定的排序方法(比如序列[3, 3, 2]第一次就将第一个[3]与[2]交换,导致第一个3挪动到第二个3后面)。
php读取nginx日志ip去重统计访问记录数
最近为了统计nginx下访问日志中至少百万记录的ip访问频率,日志文件大概500m,200多万条访问记录,经过测试速度还可以,当日志文件上1G就开始明显慢了,统计6G多的日志文件1500万条访问记录,本地机器需要30秒。尝试采用fread分流读取处理后效率也是差不多,暂时没找到更好方法,有更好的麻烦留言交流,感谢。
代码如下:
ini_set('display_errors',1); //错误信息
ini_set('display_startup_errors',1); //php启动错误信息
error_reporting(E_ALL & ~E_NOTICE ); //打印出所有的 错误信息
$result = array();
$fp = fopen('upstream.log', 'r');
$num = 0; //行数
while(!feof($fp))
{
$line = fgets($fp);//指针方式读取一行
$line = trim($line);
$line = trim($line, "\r");
$line = trim($line, "\n");
$ip = substr($line, 0, strpos($line, '- -')-1);//提取ip
if($ip == ''){
continue;
}
$result[$ip] = $result[$ip]+1;
$num++;
}
fclose($fp);
echo $num;//总行数
arsort($result);//排序
echo '<pre>';
print_r(array_slice($result, 0, 30));//前30条
exit;
centos6一键安装Redmine
安装准备
1,Linux系统:CentOS release 6.8 (Final) 64位 2.6.32-642.el6.x86_64
2,Redmine安装包:
wget https://downloads.bitnami.com/files/stacks/redmine/3.4.3-2/bitnami-redmine-3.4.3-2-linux-x64-installer.run
wget https://bitnami.com/redirect/to/354032/bitnami-redmine-3.4.6-4-linux-x64-installer.run
官网:https://bitnami.com/stack/redmine/installer
给.run文件加执行属性 chmod +x
这里执行 ./bitnami-redmine-3.4.3-2-linux-x64-installer.run 安装
根据需要安装组件,然后设置账号密码,成功后会有访问地址给你。
流程如下:
********************************************************************
[root@localhost src]# ./bitnami-redmine-3.4.3-2-linux-x64-installer.run
Language Selection
Please select the installation language
[1] English – English
[2] Spanish – Español
[3] Japanese – 日本語
[4] Korean – 한국어
[5] Simplified Chinese – 简体中文
[6] Hebrew – עברית
[7] German – Deutsch
[8] Romanian – Română
[9] Russian – Русский
Please choose an option [1] : 5
—————————————————————————-
欢迎来到 Bitnami Redmine Stack 安装程序。
—————————————————————————-
选择您想要安装的组件,清除您不想安装的组件。当您准备继续时,点击前进。
Subversion [Y/n] :n
PhpMyAdmin [Y/n] :y
Redmine : Y (Cannot be edited)
Git [Y/n] :y
上述选择是否正确? [Y/n]: y
—————————————————————————-
安装文件夹
请选择安装Bitnami Redmine Stack的文件夹
选择一个文件夹 [/opt/redmine-3.4.3-2]: /data/redmine-3.4.3-2
—————————————————————————-
创建管理员帐户
Bitnami Redmine Stack admin 用户创建
您的真实姓名 [User Name]: ken
Email地址 [user@example.com]: admin@netpc.com.cn
登录 [user]: admin
密码 :
请确认密码 :
—————————————————————————-
Web服务器端口
Choose a port that is not currently in use, such as port 81.
Apache Web 服务端口 [81]:
—————————————————————————-
MySQL信息
请输入MySQL数据库信息
Choose a port that is not currently in use, such as port 3307.
MySQL服务端口 [3307]:
—————————————————————————-
缺省数据配置语言
选择缺省数据配置语言:
[1] Bosnian
[2] 保加利亚语
[3] Catalan
[4] 捷克语
[5] Danish
[6] 德语
[7] 英语
[8] 西班牙
[9] 法语
[10] Galician
[11] 希伯来语
[12] Hungarian
[13] 意大利语
[14] 日语
[15] 朝鲜语
[16] Lithuanian
[17] 荷兰语
[18] Norwegian
[19] 波兰语
[20] 葡萄牙语
[21] 罗马尼亚语
[22] 俄语
[23] Slovak
[24] Slovenian
[25] 塞尔维亚语
[26] 瑞典语
[27] Turkish
[28] Ukrainian
[29] Vietnamese
[30] 中文
请选择选项 [30] :
Do you want to configure mail support? [y/N]: n
—————————————————————————-
安装程序已经准备好将 Bitnami Redmine Stack 安装到您的电脑。
您确定要继续吗? [Y/n]: y
—————————————————————————-
正在安装 Bitnami Redmine Stack 至您的电脑中,请稍候。
正在安装
0% ______________ 50% ______________ 100%
#########################################
—————————————————————————-
安装程序已经将 Bitnami Redmine Stack 安装于您的电脑中。
启动Redmine应用程序。 [Y/n]: y
信息: To access the Bitnami Redmine Stack, go to
http://127.0.0.1:81 from your browser.
Redmine启动或重启脚本
./ctlscript.sh start|restart
********************************************************************
安装中出现的错误
一、glibc2.18 not fund:这是glibc也就是C库版本不到2.18,需要升级:
1.下载:http://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz
选择报错中需要的版本:glibc-2.18.tar.gz
选择过最新版本,安装时候进行configure时候报错,所以就没有最新版本
2.解压:tar -xf glibc-2.18.tar.gz
3.编译安装:
[root@localhost soft]# cd glibc-2.18
[root@localhost glibc-2.18]# mkdir build; cd build
[root@localhost build]# ../configure –prefix=/usr –disable-profile –enable-add-ons –with-headers=/usr/include –with-binutils=/usr/bin
[root@localhost build]# make -j 8
[root@localhost build]# make install
3)检查:
[root@localhost soft]# strings /lib64/libc.so.6 | grep GLIBC
二、Glibcxx3.4.18 not fund:这是glibcxx也就是C++库版本不到3.4.18,需要升级:
1,下载:
ftp://ftp.de.debian.org/debian/pool/main/g/gcc-8/libstdc++6_8.2.0-9_amd64.deb
选择报错中需要的版本:libstdc++6_8.2.0-9_amd64.deb 这是目前最新的版本
如果版本404就上ftp://ftp.de.debian.org/debian/pool/main/g/gcc-8/去找
2,运行以下命令安装:
1)解压:
ar -x libstdc++6_8.1.0-10_amd64.deb
xz -d data.tar.xz
tar -xvf data.tar
2)安装:
删除:rm /usr/lib64/libstdc++.so.6
拷贝:cp usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25 /usr/lib64/
链接:ln /usr/lib64/libstdc++.so.6.0.25 /usr/lib64/libstdc++.so.6
3)检查:
[root@localhost soft]# strings /usr/lib64/libstdc++.so.6 |grep GLIBCXX
以上如果lib/libstdc++.so.6有这个文件,而你没有更新版本,需要删除掉,不然安装的时候首先会去调用lib下的文件依旧导致出错。
swoole的应用场景用在什么地方
- 协程异步,提高对 I/O 密集型场景并发处理能力(如:微信开发、支付、登录等)IM系统(用于直播页面的聊天通讯)swoole_websocket_server创建WebSocket服务器
- 方便地开发 Http、WebSocket、TCP、UDP 等应用,可以与硬件设备连接通讯(定位设备) 实时收集定位数据实时输出(例:行驶轨迹)常驻内存,避免重复加载带来的性能损耗,提升海量性能。swoole_server创建TCP服务器
- 高性能微服务架构
- 异步消息发送(短信、邮件等)swoole_server创建TCP服务器
- 毫秒定时
- 做server迷你nginx等
swoole_http_server是swoole_server的子类,内置了Http的支持
swoole_websocket_server是swoole_http_server的子类, 内置了WebSocket的支持
swoole环境依赖
https://wiki.swoole.com/wiki/page/7.html
swoole编译安装
https://wiki.swoole.com/wiki/page/6.html
swoole快速起步
https://wiki.swoole.com/wiki/page/p-quickstart.html