Laravel学习之路由

/**
 * 路有种输出视图
 */
Route::get('/', function () {
    return view('welcome');
});

/**
 * 基础路由
 */
Route::get('base',function(){
    return 'hello word!';
});
Route::post('base',function(){
    return 'hello word!';
});

/**
 * 多请求路由
 */
Route::match(['get','post'],'multy1',function(){
    return '多请求路由';
});

Route::any('multy2',function(){
    return '所有类型路由';
});

//路由参数
Route::get('user/{id}',function($id){
    return 'user-' . $id;
});

/**
 * 如果$name 不设默认值,那么访问缺少参数时会报错,有默认值时如果缺少参数会直接使用默认值
 */

Route::get('user/{name?}',function($name = null){
    return 'user-' . $name;
});

/**
 * 参数条件过滤,当ID的值为数字时通过。
 */
Route::get('user/{id}',function($id = null){
    return 'userid = ' . $id;
})->where('id','[0-9]+');

/**
 * 多参数条件过滤。
 */

Route::get('user/{id}/{name?}',function($id = null,$name = null){
    return 'userid = ' . $id . ' -name- ' . $name;
})->where(['id'=>'[0-9]+','name'=>'[A-Za-z]+']);

/**
 * 路由别名
 */
Route::get('user/center',['as' => 'center',function(){
    return route('center');
}]);

/**
 * 路由群组,'prefix' 前缀,比如访问下面的地址为:/member/user/center,/member/user/{id}
 */
Route::group(['prefix' => 'member'],function(){

    Route::get('user/center',['as' => 'center',function(){
        return route('center');
    }]);

    Route::get('user/{id}',function($id){
        return 'member-user-' . $id;
    });
});

//路由绑定控制器

Route::get('member/info',['uses' => '[email protected]']);
/**
 * 给绑定控制器的路由设定别名
 */
Route::get('member/info',[
    'uses'  =>  '[email protected]',
    'as'    =>  'memberinfo'
]);
/**
 * 带参数
 */
Route::get('member/{id}',['uses' => '[email protected]']);

 

Thinkphp自适应上传多个或单个文件

/**
     * 上传图片
     * @return mixed
     */
	protected function uploadImg()
    {
        $upload = new \Think\Upload();  // 实例化上传类
        $upload->maxSize   =     3145728 ;  // 设置附件上传大小
        $upload->exts      =     array('jpg', 'gif', 'png', 'jpeg');    // 设置附件上传类型
        $upload->rootPath  =     './Uploads/';  // 设置附件上传根目录
        $upload->savePath  =     'images/';    //设置附件上传(子)目录
        // 上传文件
        $info   =   $upload->upload();
        if(!$info) {// 上传错误提示错误信息

            $msg['status'] = 2;
            $msg['msg'] = $upload->getError();
        }else{// 上传成功
            $msg['status'] = 1;
            $msg['result'] = self::getImg($info,$upload->rootPath);
            $msg['msg'] = '上传成功!';
        }
        return $msg;
    }

    /**
     * @param $data 数据元
     * @param $file 文件根路径
     * @return array|string
     */
    static function getImg ( $data , $file ) {

	    $filename = substr($file,1);

        if (count($data) === 1) {
            $newarr = current($data);
            $info = $filename . $newarr['savepath'].$newarr['savename'];
            return $info;
        }else{
            $arr = array();
            foreach ($data as $key => $value){
                $arr[$key] = $filename . $value['savepath'].$value['savename'];
            }
            return $arr;
        }
    }

 

阿里云服务器安装监控宝snmp

系统为:Centos 7.3 64位

1、因为我的系统是刚安装的纯净版,所以首先我们xian更新一下系统。

sudo yum update -y

2、安装snmp

yum install net-snmp net-snmp-devel net-snmp-utils

3、设置snmp
安装之前,请勿启动snmp

net-snmp-config --create-snmpv3-user -ro -A [email protected] -a MD5 jiankongbao

*创建一个只读用户:jiankongbao,密码为:[email protected],使用md5加密密码*

4、启动snmp

service snmpd start   启动
service snmpd stop   停止
service snmpd restart 重启
service snmpd status  状态
chkconfig snmpd on 将snmpd服务加入开机自动运行

5、验证snmp是否安装成功

nmpwalk -v 3 -u jiankongbao -a MD5 -A "[email protected]" -l authNoPriv 127.0.0.1 sysDescr

如果正常则会返回相关参数,如:

SNMPv2-MIB::sysDescr.0 = STRING: Linux iZwz90bcvmns8ktycbkyj1Z 3.10.0-514.21.1.el7.x86_64 #1 SMP Thu May 25 17:04:51 UTC 2017 x86_64

6、添加阿里云的安全规则组,否则无法连接的。
添加tcp/udp的入口 端口为:161
接下来就去监控宝新增服务器就ok了。

Ubuntu系统环境重装Ubuntu

一、首先下载Ubuntu系统

https://www.ubuntu.com/download/alternative-downloads

二、将下载下来的ubuntu-14.5.iso重命名为:ubuntu.iso并复制至”/”根目录下。

三、编辑/boot/grub/grub.cfg文件,在“export linux_gfx_mode”下一行增加

menuentry "install  ubuntu 14.04" {
  search --set -f /ubuntu.iso
  loopback loop /ubuntu.iso
  set root=(loop)
  linux /casper/vmlinuz.efi boot=casper iso-scan/filename=/ubuntu.iso
  initrd /casper/initrd.lz
  boot
}

 

四、重启系统,在启动栏目页会多出一行:“install ubuntu 14.04”,选择确认进入。进入系统后会在桌面出现一个”Install Ubuntu 14.04.5 LTS” 程序,点击进行安装。

php通过经纬度计算两点之间的距离并排序

现在很多项目都会用到通过获取用户地理信息计算最近的商家,最近也在折腾这方面,先上代码:

    /**
    *  @desc 根据两点间的经纬度计算距离
    *  @param float $lat 纬度值
    *  @param float $lng 经度值
    */
     static function getDistance($lat1, $lng1, $lat2, $lng2)
     {
         $earthRadius = 6367000; //approximate radius of earth in meters

         /*
           Convert these degrees to radians
           to work with the formula
         */

         $lat1 = ($lat1 * pi() ) / 180;
         $lng1 = ($lng1 * pi() ) / 180;

         $lat2 = ($lat2 * pi() ) / 180;
         $lng2 = ($lng2 * pi() ) / 180;

         /*
           Using the
           Haversine formula

           http://en.wikipedia.org/wiki/Haversine_formula

           calculate the distance
         */

         $calcLongitude = $lng2 - $lng1;
         $calcLatitude = $lat2 - $lat1;
         $stepOne = pow(sin($calcLatitude / 2), 2) + cos($lat1) * cos($lat2) * pow(sin($calcLongitude / 2), 2);  $stepTwo = 2 * asin(min(1, sqrt($stepOne)));
         $calculatedDistance = $earthRadius * $stepTwo;

         return round($calculatedDistance) / 1000;   //除以1000 得到的结果就是公里
     }

得到距离后,我们再对这个数组进行排序。

/**
     * [suiSort 数组排序]
     * @param  [type] $data [源数据]
     * @return [type]       [description]
     */
    static function suiSort ($data)
    {
        $sort = array(  
            'direction' => 'SORT_ASC', //排序顺序标志 SORT_DESC 降序;SORT_ASC 升序  
            'field'     => 'juli',       //排序字段  
        ); 

        $arrSort = array();  
        foreach($data AS $uniqid => $row){  
            foreach($row AS $key=>$value){  
                $arrSort[$key][$uniqid] = $value;  
            }  
        }  

        if($sort['direction']){  
            array_multisort($arrSort[$sort['field']], constant($sort['direction']), $data);  
        }  
        return $data;
    }

 

使用css的after写出向下箭头

.page__hd .weui-flex__item .left i:after{
	content: " ";
    display: inline-block;
    height: 6px;
    width: 6px;
    border-width: 0px 2px 2px 0px;
    border-color: #bbf2de;
    border-style: solid;
    -webkit-transform: matrix(0.71, 0.71, -0.71, 0.71, 0, 0);
    transform: matrix(0.71, 0.71, -0.71, 0.71, 0, 0);
    position: relative;
    top: -2px;
    position: absolute;
    top: 50%;
    right: 15px;
    margin-top: -4px;
}

 

Centos6.x安装nginx

一、准备工作

1、开放防火墙端口

vi /etc/sysconfig/iptables
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT                   ##增加
:wq!                         #保存
/etc/init.d/iptables restart   #重启防火墙生效

2、关闭SELINUX

vi /etc/selinux/config   #编辑配置文件
#SELINUX=enforcing #注释掉
#SELINUXTYPE=targeted #注释掉
SELINUX=disabled #增加
:wq #保存
shutdown -r now #重启系统

3、安装编译工具及库文件

yum install make apr* autoconf automake curl curl-devel gcc gcc-c++ zlib-devel openssl openssl-devel pcre-devel gd kernel keyutils patch perl kernel-headers compat*  cpp glibc libgomp libstdc++-devel keyutils-libs-devel libsepol-devel libselinux-devel krb5-devel zlib-devel libXpm* freetype libjpeg* libpng* php-common php-gd ncurses* libtool* libxml2 libxml2-devel patch

二、下载所需文件

1、pcre : https://ftp.pcre.org/pub/pcre/pcre-8.40.tar.gz

2、nginx : http://nginx.org/download/nginx-1.11.10.tar.gz

三、安装

1、安装pcre

mkdir /usr/local/pcre                  #创建安装文件夹
tar zxvf pcre-8.40.tar.gz              #解压包文件
cd pcre-8.40
./configure --prefix=/usr/local/pcre              #配置编译文件
make && make instal                          #编译并安装

2、安装nginx

groupadd www              #添加www组
useradd -g www www -s /bin/false     #创建nginx运行账户www并加入到www组,不允许www用户直接登录系统
cd nginx-1.11.10
./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_stub_status_module  --with-http_gzip_static_module --with-pcre=/usr/local/src/pcre-8.40          #编译配置文件,注意:--with-pcre=/usr/local/src/pcre-8.30指向的是源码包解压的路径,而不是安装的路径,否则会报错
make
make install
/usr/local/nginx/sbin/nginx  #启动Nginx

 

设置nginx开启启动
vi /etc/rc.d/init.d/nginx    #编辑启动文件添加下面内容
#!/bin/bash
# nginx Startup script for the Nginx HTTP Server
# it is v.0.0.2 version.
# chkconfig: - 85 15
# description: Nginx is a high-performance web and proxy server.
#              It has a lot of features, but it's not for everyone.
# processname: nginx
# pidfile: /var/run/nginx.pid
# config: /usr/local/nginx/conf/nginx.conf
nginxd=/usr/local/nginx/sbin/nginx
nginx_config=/usr/local/nginx/conf/nginx.conf
nginx_pid=/usr/local/nginx/logs/nginx.pid
RETVAL=0
prog="nginx"
# Source function library.
.  /etc/rc.d/init.d/functions
# Source networking configuration.
.  /etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
[ -x $nginxd ] || exit 0
# Start nginx daemons functions.
start() {
if [ -e $nginx_pid ];then
echo "nginx already running...."
exit 1
fi
echo -n $"Starting $prog: "
daemon $nginxd -c ${nginx_config}
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch /var/lock/subsys/nginx
return $RETVAL
}
# Stop nginx daemons functions.
stop() {
echo -n $"Stopping $prog: "
killproc $nginxd
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f /var/lock/subsys/nginx /usr/local/nginx/logs/nginx.pid
}
reload() {
echo -n $"Reloading $prog: "
#kill -HUP `cat ${nginx_pid}`
killproc $nginxd -HUP
RETVAL=$?
echo
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
reload)
reload
;;
restart)
stop
start
;;

status)
status $prog
RETVAL=$?
;;
*)
echo $"Usage: $prog {start|stop|restart|reload|status|help}"
exit 1
esac
exit $RETVAL


-----------------------------------------------------
:wq!  保存

 

chmod 775 /etc/rc.d/init.d/nginx  #赋予文件执行权限
chkconfig nginx on    #设置开机启动
/etc/rc.d/init.d/nginx restart #重启Nginx

 

Centos安装图形桌面以及Vncserver

1、安装桌面

yum groupinstall -y "X Window System"
yum groupinstall -y "Desktop"
yum groupinstall -y "Chinese Support"

2、安装Vncserver

yum install -y tigervnc-server   ##安装vncserver
chkconfig --level 345 vncserver on    ##配置开机自启动
vncserver   #直接运行
password:    #输入密码
Verify:           #确认密码

2.1、配置使用gnome桌面

vi /root/.vnc/xstartup
#在文件的最后将twm &注释掉,添加
gnome-session &

2.2配置Vncserver

vi /etc/sysconfig/vncservers
VNCSERVERS = "1:root"
VNCSERVERARGS[1] = "-geometry 1200*800"

3.重启vncserver服务

service vncserver restart

 

CentOs下自动备份文件及数据至Dropbox

1、创建Dropbox应用

因为应用的是Dropbox的应用所以我们首先需要创建一个[https://www.dropbox.com/developers/apps/create],应用类型我们选择Dropbox Api,数据类型选择App folder,然后下面打钩,点击创建即可

2、下载自动备份脚本

脚本已经托管在github上,请点击前往[https://raw.github.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh].
下载下来后给予执行权限

chmod +x dropbox_uploader.sh

接下来执行这个脚本

./dropbox_uploader.sh

在执行中需要我输入dropbox创建的token
创建链接[https://www.dropbox.com/developers/apps/info/ob2vf2bq6fz10ai]点击Generated access token进行创建
输入token后再输入y然后回车即可

3、便捷备份脚本

根据别人的脚本修改了一下

vi backup.sh   #创建执行文件
#!/bin/bash

 # 定义需要备份的目录
WEB_DIR=/home/wwwroot  # 网站数据存放目录
 
 # 定义备份存放目录
 DROPBOX_DIR=/$(date +%Y-%m-%d)  # Dropbox上的备份目录
 LOCAL_BAK_DIR=/home/backup  # 本地备份文件存放目录

 # 定义备份文件名称
 WebBakName=Web_$(date +%Y%m%d).tar.gz
 DBBakName=DB_$(date +%Y%m%d).tar.gz
 
 # 定义旧数据名称
 Old_DROPBOX_DIR=/$(date -d -7day +%Y-%m-%d)
 OldWebBakName=Web_$(date -d -10day +%Y%m%d).tar.gz
 OldDBBakName=DB_$(date -d -10day +%Y%m%d).tar.gz
 
 #导出数据库
 cd $LOCAL_BAK_DIR
 mysqldump --opt -u用户名 -p密码 数据库名|gzip > $LOCAL_BAK_DIR/$(date +%Y%m%d).sql.gz
 
 #压缩数据库文件合并为一个压缩文件
 tar zcf $LOCAL_BAK_DIR/$DBBakName $LOCAL_BAK_DIR/*.sql.gz
 rm -rf $LOCAL_BAK_DIR/*.sql.gz
 
 #压缩网站数据
 cd $WEB_DIR
 tar zcf $LOCAL_BAK_DIR/$WebBakName ./*
 
 cd ~
 #开始上传
 ./dropbox_uploader.sh upload $LOCAL_BAK_DIR/$DBBakName $DROPBOX_DIR/$DBBakName
 #./dropbox_uploader.sh upload $LOCAL_BAK_DIR/$NginxConfBakName $DROPBOX_DIR/$NginxConfBakName
 ./dropbox_uploader.sh upload $LOCAL_BAK_DIR/$WebBakName $DROPBOX_DIR/$WebBakName
 
 #删除旧数据
 rm -rf $LOCAL_BAK_DIR/$OldWebBakName $LOCAL_BAK_DIR/$OldDBBakName
 ./dropbox_uploader.sh delete $Old_DROPBOX_DIR/
 
 echo -e "Backup Done!"

然后给予这个脚本可执行权限即可

chmod +x backup.sh

添加定时任务

crontab -e ##编辑定时任务
30 3 * * * ~/backup.sh

这样每天凌晨3点30分就会自动执行备份程序了。