1.解压:tar zxvf SeasLog-1.7.6.tgz

进入解压目录执行:phpize(是一个shell脚本,编译PHP扩展的工具,主要是根据系统信息生成对应的configure文件

./configure --with-php-config=/usr/local/php/bin/php-config

make && make install

然后在php.int添加SeasLog.os扩展

最后修改php.ini配置

[SeasLog]
seaslog.default_basepath = /tmp
seaslog.default_logger = default
seaslog.desting_type = 1
seaslog.disting_by_hour = 1
seaslog.use_buffer = 1
seaslog.buffer_size = 100
seaslog.trace_error = 1
seaslog.trace_exception = 0

在php.ini中 extension下面接着配置以下信息:
 
seaslog.default_basepath = 'D:/WWW/log' ;默认log根目录 记着 是目录
seaslog.default_logger = default ;默认日志目录 位于default_basepath目录下的小目录
seaslog.disting_type = 1 ;是否以type分文件 1是 0否(默认) 若是 则每种级别都会单独生成日志文件
seaslog.disting_by_hour = 0 ;是否每小时划分一个文件 1是 0否(默认) 若是 则每个小时都会生成新文件
seaslog.use_buffer = 1 ;是否启用buffer 1是 0否(默认) 默认关闭,当开启此项时,日志预存于内存,当请求结束时(或异常退出时)一次写入文件。
seaslog.buffer_size = 100 ;buffer中缓冲数量 默认0(不使用)
seaslog.level = 0 ;记录日志级别 默认0(所有日志)

2.seasLog相关命令

<?php
//按模块分类设置保存日志文件夹
SeasLog::setLogger('Web');
//设置基础路径
SeasLog::setBasePath('/home/wwwroot/default/seaslog/log');
//写入日志
SeasLog::debug('it is debug info');
SeasLog::info('is info');
SeasLog::notice('it is notice');
//查看日志记录信息
$data = SeasLog::analyzerCount();
$data2 = SeasLog::analyzerDetail('debug');
SeasLog::log('debug','debug..');//通用函数
var_dump($data,$data2);
//基础路径
//echo SeasLog::getBasePath();

3.在tp框架使用seasLog扩展

public function index(){
    SeasLog::log('debug','123');
}

其他资料参考:
SeasLog 日志8个级别
debug -> info -> notice -> warning -> error -> critical -> alert -> emergency
保存退出 重启Apache 打个phpinfo()出来找找有没有SeasLog扩展
以下是PHP中的seaslog函数:
basepath
设置:Seaslog::setBasePath('/log/base_test');
获取:Seaslog::getBasePath();
 
logger
设置:Seaslog::setLogger('app');
获取:Seaslog::getLastLogger();
 
写日志:
Seaslog::debug('...')
Seaslog::info('...')
Seaslog::notice('...')
八个级别都可以记录
日志内容格式为:级别-pid-时间戳-格式化时间-日志内容
 
读取日志条数
Seaslog::analyzerCount('{日志级别}');//如果不填参数 则代表统计全部级别
Seaslog::analyzerCount('{日志级别}','20170914');指定统计某一天的日志
 
读取日志
Seaslog::analyzerDetail('{日志级别}','20170914');//也有两个参数 日志级别和指定时间 第一个日志级别参数必填 时间可选
 
 
输出info级别的日志:
echo "<pre>";
print_r(Seaslog::analyzerDetail('info'));
echo "</pre>";
 
某些PHP框架默认为当前控制器命名空间 所以会报Seaslog not found
只需在前面指定根命名空间就OK: \Seaslog::debug('...')


相关下载地址:

https://github.com/Neeke/SeasLog

http://pecl.php.net/package/SeasLog


正好无聊,就给博客加了个登录,顺便就写了个贴

本教程是基于thinkphp3.2框架开发的

1.前期准备:

1)先去QQ互联申请APPID和APPkey

    官方网站:https://connect.qq.com/index.html

2)下载相关的sdk包

    地址:http://wiki.connect.qq.com/sdk%E4%B8%8B%E8%BD%BD

3)线上域名地址服务器(本地不行)

2.删除无关紧要的文件之后,把下载好的sdk放在tp框架的第三方扩展vender文件夹下

原文件目录:

2.png

配置优化之后: 

1.png

关于优化:

安装提示配置完之后,主要文件在API文件夹,其他看情况删除

入口文件:qqConnectAPI.php

3.png

配置文件:Recorder.class.php(注意回调地址别搞错,要和你再QQ互联填写的一致,不然拿不了返回的信息) 

4.png

TP代码:

逻辑:点击页面登录按钮跳转到登录页->qqlogin(QQ授权登录页)->回调地址获取返回的openid和accesstoken的值->使用获取的值调用API接口

//回调地址 获取返回,值设置保存cookie

public function callback(){
//请求accesstoken
Vendor('qqConnect.qqConnectAPI');
$oauth = new \Oauth();
$accesstoken = $oauth->qq_callback();
$openid = $oauth->get_openid();
setcookie('qq_accesstoken',$accesstoken,time()+86400);
setcookie('qq_openid',$openid,time()+86400);
header("Location:index");
}

//退出登录 删除cookie

public function qqlogout(){
setcookie('qq_accesstoken',null);
setcookie('qq_openid',null);
header("Location:index");
}

// 登录页

public function qqlogin(){
//访问qq登录页面
Vendor('qqConnect.qqConnectAPI');
$oauth = new \Oauth();
$oauth->qq_login();
}

//调用API接口获取用户信息

$qc = new \QC($_COOKIE['qq_accesstoken'],$_COOKIE['qq_openid']);
$userinfo = $qc->get_user_info();


大概就这样,如果有什么问题或者疑问请留言,欢迎纠错


配置nginx虚拟主机

cbbtop域名事先解析

 

vi /usr/local/nginx/conf/nginx.conf

==èwww.cbb.com公司网站  

server

        {

                listen       80;

                server_name www.cbb.com;

                index index.html index.htm index.php;

                root  /home/wwwroot/default/cbb;

 

                location ~ .*\.(php|php5)?$

                        {

                                try_files $uri =404;

                                fastcgi_pass  unix:/tmp/php-cgi.sock;

                                fastcgi_index index.php;

                                include fcgi.conf;

                        }

}

 

==èwww.top.com公司网站

 

server

        {

                listen       80;

                server_name www.top.com;

                index index.html index.htm index.php;

                root  /home/wwwroot/top;

 

                location ~ .*\.(php|php5)?$

                        {

                                try_files $uri =404;

                                fastcgi_pass  unix:/tmp/php-cgi.sock;

                                fastcgi_index index.php;

                                include fcgi.conf;

                        }

        }

重启nginx

/etc/init.d/nginx restart


1.先写个html按钮

<a class="btn btn-info btn-xs" ui-sref="user.changePwd({uid: User.UserID})">修改密码</a>

ui-sref是跳转链接,相对路径:user文件夹下面的changePwd.html页面

传参数:{uid: User.UserID} or ui-sref = “页面({参数1:参数1值,参数2:参数2值,…})”


2.html表单页面


<header><i class="fa fa-fw fa-file"></i>注册新用户</header>

<section>

    <div class="container-fluid">

        <div class="row">

            <div class="col-sm-12">

                //提交到控制器里面的userHahaFormSubmit(user)方法

                <form class="form-horizontal" name="form" ng-submit="userHahaFormSubmit(user)" novalidate>

                    <div class="form-group">

                        <label class="col-sm-2 control-label" for="password">密码</label>

                        <div class="col-sm-3">

                            <input type="text" class="form-control" id="password" name="password" ng-model="user.password" placeholder="不能少于 3 位" ng-minlength="3" ng-maxlength="15" required>

                        </div>

                        <p class="col-sm-7 help-block" ng-show="form.password.$error.minlength || form.password.$error.maxlength">

                            <span class="text-danger">密码必须由字母、数字组成,长度范围(3-15)</span>

                        </p>

                    </div>

                    <hr/>

                    <div class="form-group">

                        <label class="col-sm-2"></label>

                        <div class=" col-sm-3">

                            <button type="submit" class="btn btn-primary btn-block" ng-disabled="form.$invalid">确认注册</button> {{msg}}

                        </div>

                    </div>

                </form>

            </div>

        </div>

    </div>

</section>



2.配置路由

backend.config(

    ['$urlRouterProvider', '$stateProvider', '$httpProvider', function ($urlRouterProvider, $stateProvider, $httpProvider) {

        /* 使用when来对一些不合法的路由进行重定向 */

        $urlRouterProvider.when('', '/home');


        /* 通过$stateProvider的state()函数来进行路由定义 */

        $stateProvider.state('user.changePwd', {

            url: '/changePwd/:uid',

            //or url:'/changePwd?uid'

            controller: 'userdlChangePwdHtmlFormController',

            templateUrl: 'tpl/user/changePwd.html'

        })


        $stateProvider.state('404', {

            url: '/404',

            templateUrl: '404.html'

        })

    }]

)

说明:state('跳转页面url',{url:带参数uid跳转url,controller:控制器名,templateUrl:静态页面地址})



3.写controller提交表单

//修改密码

backend.controller('userHahaFormController', function($scope, $http,$stateParams) { 

      $scope.captcha_id = '';

      $scope.userHahaFormSubmit = function(user) {

          user.uid = $stateParams.uid;//使用$stateParams获取uid的参数值

          $http({

              method: 'POST',

              url: '/index.php/backend/user/haha',//条件到haha接口

              headers: {'Content-Type': 'application/x-www-form-urlencoded'},

              data: $.param(user) //表单提交

          }).then(function(response) {

              console.log(response);

              var json_data = response.data;

              if (json_data.ret == 200) {

                  if (json_data.data.code == 0) {

                      window.location.href = '/backend/index.html#/user/list'; //成功跳转url

                  } else {

                      $scope.msg = "<span class='text-warning'>" + json_data.data.msg + "</span>"

                  }

              }

          }, function(response) {

              console.log(response)

              $scope.msg = "<span class='text-warning'>" + response.data.msg + "</span>"

          })


      }

  })

//  修改密码结束


laravel5.4开发笔记(二)


以下是有关laravel框架的部分总结

如果有任何问题和以为欢迎留言

代码都是调试过没有问题的

都是数据库的相关操作


数据操作

1.添加数据操作

    cmd给数据库表post添加内容:


>>> $post = new /App/Post();
PHP Parse error: Syntax error, unexpected '/' on line 1
>>> $post = new \App\Post();
=> App\Post {#651}
>>> $post->title = "this is post1";
=> "this is post1"
>>> $post->content = "this is post1 content";
=> "this is post1 content"
>>> $post->save();
=> true
>>>

    数据表结果: 

Image.png

时区设置:UTC改成Asia/Shanghai然后重启tinker 

Image.png


2.查询操作


查询id为2的数据:

>>> \App\Post::find(2);
=> App\Post {#666
     id: 2,
     title: "this is post2",
     content: "this is post2 content",
     user_id: 0,
     created_at: "2017-08-22 03:49:05",
     updated_at: "2017-08-22 03:49:05",
   }
>>>

条件查询where: 

>>> \App\Post::where('title','this is post1')->first();
=> App\Post {#671
     id: 1,
     title: "this is post1",
     content: "this is post1 content",
     user_id: 0,
     created_at: "2017-08-22 03:35:14",
     updated_at: "2017-08-22 03:35:14",
   }
>>>

get()方法返回的是一个对象: 


>>> \App\Post::where('title','this is post1')->get();
=> Illuminate\Database\Eloquent\Collection {#664
     all: [
       App\Post {#667
         id: 1,
         title: "this is post1",
         content: "this is post1 content",
         user_id: 0,
         created_at: "2017-08-22 03:35:14",
         updated_at: "2017-08-22 03:35:14",
       },
     ],
   }
>>>

3.修改操作

修改id为2的表数据

>>> $post = \App\Post::find(2);
=> App\Post {#670
     id: 2,
     title: "this is post2",
     content: "this is post2 content",
     user_id: 0,
     created_at: "2017-08-22 03:49:05",
     updated_at: "2017-08-22 03:49:05",
   }
>>> $post->title = 'this is post2new';
=> "this is post2new"
>>> $post->save();
=> true

4.删除操作

删除id为2的数据


>>> $post = \App\Post::find(2);
=> App\Post {#666
     id: 2,
     title: "this is post2new",
     content: "this is post2 content",
     user_id: 0,
     created_at: "2017-08-22 03:49:05",
     updated_at: "2017-08-22 12:06:54",
   }
>>> $post->delete();
=> true
>>>

续:请看laravel5.4开发笔记(三)


由于笔记太多所以分为几篇文章发布

laravel5.4开发笔记(一)


1.conposer的安装和使用

    1)参考文档:https://getcomposer.org/download/

2.laravel的安装

    1)参考文档:http://laravelacademy.org/post/6665.html

    2)在线开发手册:http://d.laravel-china.org/docs/5.4/routing

3.本地开发服务器

   如果你在本地安装了PHP,并且想要使用PHP内置的开发环境服务器为应用提供服务,可以使用Artisan命令serve,该命令将会在本地启动开发环境服务器http://localhost:8000

CMD窗口命令:

php artisan serve

4、Web服务器配置

美化URL

Apache

框架中自带的public/.htaccess文件支持URL中隐藏index.php,如过你的Laravel应用使用Apache作为服务器,需要先确保Apache启用了mod_rewrite模块以支持.htaccess解析。

如果Laravel自带的.htaccess文件不起作用,试试将其中内容做如下替换:

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]


Nginx

如果你使用的是Nginx,使用如下站点配置指令就可以支持URL美化:

location / {
    try_files $uri $uri/ /index.php?$query_string;
}

当然,使用 Homestead 或 Valet 的话,以上配置已经为你配置好以支持URL美化。

5.文件夹介绍

逻辑代码:app

配置文件:config

数据库管理:database

对外资源:public

开启服务和创建数据库表(测试mysql是否配置成功):

K%5DNHR6LNL%7BKW5ZN)%7DKMK5MT.png

6.laravel的路由

Image.png

7.laravel模板语法

Image.png


8.使用migration(数据库迁移)创建posts数据表

Image.png


创建迁移表命令:php artisan make:migration create_posts_table

位置: 

Image.png

参考文档:

http://laravelacademy.org/post/6964.html

参考代码

increments('id');
            $table->string('title',100)->default("");//字段名为:title 长度:100 default:默认值
            $table->text('content');
            $table->integer('user_id')->default(0);
            $table->timestamp();//添加 created_at 和 updated_at 列
        });
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('posts');//回滚
    }
}

迁移命令: 

php artisan migrate

错误提示:创建字段的时候没有指定长度,默认长度1071超过了系统默认长度1000 

Image.png

解决方案: 

Image.png


迁移结果:有三个,所以创建了3个,除非之前已经迁移过才会只有新的表迁移 

Image.png

Image.png

9.文章的模型创建

Image.png


创建模型命令:php artisan make:model Post

调试模型数据库: 

php artisan tinker



续:请看laravel5.4开发笔记(二)

curl-post获取接口的返回值-2017.05.05.png

2017.05.06yaf框架解决Unicode编码问题.png

tp使用UE富文本编辑器时存进mysql会是实体而非html标签,导致遍历出来的内容html标签不解析

如图:

Image.png

mysql表:

Image2.png


解决方案:

使用html_entity_decode()函数把 HTML 实体转换为字符

Image4.png


Image3.png