2017年5月

jquery常用的
prepend() //在指定的节点里(儿子)开头处插入《例如select插入第一个option》
append() //追加
empty() //没有参数,干掉所有的儿子
trigger() //触发被选元素的指定事件类型(A有个点击事件,点击B可以触发A的点击事件)

    $("B").click(function(){
        $("A").trigger('click');
    })

bind() //可以执行多个事件$("#button").bind({

        click:function(){},
        mouseover:function(){}
    
    });

》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
jquery动画效果
hide()和show() //隐藏和显示
fadeIn()和fadeOut() //淡入和淡出
fadeToggle() //如果元素已淡出,则 fadeToggle() 会向元素添加淡入效果,反之添加淡出效果。
fadeTo(两个参数) //$("#div1").fadeTo("slow",0.15);渐变为给定的不透明度(值介于 0 与 1 之间)
slideDown() //向下滑动元素,将包着的元素滑下来(一点滑着显示)
slideUp() //向上滑动元素,将包着的元素滑上去(一点滑着隐藏)
slideToggle() //对上面的情况进行切换
animate({},speed)//动画,第一个参数是对象,有仨,常用俩,和一个速度

        height或者width的值可以是 hide,show,toggle(上拉下拉)
        ||||||移动的元素里有文字也要随之变大的话,得单独给
        |||||| div.animate({left:'100px'},"slow");
         ||||||div.animate({fontSize:'3em'},"slow");
        $("button").click(function(){
              var div=$("div");
              div.animate({height:'300px',opacity:'0.4'},"slow");
              div.animate({width:'300px',opacity:'0.8'},"slow");
              div.animate({height:'100px',opacity:'0.4'},"slow");
             div.animate({width:'100px',opacity:'0.8'},"slow");
           });

stop() //适用于所用jquery效果,停止,没有参数(有,可以不用,默认都是false)

    (比如slideToggle,给当前元素一个slideToggle,再给个按钮,选中此元素给个stop())

ignore_user_abort(); //客户端断开时,可以让脚本继续在后台执行
set_time_limit(0); //忽略php.ini设置的脚本运行时间限制
$interval = 560; //设置执行周期,单位为秒,5分钟为 560=300
do{
$dir = "temp/"; //你的临时目录位置
$handle=opendir("{$dir}/");
while (false !== ($file=readdir($handle))) {
if ($file!="." && $file!=".." && !is_dir("{$dir}/{$file}")) {
@unlink ("{$dir}/{$file}");
}
}
closedir($handle); //关闭由 opendir() 函数打开的目录
sleep($interval); //执行一个周期后,休眠$interval时间,休眠结束后脚本继续执行
}while(true); //周期性执行脚本

ignore_user_abort(); //即使不运行这个网页也继续执行
set_time_limit(0) //执行时没有时间限制,会一直执行下去

你程序向一个字段或一条语句中用超大的数据存储,但你的mysql的max_allowed_packet又没设置这么大的参考,所在就出现了这样的问题
命令行下:set global max_allowed_packet=524288000;
然后service mysql stop和service mysql start重启下
(在Linux下的,用xshell)

一、使用laravel前的准备工作:

二、laravel框架安装:

1、composer的使用:下载 安装
    进入getcomposer.org 去现在windows系统版本 它会自动下载安装并为你添加环境变量 让你直接在cmd中使用
安装过程中 找到PHP运行文件 PHP.exe 初次以外还可以设置代理服务器(跳过)安装完成运行composer会输出帮助信息
2、使用composer安装laravel
    administrator> cd ~\www
    使用中文镜像下载和安装 进入laravel中文网 golaravel.com 点击右边镜像关键字 进入后搜索命令 composer config -g repo.packagist composer https://packagist.phpcomposer.com
    ~\www> composer create-project laravel/laravel --prefer-dist(使用压缩的框架文件) la
    如果提示composer命令不可用 则重启    
    安装完成后 产生序列号 KEY 
执行 php -S localhost -t App/public 查看欢迎页
如果使用linux或者unix等系统 需要修改store和vendor的owner为Apache
3、查看安装文件 查找首页 并运行

三、laravel的基本使用


1、路由的使用: 
路由设置在app->HTTP目录的routes.php文件中 添加各种不同的路由规则:
Route:请求方式(访问地址,执行代码);
1-1 GET请求地址 映射到控制器中的操作
Route::get("/", "WelcomeController@index");    
可以使用某个匿名函数 写入执行代码
Route:get("test", function () {
    return "这是GET请求!";
});

1-2 POST请求 
Route:post("test", function () {
    return "这是POST请求";
});

POST请求的模拟可以使用FF的HTTP REQUEST插件 laravel中的POST请求需要携带TOKEN参数 防止CSRF(cross site request forage)

1-3 ANY不区分请求的类型
Route:any("test", function () {
    return "不区分请求的形式";
});



2、控制器创建:
自动创建:
~\la > php artisan make::controller UserController    
自动产生UserController.php文件 并生成增删改查的一套方法

手动创建 
Http->Controller目录中 创建一个 UserController.php 
class UserController extends Controller {
    public function index(){}
}
Route::get("user", "UserController@index");

资源器使用:
Route::resource("user", "UserController");
~\la >php artisan make:controller UserController

3、驱动模板
在控制器中调度模板和发送数据使用views函数
return view("user.add")->with("name", "Lucy");   
多数据发送
$data = array(
    "name" => "Lucy",
    "sex" => "female",
    "age" => 23,
);
views("user", $data);
 如果数据只有一个变量值 则使用compact(变量名字符串)生成数据
$name = "Lucy";
view("user", compact("name"));
view()函数 其实本质上是View对make()方法的调用 View::make("user");

4、模板使用
视图模板存放在 resource->view 目录下 模板文件需要.blade后缀 创建 user.blade.php模板文件

4-1:变量输出
模板中直接嵌入PHP脚本:<?php echo $name; ?>
使用模板标签:
        {{ $name }}   默认值设置 {{$name or "无名大侠"}}
        {{ "hello world" }}
非转移输出    
        @{{ some text }} @中的内容 总是作字符常量解析  因此可以用@来界定模板和原值
转义输出:
        {{ "<h4>原样显示的HTML</h4>" }}

4-2:控制流和循环
@if($name) 
    $name;
@else
    "无名大侠";
@endif

$user = array(
    "name" => "Lucy",
    "sex" => "female",
    "age" => 23
);
<ul>
@foreach ($user as $tmp)
    <li></li>  
@endforeach

@for($i = 0; $i < 10; $i++)
    
@endfor

@while()

@endwhile;
</ul> 

4-4 子视图模型的使用
使用@include引入存放在views/abc/header.blade.php
@include("abc.header");    

第二天:环境配置与基本操作

1、.env 文件里面设置 设置键值对形式的配置信息
DB_CONNECTION = mysql
config里面读取环境配置的键值 env("DB_CONNECTION", "mysql");
一般要配置的是:
    部署模式:APP_DEBUG=true
    数据库DB配置
    SESSION配置
    DOWN/UP        执行php artisan down 进入维护页面 在resources->views->errors->503.blade.php
                php artisan up 恢复服务

2、Eloquent 用来和数据库交互的一个工具和机制
    2-1 创建表模型:
    php artisan make:model User 在APP目录中产生一个 User.php
    配置表模型:
        $table = "think_admin_user";    表名
        $primaryKey = "uid";        主键
        $hidden    = ["password","createtime"];    查询隐藏的字段
        $fillable = [];            可自动填充的字段
        $guarded = [];            不可自动转换的字段

    2-2 模型的使用:    
        控制器中直接调用
        $userModel = new \App\User();
        $userModel->all();

        添加模型方法
        public function read()
        {
            return $this->all();
        }
        控制器中调用自定义模型方法
        $userModel->read();
        
    2-2 模型的使用 基本增删改查

        查询结果集
        public function read() 
        {
            查一条 主键ID 为 1的这条 找不到返回空
            $this->find(1);    
            找不到进行报错
            $this>findOrFail(1);
            连贯操作
            $this->where("uid", "1")->get();
            非等于查找
            $this->where("uid", ">", 1)->get();
        }
     
        添加一条数据
        public function userAdd() 
        {    
            动态写入字段值
            $this->uname = "hello";
            $this->password = md5(rand(1,100));

            已有的储备数据
            $data = ["uname" => "hello", "password" => md5(rand(1, 100))];
            $this->fill($data);
            写入数据时 默认会有一个修改和创建时间 要不设置该字段 要不关闭验证 通过模型中设置 public $timestamps = false 关闭
            
            return $this->save();
        }

        修改数据
        public function userUpdate() 
        {
            设置要修改的用户
            $user = $this->find(5);
            设置数据值
            $user->uname = "world";
            保存新数据
            $user->save();

            批量修改数据
            $users = $this->where("uid", ">", 10);
            $user->update(["nickname" => "Lautinggg"]);
        }

        删除数据
        public function userDel()
        {
            $user = $this->find(10);
            $user->delete();
        }
        
    2-3 模型数据的查看和格式转化
        每条数据默认以对象形式存在,多条数据则是对象的集合(collection对象),可以使用dd()辅助函数插件, 如果希望转化成数组则可以使用toArray()方法
        function () {
            $userModel = new \App\User();
            $users = $userModel->all();
            dd($users->all());    输出collection
            使用toArray()方法 将对象转化成数组形式
            dd($users->all()->toArray());

            关于collection对象的方法 使用collect将数据封装成collection对象
            $arr = ["name" => "Lucy", "sex" => "female", "age" => 23];
            $collection = collect($arr);
            dd(get_class_methods($collection));
        }
        collection的常见方法:
        all()    查看所有数据
        first()    查看第一个数据
        last()    返回最后一个数据
        contains("Lucy") 检测某个数据值
        has("sex")    检测某个索引或者属性
        get("age")    获取某个值
        toArray()    将结果转化成数组形式
        toJson()    将结果转化成json数据格式
        each( function () {})        循环执行动作


3、获取用户提交数据
function () {
    return Input::get("name");
    获取某个get参数值
    return Request::get("title", ["noTitle"]);
    获取查询字符串的值
    return Request::query(["name"]);
    获取所有请求参数的值
    return Request::all();

    检测请求参数
    return Rquest::has("name");    检测name值是否存在
    return Request::exists("name");    检测name键是否存在

    请求检索
    return Request::only("name", "sex");
    return Request::except("age");
    return Request::url();        请求的URL
    return Request::fullUrl();    完整的URL地址
    
    请求历史        
    return Request::flash();    存值 session中
    return Request::old();        取值
    return Request::flashOnly("name");    只存name
    return Request::flashExcept("sex");    除了sex都存
}

4、文件上传
function () {
    获取所有上传文件 返回对象集合
    dd(Request::file());
    获取指定的上传文件
    dd(Request::file("avartar"));
    获取文件各部分信息
    $file = Request::file("avartar");    hasFile("avartar") 判断和检测文件
    $file->getClientOriginalName();        原始的文件名
    $file->getClientOriginalExtension();    原始的文件后缀
}

5、表单验证
加载validator类
use Request,Validator;
function create() {
    $rq = Request::all();
    添加验证规则
    $validator = Validator::make($rq, [
        账号不能为空、不能重复
        "uname" => "required|unique:admin_user",
        "password" => "min:6|max:15",    "between:6,15",
        "phone" => "numeric"
    ]);
    判断是否通过
    if ($validator->fails()) {
        return  $validator->errors();
    }
    
}


6、会话控制
function () {
    查看所有session数据 默认存储了token和flash的值
    Session::all()
    添加session数据
    Session::put("uname", "Lucy");        session(["uname" => "Lucy"]);
    读取某个session数据
    Session::get("uname");
    销毁session
    Session::forget("uname");
    用完即销毁
    Session::pull("uname");
    检测session的值
    Session::has("uname");
}    

7、Hash加密
function () {
    $password = Request::get("password");
    $hashed = Hash::make($password);
    session(["password" => $password]);
}
验证hash加密的方法
function () {
    $password = Request::get("password");
    if (Hash::check($password, session("password"))) { 验证参数有顺序之分
        return "密码正确";
    } else {
        return "密码错误";
    }
}

8、辅助函数
8-1    关于数组操作的
    $arr = [1,2,3,4];
    $arr2 = ["name" => "Lucy", "sex" => "female", "age" => 23];
    第一个/最后一个元素
    head/last($arr);                1
    返回指定索引元素
    array_only($arr2, ["name", "sex"]);    ["name" => "Lucy", "sex" => "female"]
    返回满足条件第一个元素
    array_first($arr, function ($key, $value) {
        return $value > 2;
    });
    添加一个元素值
    array_add($arr2, "job" => "student");
    返回指定以外的值
    array_except($arr2, "job");
    返回指定条件的元素
    array_where($arr, function ($key, $value) {
        return is_string($value);
    });
     


8-2 关于路径的辅助函数
    app_path()/config_path()/public_path()/storage_path()

8-3 关于字符串操作
    $str = "apple";
    智能转化成复数
    str_plural($str);
    判断起始/终止字符串
    dd(starts_with/ends_with($str, "a"));
    下划线转驼峰
    camel_case("hello_world");
    类名去除空间
    class_basename("\App\User");
    限制长度 剩余以....结尾
    str_limit($str, 4);    
    判断模式 是否以app开头
    str_is("app*", $str)

1.如何开启GD库

    ① phpinfo();  通过访问此函数文件来查看你的服务器上有没有此模块
    
    ② wamp目录 -> bin目录 -> php目录 -> ext目录 -> php_gd2.dll文件
    
    ③ php.ini配置文件,通过搜索 php_gd2.dll 可以找到 extension=php_gd2.dll
       将其前面的分号去掉,即开启了gd库绘图功能
       

    

二、绘画步骤


    1.准备画布(颜料)
        
    2.开始绘画
    
    3.输出图像
    
    4.释放资源


示例:
<?php
    //1.创建一个画布,颜色
    $im = imagecreate(200,200);    
    
    $red = imagecolorallocate($im,255,0,0);  //创建一个颜色:红色
    $blue = imagecolorallocate($im,0,0,255);  //创建一个颜色:蓝色 
    $c1 = imagecolorallocate($im,200,200,200);

    //2.开始绘画
     imagefill($im,0,0,$c1); //填充背景
    //....

    //3.输出图像
     header("Content-Type: image/jpeg");//设置响应头信息为一个jpeg的图片
     imagejpeg($im);//输出一个jpeg图片
     
    //4.销毁
     imagedestroy($im); //

三、图片的具体绘制:

3.1 创建一个画布:
    imagecreate(宽,高)--创建一个基于256色的画布
    imagecreatetruecolor( int x_size, int y_size ) -- 新建一个真彩色图像
    
    //还有基于某个图片的画布(将一张图片放到了画布中)
    imagecreatefromgif( string filename )
    imagecreatefrompng( string filename )
    imagecreatefromjpeg( string filename )
    
3.2 绘画:
    //分配定义颜色
    $red = imagecolorallocate($im,255,0,0); //分配一个颜色
    
    //填充背景
    bool imagefill(resource image,int x,int y, int color ); //填充背景
    
    //画点
    bool imagesetpixel(resource image,int x,int y,int color );//画一个像素点
    
    //画一个线段的函数
    bool imageline ( resource image, int x1, int y1, int x2, int y2, int color )

    //画矩形框(不填充)
    bool imagerectangle ( resource image, int x1, int y1, int x2, int y2, int color )
    //画矩形框(填充)
    bool imagefilledrectangle ( resource image, int x1, int y1, int x2, int y2, int color )

    //绘制多边形
    bool imagepolygon ( resource image, array points, int num_points, int color )
    bool imagefilledpolygon ( resource image, array points, int num_points, int color )
    
    //绘制椭圆(正圆)
    imageellipse ( resource image, int cx, int cy, int w, int h, int color )
    imagefilledellipse ( resource image, int cx, int cy, int w, int h, int color )

    //绘制圆弧
    imagearc ( resource image, int cx, int cy, int w, int h, int s, int e, int color)
    imagefilledarc ( resource image, int cx, int cy, int w, int h, int s, int e, int color, int style )
    
    //绘制字串
    bool imagestring ( resource image, int font, int x, int y, string s, int col )
    bool imagestringup ( resource image, int font, int x, int y, string s, int col )
    
    //绘制文本:
    *array imagettftext ( resource image, float size, float angle, int x, int y, int color, string fontfile, string text )
    
    //当上面的字体出现乱码时,使用下面的函数转换编码
    string iconv ( string in_charset, string out_charset, string str )
    
    $name="张三";
    $str = iconv("ISO8859-1","UTF-8",$name);
    $str = iconv("GBK","UTF-8",$name);
    $str = iconv("GB2312","UTF-8",$name);
    
    
    //图片的裁剪、合成、缩放
    **bool imagecopyresampled ( resource dst_image, resource src_image, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h )
    
    * imagesx — 取得图像宽度
    * imagesy — 取得图像高度
    * array getimagesize ( string $filename [, array &$imageinfo ] )  取得图像大小


    
3.3.输出图
     header("Content-Type: image/jpeg");//设置响应头信息为一个jpeg的图片
     imagejpeg($im);//输出一个jpeg图片
     
     header("Content-Type: image/png");//设置响应头信息为一个png的图片
     imagepng($im);//输出一个png图片
     
      //输出到指定文件中(另存为)
      imagepng($im,"**.png");


3.4.销毁
     imagedestroy($im); //    销毁打开的图片