作者:AngryFox 分类: Uncategorized March 30th, 2018 暂无评论

1.若nginx用所用的 php 请求解析服务是 fpm, 则检查 /etc/php5/fpm/php.ini 文件中的参数

[/plain] view plain copy
upload_max_filesize = 20M
post_max_size = 20M
重启fpm服务

1 view plain copy
server {
    ...
    client_max_body_size 20m;
    ...
}
重启nginx服务
1

view plain copy
service nginx restart
问题解决!

Function eregi is deprecated (解决方法)

在php升级到php5.3之后后,在使用的过程经常发现有的程序会出现Function eregi() is deprecated 的报错信息。是什么原因呢?
这是因为php5.3中不再支持eregi()函数,而使用preg_match()函数替代。
解决的方法是:将eregi()函数替换成preg_match() 函数。
if(eregi(‘^test’,$file))
可以替换为
if(preg_match(‘/^test/i’,$file))

————-
PHP 5.3.0 之後的 regex, 希望使用 PCRE 的規格, POSIX Regex 都不建議使用了(統一 Regex, 避免規格太多?).
所以下述是不建議使用的 Function (POSIX), 與建議替換成的 Function (PCRE) 列表, 詳可見: PHP:
Differences from POSIX regex
* POSIX → PCRE
* ereg_replace() → preg_replace()
* ereg() → preg_match()
* eregi_replace() → preg_replace()
* eregi() → preg_match()
* split() → preg_split()
* spliti() → preg_split()
* sql_regcase() → No equivalent
* 需要 regex 的 split, 可用 preg_split() 代替
* 不需要 regex, 只要要快速分割固定的字串, 可用 explode() 代替. (速度會比需要 regex 的快很多)

作者:AngryFox 分类: Uncategorized March 30th, 2018 暂无评论

0. 前言

网上看到很多开启Mysql远程访问端口,修改的配置文件我都没有找到。

特意查看了我的Linux版本

$ sudo lsb_release -a

显示如下:

Distributor ID: Ubuntu
Description: Ubuntu 16.04.1 LTS
Release: 16.04
Codename: xenial

1. 查看3306端口是否正常

root@node1:~# netstat -an | grep 3306
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
注意:现在的3306端口绑定的IP地址是本地的127.0.0.1

2. 修改Mysql配置文件(注意路径,跟之前网上的很多版本位置都不一样)

root@node1:~# vim /etc/mysql/mysql.conf.d/mysqld.cnf
找到

bind-address = 127.0.0.1
前面加#注释掉

3. 重启Mysql

root@node1:~# /etc/init.d/mysql restart
[ ok ] Restarting mysql (via systemctl): mysql.service.

4. 再次查看端口信息

root@node1:~# netstat -an | grep 3306
tcp6 0 0 :::3306 :::* LISTEN

作者:AngryFox 分类: Uncategorized March 30th, 2018 暂无评论

php和mysql数据库编码都是utf8,为什么还要set names utf8 (无论html编码还是php文件编码都是utf8)
show variables like ‘%char%’;

#第一种,未隐藏index.php 但url路径中有.html后缀

http://blog.angryfox.com/index.php/Usr/UsrInfo.html

复制代码
#第二种,隐藏脚本文件index.php

http://blog.angryfox.comUsr/UsrInfo

http://blog.angryfox.com/Usr/UsrInfo/

复制代码
#第三种,需要在访客看到的网址中隐藏掉index.php,且带.html后缀

http://blog.angryfox.com/Usr/UsrInfo.html

复制代码
那么,现在需要同时兼容上述url示例中的三种格式又出问题了。最后解决方法如下:

location / {
root /var/www;
index index.html index.htm index.php;
if (!-e $request_filename) {
rewrite ^/index.php(.*)$ /index.php?s=$1 last;
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}
}

mysql创建utf-8字符集数据库
CREATE DATABASE db_name DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

CREATE DATABASE 的语法:
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
[create_specification [, create_specification] …]
create_specification:
[DEFAULT] CHARACTER SET charset_name
| [DEFAULT] COLLATE collation_name

更改数据库的字符编码
ALTER DATABASE db_name DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci

作者:AngryFox 分类: Uncategorized March 21st, 2018 暂无评论

1.打开virtualbox,选择【设置】-【网络】将连接方式改为【Bridged Adapter】

2.在Ubuntu中,

运行sudo gedit /etc/network/interfaces

修改如下:

auto lo

iface lo inet loopback

auto eth0

iface eth0 inet static

address 172.17.1.178

netmask 255.255.0.0 #此处改成您的掩码

gateway 172.17.1.111 #此处改成您的网关

运行sudo gedit /etc/resolv.conf

修改如下:

nameserver 172.17.11.31 #域名服务器

3.运行/etc/init.d/networking restart 重启

作者:AngryFox 分类: Uncategorized March 15th, 2018 暂无评论

0×00 案例

目前正使用 Ubuntu 14.04.4 LTS,编译软件却发现 GCC 版本仍然处于 gcc-4.8 这个尴尬的老版本。
0×01 说明

幸好是 Ubuntu,toolchain/test 已经有了官方编译好的 gcc 版本。也只有 Ubuntu 才能够快速安装软件包来升级。其他系统则需要自己编译。。

0×02 解决方案

1. 添加 PPA,回车:

sudo add-apt-repository ppa:ubuntu-toolchain-r/test

假如提示未安装,则需要:

sudo apt-get install software-properties-common

2. 更新源:

sudo apt-get update

3. 更新系统:

sudo apt-get upgrade

4. 正式安装 gcc 5.3:

sudo apt-get install gcc-5 g++-5

5. 安装完成后,刷新一下:

sudo updatedb && sudo ldconfig

6. 解决 locate 找不到 gcc 的问题:

locate gcc

7. 更新系统链接:

update-alternatives –install /usr/bin/gcc gcc /usr/bin/gcc-5 53 \
–slave /usr/bin/g++ g++ /usr/bin/g++-5 \
–slave /usr/bin/gcc-ar gcc-ar /usr/bin/gcc-ar-5 \
–slave /usr/bin/gcc-nm gcc-nm /usr/bin/gcc-nm-5 \
–slave /usr/bin/gcc-ranlib gcc-ranlib /usr/bin/gcc-ranlib-5
8. 安装完毕,可以用了。

Windows上可以安装mingw版的
关键步骤(以下步骤是必须的):
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update

sudo apt-get install gcc-5 # gcc可以不升级依然用4.6,只装g++5
sudo apt-get install g++-5
sudo apt-get install gcc-5-multilib # gcc可以不升级依然用4.6,只装g++5
sudo apt-get install g++-5-multilib
sudo apt-get install g++-5-doc # 可选

可选(之后g++命令默认指向g++5.x.x)

sudo update-alternatives –install /usr/bin/g++ g++ /usr/bin/g++-5 20
sudo update-alternatives –config g++
根据提示选择默认的版本

现在就可以使用了,通过g++ -v 命令可以查看当前gcc或者g++的版本, 在我的系统上显示如下(省略了一些):
……
Thread model: posix
gcc version 5.4.0 20160603 (Ubuntu 5.4.0-3ubuntu1~12.04)
……

安装完成后还有一个小问题就是gdb调试器还是比较老的7.4,而一些IDE在生成makefile时, 默认生成的debug版本都是以-g3或者-g来添加调试信息的,实际上从gcc4.8开始-g产生的是新的DWARF4格式的调试信息, 不是旧的DWARF2格式,这导致调试程序时gdb无法使用DWARF 4的调试信息从而给调试带来麻烦,使用eclipse cdt的同学要特别注意!

正确解决办法是:把-g或者-g3 改为-gdwarf-2就可以了,使用eclipse cdt的同学要特别注意!

附ubuntu12.04 软件源, 163是比较我一直使用比较快的, 个人感觉比cn99和sohu好点
deb http://mirrors.163.com/ubuntu/ precise main restricted
deb-src http://mirrors.163.com/ubuntu/ precise main restricted
deb http://mirrors.163.com/ubuntu/ precise-updates main restricted
deb-src http://mirrors.163.com/ubuntu/ precise-updates main restricted
deb http://mirrors.163.com/ubuntu/ precise universe
deb-src http://mirrors.163.com/ubuntu/ precise universe
deb http://mirrors.163.com/ubuntu/ precise-updates universe
deb-src http://mirrors.163.com/ubuntu/ precise-updates universe
deb http://mirrors.163.com/ubuntu/ precise multiverse
deb-src http://mirrors.163.com/ubuntu/ precise multiverse
deb http://mirrors.163.com/ubuntu/ precise-updates multiverse
deb-src http://mirrors.163.com/ubuntu/ precise-updates multiverse
deb http://mirrors.163.com/ubuntu/ precise-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ precise-backports main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ precise-security main restricted
deb-src http://mirrors.163.com/ubuntu/ precise-security main restricted
deb http://mirrors.163.com/ubuntu/ precise-security universe
deb-src http://mirrors.163.com/ubuntu/ precise-security universe
deb http://mirrors.163.com/ubuntu/ precise-security multiverse
deb-src http://mirrors.163.com/ubuntu/ precise-security multiverse
deb http://extras.ubuntu.com/ubuntu precise main

deb-src http://extras.ubuntu.com/ubuntu precise main

1.下载GCC源码:
wgetftp://mirrors.kernel.org/gnu/gcc/gcc-5.4.0/gcc-5.4.0.tar.gz
2.解压:
sudo tar -zxvf gcc-5.4.0.tar.gz
3.下载编译所需依赖项:
cd gcc-5.4.0 //进入解包后的gcc文件夹
sudo ./contrib/download_prerequisites //下载依赖项
cd .. //返回上层目录
4.建立编译输出目录:
sudomkdir gcc-build-5.4.0
5.进入输出目录,执行以下命令,并生成makefile文件:
cd gcc-build-5.4.0
sudo ../gcc-5.4.0/configure –enable-checking=release –enable-languages=c,c++ –disable-multilib
6.编译:
sudo make -j4
接下来就是等待了,整个过程大约40分钟左右。PS:最好不要在编译过程中再去做别的什么事,整个过程CPU都是满载的,要是莫名终止了,后面麻烦事也不少。

7.安装:
编译结束以后,我们就可以执行安装了:
make install

8.检查版本:
gcc
–version

gcc -v

作者:AngryFox 分类: Uncategorized March 10th, 2018 暂无评论

解决: g++: internal compiler error: Killed (program cc1plus)
g++: internal compiler error: Killed (program cc1plus)
Please submit a full bug report,

查了很多资料,最后发现主要原因是内存不足, 临时使用交换分区来解决吧

sudo dd if=/dev/zero of=/swapfile bs=64M count=16
sudo mkswap /swapfile
sudo swapon /swapfile
After compiling, you may wish to

Code:

sudo swapoff /swapfile
sudo rm /swapfile

如何在 Ubuntu Linux 14.04 LTS 上安装php7
输入

$ sudo apt-get install -y language-pack-en-base
$ sudo LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php

或者

$ sudo add-apt-repository ppa:ondrej/php

然后更新源

$ sudo apt-get update

然后安装

$ sudo apt-get install php7.0 php7.0-cli php7.0-fpm php7.0-gd php7.0-json php7.0-mysql php7.0-readline

然后编辑ngnix配置文件

# Pass all .php files onto a php-fpm/php-fcgi server.
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
if (!-f $document_root$fastcgi_script_name) {
return 404;
}
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}

作者:AngryFox 分类: Uncategorized March 8th, 2018 暂无评论

root@momo:/data/momo# make
make: Warning: File `Makefile.am’ has modification time 1.4e+04 s in the future
CDPATH=”${ZSH_VERSION+.}:” && cd . && /bin/bash /data/momo/build-aux/missing aclocal-1.14 -I build-aux/m4

查看当前的系统时间:

$ date
修改系统时间与server同步:

$ sudo apt-get install ntpdate
$ sudo ntpdate -u ntp.ubuntu.com

系统为ubuntu14.04lts
当apt-get安装软件时,都会报一个相同的错误,如下

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_TIME = “zh_CN.UTF-8″,
LC_MONETARY = “zh_CN.UTF-8″,
LC_ADDRESS = “zh_CN.UTF-8″,
LC_TELEPHONE = “zh_CN.UTF-8″,
LC_NAME = “zh_CN.UTF-8″,
LC_MEASUREMENT = “zh_CN.UTF-8″,
LC_IDENTIFICATION = “zh_CN.UTF-8″,
LC_NUMERIC = “zh_CN.UTF-8″,
LC_PAPER = “zh_CN.UTF-8″,
LANG = “en_US.UTF-8″
are supported and installed on your system.
perl: warning: Falling back to the standard locale (“C”).
那是因为安装软件时,都会去执行一个update-locale的命令,用来更新locale
这个命令是一个脚本,用perl写的,可以用whereis update-locale查到,位置在/usr/sbin/update-locale

上述报错并不是因为update-locale命令而引起,update-locale这段脚本没有问题,而是因为perl
可以使用以下命令测试:

perl -e exit
其实,真正的原因是perl为系统使用zh_CN.UTF-8,但系统不知道zh_CN.UTF-8是什么东西

解决方法

解决方法也很简单

apt-get install language-pack-zh-hans
安装一个中文语言,系统就知道zh_CN.UTF-8了,这个时候用perl就不会报错了

深入了解

这种情况一般是vps比较常见,因为一般都是用ssh的方式连接到vps上的
sshd有这个机制,会把客户机上的语言环境带到远程的机器上
客户机一般都会设置zh_CN.UTF-8语言,用来显示中文,而远端的vps一般就只有en_US.UTF-8zh_CN.UTF-8一旦带过去就会报找不到的错误

perl: warning: Setting locale failed.
apt-get install language-pack-zh-hans
安装一个中文语言,系统就知道zh_CN.UTF-8了,这个时候用perl就不会报错了
解决办法是:
vi /root/.bashrc
在最底部添加上一句
export LC_ALL=C
或者直接运行
#echo “export LC_ALL=C” >> /root/.bashrc
然后执行一下:
source /root/.bashrc

作者:AngryFox 分类: Uncategorized March 5th, 2018 暂无评论

Ubuntu12.04的crontab默认使用nanos,这个编译器相当难用,我们一般得把它换成vim,使用以下命令即可:

export EDITOR=vim

修改后最好重启一下crontab

/etc/init.d/cron stop
/etc/init.d/cron start

Ubuntu防火墙 UFW 设置
1.安装

sudo apt-get install ufw

2.启用

sudo ufw enable
sudo ufw default deny

运行以上两条命令后,开启了防火墙,并在系统启动时自动开启。关闭所有外部对本机的访问,但本机访问外部正常。

3.开启/禁用

sudo ufw allow XXXXXXXX
sudo ufw deny XXXXXXXX

打开或关闭某个端口,例如:

sudo ufw allow smtp 允许所有的外部IP访问本机的25/tcp (smtp)端口

sudo ufw allow 22/tcp 允许所有的外部IP访问本机的22/tcp (ssh)端口

sudo ufw allow 53 允许外部访问53端口(tcp/udp)

sudo ufw allow from 192.168.1.100 允许此IP访问所有的本机端口

sudo ufw allow proto udp 192.168.0.1 port 53 to 192.168.0.2 port 53

sudo ufw deny smtp 禁止外部访问smtp服务

sudo ufw delete allow smtp 删除上面建立的某条规则

4.查看防火墙状态

sudo ufw status
UFW 使用范例:

允许 53 端口
$ sudo ufw allow 53

禁用 53 端口
$ sudo ufw delete allow 53

允许 80 端口
$ sudo ufw allow 80/tcp

禁用 80 端口
$ sudo ufw delete allow 80/tcp

允许 smtp 端口
$ sudo ufw allow smtp

删除 smtp 端口的许可
$ sudo ufw delete allow smtp

允许某特定 IP
$ sudo ufw allow from 192.168.254.254

删除上面的规则
$ sudo ufw delete allow from 192.168.254.254

参考 http://wiki.ubuntu.org.cn/Ufw使用指南

使用apt-get进行软件的install或update时,有时会出现以下提示信息:
E: Could not get lock /var/lib/dpkg/lock – open (11 Resource temporarily unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?

原因是有可能有其他的apt-get进程在活动。
解决办法,把apt-get进程找出来,杀死!
ps aux | grep apt-get
sudo kill -9

如果再次执行apt-get,还是有这样情况出现,删除/var/lib/dpkg/lock文件,即可。

解决升级系统导致的 curl: (48) An unknown option was passed in to libcurl

如果是ubuntu
解决办法:

  1. 检查/usr/bin和/usr/local/bin目录是否有多个版本的curl。  
  locate -r /curl$
2.删掉其中一个,若删除后者出现找不到curl, locate curl做软连接
ln -s /usr/bin/curl /usr/local/bin/curl

ubuntu删除所有的curl 然后 apt-get install curl // 通过这个语句安装,缺失的库,会自己补上!

安装curl的时候装了多个版本,默认路径是在前者。
一般用 which curl, whereis curl 或 mdfind curl 之类的方法找到该命令

如果你关注搜索到这篇文章,那么我可以合理怀疑你被apt-get的几个卸载命令有点搞晕了。

apt-get的卸载相关的命令有remove/purge/autoremove/clean/autoclean等。具体来说:

apt-get purge / apt-get –purge remove
删除已安装包(不保留配置文件)。
如软件包a,依赖软件包b,则执行该命令会删除a,而且不保留配置文件

apt-get autoremove
删除为了满足依赖而安装的,但现在不再需要的软件包(包括已安装包),保留配置文件。

apt-get remove
删除已安装的软件包(保留配置文件),不会删除依赖软件包,且保留配置文件。

apt-get autoclean
APT的底层包是dpkg, 而dpkg 安装Package时, 会将 *.deb 放在 /var/cache/apt/archives/中,apt-get autoclean 只会删除 /var/cache/apt/archives/ 已经过期的deb。

apt-get clean
使用 apt-get clean 会将 /var/cache/apt/archives/ 的 所有 deb 删掉,可以理解为 rm /var/cache/apt/archives/*.deb。

那么如何彻底卸载软件呢?
具体来说可以运行如下命令:

# 删除软件及其配置文件
apt-get –purge remove # 删除没用的依赖包
apt-get autoremove # 此时dpkg的列表中有“rc”状态的软件包,可以执行如下命令做最后清理:
dpkg -l |grep ^rc|awk ‘{print $2}’ |sudo xargs dpkg -P

当然如果要删除暂存的软件安装包,也可以再使用clean命令。

作者:AngryFox 分类: Uncategorized January 6th, 2018 暂无评论

使用 Certbot 工具让你的网站秒配 HTTPS 证书。
Certbot
Certbot is an easy-to-use client that fetches a certificate from Let’s Encrypt—an open certificate authority launched by the EFF, Mozilla, and others—and deploys it to a web server.
Certbot是由 Let’s Encrypt 一个开放免费证书颁发机构的EFF、Mozilla和其他开发者推出的,易于客户端获取网站加密证书。
特点

简单易用、免费
自动化配置
证书无限免费续签
效率极高,一次安装,再配置其他站点 https 证书只需要 3 分钟
PS: 因为测试服务器站点过多,每次使用 acme-tiny 脚本配置证书都要十多分钟时间,为了提高效率,就使用了 Let’s Encrypt 官网推荐的自动部署脚本。

官方网站: https://certbot.eff.org
选择自己的服务器和操作系统环境,Certbot 官方会给出详细的安装过程和使用方法,我的环境是 Nginx + Ubuntu 14.04,安装过程如下
$ sudo apt-get update
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install python-certbot-nginx
or sudo apt-get update;sudo apt-get install software-properties-common;sudo add-apt-repository ppa:certbot/certbot;sudo apt-get update;sudo apt-get install python-certbot-nginx;
安装成功之后把 certbot 加入系统全局变量 PATH 中。

获取证书前需要先停止 Nginx 服务
service nginx stop

直接在命令行运行
certbot 根据提示完成配置
或者
生成单域名证书
certbot certonly –standalone –email your@email.com -d yourdomain.com
一次生成多域名证书:

certbot certonly –standalone –email your@email.com -d yourdomain.com -d yourdomain2.com
证书配置成功后提示:
https可以访问到数据
4.查看网站生成的证书

tree /etc/letsencrypt/live/
5.配置 Nginx

…… 其他配置

listen 443 ssl;

ssl_certificate /etc/letsencrypt/live/{yourdomain}.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/{yourdomain}.com/privkey.pem;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
6.重启 Nginx

service nginx start
此时再加上 https:// 访问你的网站,就会有一把可爱别致的小绿锁 Secure^_^

Let’s Encrypt 生成的免费证书为3个月时间,使用 certbot renew 可以无限免费续签 Https 证书

certbot renew
在生成证书的时候遇到一个问题
Problem binding to port 443: Could not bind to IPv4 or IPv6.. Skipping
这是因为 nginx 服务没有关闭,执行 service nginx stop 即可。
原文地址

https://certbot.eff.org/docs/install.html