服务端开启 WebSocket,使用 WorkerMan + phpSocket.io
开启的端口为 2120,访问为 ws://wanaioa.unetu.net:2120/
Continue reading 微信小程序 尝试 WebSocket学习日志 LIUGUOFENG
服务端开启 WebSocket,使用 WorkerMan + phpSocket.io
开启的端口为 2120,访问为 ws://wanaioa.unetu.net:2120/
Continue reading 微信小程序 尝试 WebSocketThinkPHP 3.2.3 提示
could not find driver
抛出了 PDOException 异常,说明 PDO 连接报错
解决方法安装 pdo_mysql 扩展,该扩展在 php 源码包里 下载 php 源码并解压
cd ~
cd php-5.6.30/ext/pdo_mysql
/usr/local/php5/bin/phpize
./configure --with-php-config=/usr/local/php5/bin/php-config
make
make install
在 php.ini 里添加 extension=pdo_mysql.so
使用 301 转发
server
{
listen 80;
#listen [::]:80;
server_name blog.liuguofeng.com ;
return 301 https://blog.liuguofeng.com$request_uri;
}
参考文献
CentOS 6、7,先执行:
yum install epel-release
cd /root/
wget https://dl.eff.org/certbot-auto --no-check-certificate
chmod +x ./certbot-auto
./certbot-auto -n
单域名生成证书:
./certbot-auto certonly --email jollyfon@gmail.com --agree-tos --no-eff-email --webroot -w /home/wwwroot/wanai.unetu.net -d wanai.unetu.net
安装成功返回
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/wanai.unetu.net/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/wanai.unetu.net/privkey.pem
Your cert will expire on 2019-01-30. To obtain a new or tweaked
version of this certificate in the future, simply run certbot-auto
again. To non-interactively renew *all* of your certificates, run
"certbot-auto renew"
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
多域名单目录生成单证书:(即一个网站多个域名使用同一个证书)
./certbot-auto certonly --email jollyfon@gmail.com --agree-tos --no-eff-email --webroot -w /home/wwwroot/wanai.unetu.net -d wanai.unetu.net www.unetu.net
多域名多目录生成一个证书:(即一次生成多个域名的一个证书)
./certbot-auto certonly --email jollyfon@gmail.com --agree-tos --no-eff-email --webroot -w /home/wwwroot/wanai.unetu.net -d wanai.unetu.net www.unetu.net -w /home/wwwroot/wanaioa.unetu.net -d wanaioa.unetu.net -d unetu.net
安装完成后证书文件位置
/etc/letsencrypt/live
有四个文件
/etc/letsencrypt/live/wanai.unetu.net/cert.pem
/etc/letsencrypt/live/wanai.unetu.net/chain.pem
/etc/letsencrypt/live/wanai.unetu.net/fullchain.pem
/etc/letsencrypt/live/wanai.unetu.net/privkey.pem
Nginx 配置
listen 443 ssl;
server_name wanai.unetu.net;
index index.html index.htm index.php default.html default.htm default.php;
root /home/wwwroot/wanai.unetu.net;
ssl_certificate /etc/letsencrypt/live/wanai.unetu.net/fullchain.pem; #前面生成的证书,改一下里面的域名就行
ssl_certificate_key /etc/letsencrypt/live/wanai.unetu.net/privkey.pem; #前面生成的密钥,改一下里面的域名就行
SSLCertificateChainFile /etc/letsencrypt/live/wanai.unetu.net/chain.pem; #Apache 2.2版本需要加入该中间证书,否则浏览器可能不信任
ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
Let's Encrypt 证书的有效期为 90 天,可自动续期
打开 crontab
crontab -e
添加规则
0 3 */5 * * /root/certbot-auto renew --disable-hook-validation --renew-hook "/etc/init.d/nginx reload"
我的示例
server
{
listen 443 ssl http2;
#listen [::]:443 ssl http2;
server_name wanai.unetu.net ;
index index.html index.htm index.php default.html default.htm default.php;
root /home/wwwroot/wanai.unetu.net;
ssl on;
ssl_certificate /etc/letsencrypt/live/wanai.unetu.net/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/wanai.unetu.net/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
include rewrite/codeigniter.conf;
location ~ [^/]\.php(/|$)
{
fastcgi_pass 127.0.0.1:9001; #注意此端口
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 12h;
}
location ~ /.well-known {
allow all;
}
location ~ /\.
{
deny all;
}
access_log /home/wwwlogs/wanai.unetu.net.log;
}
参考文献:
An Error Was Encountered
The Encrypt library requires the Mcrypt extension.
CI 框架 缺少 mcrypt 扩展
yum 安装 mcrypt
yum install libmcrypt libmcrypt-devel mcrypt mhash
源码编译没试,可参考这篇文章
安装 php 的 mcrypt 扩展
扩展在 php 安装包的 ext 目录下
[root@instance-jewlel2q ~]# cd php-5.6.30/
[root@instance-jewlel2q php-5.6.30]# cd ext/mcrypt/
[root@instance-jewlel2q mcrypt]# /usr/local/php5/bin/phpize
返回
Configuring for:
PHP Api Version: 20131106
Zend Module Api No: 20131226
Zend Extension Api No: 220131226
[root@instance-jewlel2q mcrypt]# ./configure --with-php-config=/usr/local/php5/bin/php-config
返回
creating libtool
appending configuration tag "CXX" to libtool
configure: creating ./config.status
config.status: creating config.h
编译
[root@instance-jewlel2q mcrypt]# make
[root@instance-jewlel2q mcrypt]# make install
Installing shared extensions: /usr/local/php5/lib/php/extensions/no-debug-non-zts-20131226/
查看扩展目录
[root@instance-jewlel2q mcrypt]# cd /usr/local/php5/lib/php/extensions/no-debug-non-zts-20131226/
[root@instance-jewlel2q no-debug-non-zts-20131226]# ll
total 2092
-rwxr-xr-x 1 root root 170080 Nov 1 17:02 mcrypt.so
-rwxr-xr-x 1 root root 1340288 Nov 1 14:59 opcache.a
-rwxr-xr-x 1 root root 623648 Nov 1 14:59 opcache.so
安装成功
向 php.ini 写入扩展目录
vim /usr/local/php5/lib/php.ini
重启,查看 phpinfo
采坑记录
php 的配置文件应放在 lib 目录下,自己在 ext 目录下一直不生效,换到 lib 目录下重载后生效了
wget http://soft.vpser.net/lnmp/lnmp1.5.tar.gz -cO lnmp1.5.tar.gz && tar zxf lnmp1.5.tar.gz && cd lnmp1.5 && ./install.sh lnmp
添加用户用于外部访问,设置 3306 防火墙白名单,安全组白名单 范围% 重启主机
Continue reading 重装 LNMP 环境 MySQL 5.7 的初始配置 性能优化微信小程序消息推送在测试可以发送成功,正式发送失败
错误信息如下
{
"errcode": 41030,
"errmsg": "invalid page hint: [YJmNKa07043954]"
}
page 不正确
错误 /pages/index/index
正确 pages/index/index
ALTER TABLE 表名 AUTO_INCREMENT = 设定的值
例:
mysql> alter table oa_salary_branch_month auto_increment = 1;
oa_salary_branch_month 是 表名,不需要字段
ThinkPHP 3.2 使用 PHPExcel
使用 chr(ord('A')++) 的方法进行 Excel 列的自增,当列数超过26列时,会报如下错误
Invalid cell coordinate [1
错误位置
FILE: E:\wwwroot\wanaioa.a.cc\ThinkPHP\Library\Vendor\Excel\PHPExcel\Cell.php LINE: 539
原因是 ord('Z') 为 90,当 chr(91) 时为 string(1) "["
但在 Excel 中应为 AA
解决方法是使用 PHPExcel 自带函数 stringFromColumnIndex
调用方法
\PHPExcel_Cell::stringFromColumnIndex(27);
源码为
/**
* String from columnindex
*
* @param int $pColumnIndex Column index (base 0 !!!)
* @return string
*/
public static function stringFromColumnIndex($pColumnIndex = 0)
{
// Using a lookup cache adds a slight memory overhead, but boosts speed
// caching using a static within the method is faster than a class static,
// though it's additional memory overhead
static $_indexCache = array();
if (!isset($_indexCache[$pColumnIndex])) {
// Determine column string
if ($pColumnIndex < 26) {
$_indexCache[$pColumnIndex] = chr(65 + $pColumnIndex);
} elseif ($pColumnIndex < 702) {
$_indexCache[$pColumnIndex] = chr(64 + ($pColumnIndex / 26)) .
chr(65 + $pColumnIndex % 26);
} else {
$_indexCache[$pColumnIndex] = chr(64 + (($pColumnIndex - 26) / 676)) .
chr(65 + ((($pColumnIndex - 26) % 676) / 26)) .
chr(65 + $pColumnIndex % 26);
}
}
return $_indexCache[$pColumnIndex];
}
路径
ThinkPHP/Library/Vendor/Excel/PHPExcel/Cell.php