MySQL goes away
你程序向一个字段或一条语句中用超大的数据存储,但你的mysql的max_allowed_packet又没设置这么大的参考,所在就出现了这样的问题
命令行下:set global max_allowed_packet=524288000;
然后service mysql stop和service mysql start重启下
(在Linux下的,用xshell)
你程序向一个字段或一条语句中用超大的数据存储,但你的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); // 销毁打开的图片
一、 php.ini的配置信息
file_uploads = On /Off 是否允许文件上传
upload_max_filesize=2M 上传的文件的最大大小
post_max_size = 8M POST数据所允许的最大大小
upload_tmp_dir 上传文件放置的临时目录
upload_max_filesize的大小一定要小于post_max_size的配置大小。
二、(发送客户端)上传的form表单:
1、 表单必须是post提交
2、 上传的类型:enctype="multipart/form-data"
3、上传使用的表单项
<input type="file" name=".." />
4.(可选)上传大小限制的表单隐藏域:MAX_FILE_SIZE,
<input type="hidden" name="MAX_FILE_SIZE" value="大小字节"/>
注意:此字段必须在文件输入字段之前(常放在form标签后面)
三、(接收服务器端):
1. 使用$_FILES全局数组来接收上传信息
在每个上传的文件里,$_FILES中都会有5个属性:
error:上传的错误号:0--4
0:表示没有发生任何错误。
1:上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
2:表示上传文件大小超出了HTML表单隐藏域属性的MAX_FILE_SIZE元素所指定的最大值。
3:表示文件只被部分上传。
4:表示没有上传任何文件。
6:找不到临时文件夹
7:文件写入失败
name:上传的文件名
size:文件的大小
type:文件类型
tmp_name: 临时文件
2:is_uploaded_file() //是否是上传文件
3:move_uploaded_file() //执行移动上传文件
四、 下载设置:
header("Content-Type:类型"); //指定响应类型
header("Content-Disposition:attachment;filename=文件名"); //**执行下载文件名
header("Content-Length:文件大小");
readfile("./uploads/".$picname); //读取并输出图片内容;
查找命令
1) 命令名称:which
命令所在路径:/usr/bin/which
功能描述:查看命令文件位置和命令可能出现的别名
2) 命令名称:find
命令所在路径:/usr/bin/find
功能描述:搜索系统中的符合条件的文件
-name 根据文件名查找通配符
任意多个字符
? 1个字符
[] 指范围值,外侧加引号
例:find /var –name “*.log”
find ./ -name “[1-3].txt”
-size 根据大小查找
单位是 block 数据块 一块是512字节
1M -> 1024k -> 2048块 (1块是0.5k 也就是512字节)100M -> 102400k -> 204800块
例 find /etc -size -10k 查找小于10k的文件
find /etc -size +2M 查找大于2M的文件注意+-号,如果没有,是精确这么大
-user 根据所有者查找
例 find /home -user jack
在/home中,查找所有jack用户的文件
在系统中需要存在此用户,否则报错
-按时间查找
按天 ctime atime mtime
按分钟 cmin amin mmin
c change 改变 #表示属性被修改过:所有者、所属组、权限
a access 访问 #被访问过(被查看过)
m modify 修改 #表示内容被修改过例:find /etc -mmin -120 查找120分钟内被修改过的
find /etc -mtime +7 超过7天没有改过的文件
-type根据文件类型查找
例: -type f 二进制文件(普通文件)
-type l 软链接文件
-type d 目录
-逻辑连接符:
-a (and 逻辑与 ) -o (or 逻辑或)
例:find /etc -size +1k -a -size -10k
在etc目录下查找大于1k并且小于10k的文件
-命令执行连接符(对查找到的文件,进一步处理)
find ... -exec 命令 {} \;
{}表示find查询的结果集
\是转义符,不使用命令别名,直接使用命令本身
;分号是表示语句的结束
注意:固定格式,只能这样写。注意中间的空格。
转义符的作用是什么?在linux中有一个别名机制,如rm删除文件,执行的却是rm -i(用which rm 可以查看命令别名),使用rm删除文件前会提示,就是因为rm -i这个参数。如果想使用命令原意,可以在加\转义,
如:\rm test.txt 则不会提示,直接删除
找到文件后查看详情:
find /etc -name inittab -exec ls -l {} \;
find /etc -name “init*”-a -type f -exec ls -l {} \; 通过-type f过滤掉目录,只列出文件,否则ls会列出很多文件
找到testfile后,直接删除
find /test -name testfile -exec rm {} \;
找samlee用户的所有文件并删除
find /home -user samlee -exec rm –r {} \;
rm –r 连带目录一起删除。报错原因:-exec 不适合大量传输,速率慢,导致。
找samlee用户的所有文件并删除,删除前会一个提示确认
find /home -user samlee -ok rm -r {} \;
-根据i节点查找
-inum i节点号
有一些文件的硬链接数量很多,有相同的i节点,查找其中一个文件的i节点号,一次性删除
find ./ -inum 2310630 -exec rm {} \;
3) grep “字符串” 文件名
命令所在路径:/bin/grep
功能描述:在文件内查找符合条件的字串行
grep -i “root” /etc/passwd
-v 反向选择
-i 忽略大小写
find:在系统当中搜索符合条件的文件名,如果需要匹配,使用通配符匹配。通配符是完全匹配。
grep:在文件当中搜索符合条件的字符串,如果需要匹配,使用正则表达式匹配,正则表达式是包含匹配
注意事项:
尽量不要在根目录/中查找,查找得慢,会占用太多服务器资源
如果需要在服务器中全盘查找,可以写一条计划任务在凌晨执行
查找范围越小越好,匹配条件,越精准越好
4) 管道符
命令1 | 命令2 将命令1的标准输出作为命令2的标准输入
例:ls -l /etc | more 分屏显示ls内容
四、帮助命令
1) man 命令名 查看命令的帮助
命令名称:man
命令英文原意:manual
命令所在路径:/usr/bin/man
2) 命令 --help 查看命令的常见选项
命令 --help
help 命令
五、压缩和解压缩
.zip .gz .bz2 linux可以识别的常见压缩格式
.tar.gz .tar.bz2 常见的压缩和打包格式(1)压缩&解压缩
zip
压缩格式: zip 压缩文件(生成) 源文件
解压格式: unzip 压缩包名
-r 压缩目录
(2)打包压缩&解包加压缩
tar -*cvf 压缩文件名(生成) 源文件
-z 识别.tar.gz格式-j 识别.tar.bz2格式
-c 压缩
-v 显示压缩过程
-f 指定压缩包名
tar -*xvf 压缩包名
-x 解压缩
tar -*tvf 压缩包名
-t 只查看,不解压tar -*xvf 压缩包名 -C 目录
-C 指定解压目录
六、网络命令
1) ping 测试网络连通性
命令名称:ping
命令所在路径:/bin/ping
执行权限:所有用户Ctrl +c 强制终止
ping -c 次数 ip 探测网络通畅
2) ifconfig 查询本机网络信息
命令名称:ifconfig
命令英文原意:interface configure
命令所在路径:/sbin/ifconfig
执行权限:root
七、关闭和重启命令
1)关机shutdown -h now 没有特殊情况,使用此命令
halt
init 0
2)重启shutdown -r now
命令名称:shutdown
命令所在路径:/sbin/shutdown
执行权限:root
reboot
命令名称:reboot
命令所在路径:/sbin/reboot
执行权限:root
八、挂载命令
linux所有存储设备都必须挂载使用,包括硬盘
命令名称:mount
命令所在路径:/bin/mount
常见的存储设备:
/dev/sda1 第一个scsi硬盘的第一分区
/dev/cdrom 光盘
/dev/sr0 光盘 centos 6.x
挂载格式:
mount -t 文件系统 设备描述文件 挂载点(已经存在空目录)
mount -t iso9660 /dev/cdrom /mnt/cdrom
光盘卸载:
umount /dev/cdrom
umount /mnt/cdrom 强调:退出挂载目录,才能卸载
fdisk -l 查看当前系统下的存储设备
df –h 查看存储设备挂载信息
mount -t vfat /dev/sdb1 /mnt/usbfat32格式的U盘挂载方式
Shell使用小技巧:
1)补齐功能
补齐功能允许用户输入命令名或文件名起始的若干个字母后,按Tab键补齐命令名或文件名。2)命令历史
命令历史允许用户浏览先前输入的命令并重新
调用它们,用history命令可以显示命令列表,按方向键↑和↓可查找以前执行过的命令。
!命令前缀3)命令别名定义:
范例:alias copy=cp
alias dirrm= ‘rm -rf ’查看别名信息:alias
删除别名:unalias copy
服务器管理规范:
越是安全等级要求高的服务器,越是严格限制用户等级,不能所有人都是root,远程服务器不能关机。
服务器不允许在负载高峰执行高负载命令。例如杀毒、大数据压缩解压缩,复制,全盘搜索。