首页
统计
壁纸
追番记录
优秀博主
关于
推荐
导航
工具
音乐解锁
Search
1
NAS的简单介绍
734 阅读
2
网站环境一键部署工具推荐
505 阅读
3
tp5-模型数据处理
405 阅读
4
win10镜像
359 阅读
5
第20200225期-电脑壁纸-P10
350 阅读
PHP
闲谈杂料
硬件系统
美图
ThinkPHP
笔记
数据库
Lua
登录
Search
标签搜索
ThinkPHP
MySQL
Laravel
PHP
API
GIT
Windows10
markdown
Web
跨域
ajax
小程序
壁纸
Linux
jsonp
try
异常
Dcat
UEFI
win10
phpfunny
累计撰写
104
篇文章
累计收到
24
条评论
首页
栏目
PHP
闲谈杂料
硬件系统
美图
ThinkPHP
笔记
数据库
Lua
页面
统计
壁纸
追番记录
优秀博主
关于
推荐
导航
工具
音乐解锁
搜索到
31
篇与
的结果
2020-08-15
Apache高级内容及优化
加密文章,请前往内页查看详情
2020年08月15日
181 阅读
0 评论
0 点赞
2020-08-01
laravel核心文件不存在或者打不开
在使用laravel框架部署的时候碰到的小坑下载完核心,修改完配置数据库,路径访问修改为public,正常过程走完之后访问地址提示数据流错误不存在打不开原因是:核心都没有下载完整或者没有复制完整的缘故!(使用composer下载laravel好几次碰到这个错误)写这篇文档记录一下解决方法。以下方法还不使请重新下载完整的lavarel框架吧。解决方法:cd到该引用的根目录,先删除 composer.lock 文件重新在根目录执行“composer install”,这样就能重新生成 composer.lock 文件了。如果出现php版本不匹配,可用“composer install --ignore-platform-reqs”(忽略版本匹配)。补充:在第二步骤执行composer install提示我的composer版本过低,所以要先更新一下版本composer self-update更新完之后再次输入composer install提示我使用了禁用的函数,去php环境将使用的php版本中禁用函数配置文件中putenv()删除即可执行 Composer install 命令,提示 killed(原因是服务器内存不足)解决方式1:升级服务器配置解决方式2:查看当前composer包状态信息composer diagnose出现的异常在手动解决即可例如我的这个情况proc_open去php禁用函数把他删除即可再次使用 composer install 即可正常操作
2020年08月01日
105 阅读
0 评论
0 点赞
2020-07-28
微信支付流程
暂无简介
2020年07月28日
142 阅读
0 评论
0 点赞
2020-07-17
laravel路由笔记
线上正式生产环境测试环境(局域网内,模拟线上环境)开发环境(本地开发)facades(门面xx) 佛萨斯1.通过路由访问 (控制器,视图,闭包,重定向地址)接口降低耦合度容器-目的:不重复造轮子使用指令创建php artisan make:controller HelloController//创建控制器 php artisan make:model Order//创建模型 php artisan make:event OrderPaid//创建事件 中间件在路由和控制之间对接受的字段进行处理。测试路由post时候发现错误注意CSRF 保护不需要csrf保护,在控制器中VerifyCsrfToken.php中接入http完整访问路径,可绕过保护。//生成URLecho $url=route('profile');//生成重定向return redirect()->route('profile');普通路由简单的访问配置Route::get("路由名",“控制器名@方法”);//访问视图(闭包) Route::get('hello', function () { return view('hello'); }); //访问视图 Route::view('hello','hello'); //访问控制器 Route::any('index','IndexController@index'); Route::any('user','user\IndexController@index'); //使用闭包 Route::match(['get','post'],'blog/{id}/{name?}',function($id,$name=''){ return 'blog'.$id.'-'.$name; });路由参数:必填,选填,正则表达式约束,全局属性//正则约束 Route::any('user/{id?}','IndexController@index')->where(['id'=>'[0-5]{2}']);全局变量在http/Providers/RouteServiceProvider.phppublic function boot(){ Route::pattern('id','[0-9]+'); parent::boot(); }特殊路由:重定向路由Route::redirect('/here','/there',301);//参数3默认是302视图路由Route::view('hello','hello');//参数3是[路由参数]推荐使用any ,不推荐match(在接口请求用的多post,get,put)路由起名//往起名的路由中传参 Route::get('test', function () { echo route("yonghu",['id'=>11,'name'=>'bilibili']); echo "<br/>"; echo route("blog",['id'=>12,'name'=>'acfun']); }); //起名 Route::any('user/{id?}','IndexController@index') ->where(['id'=>'[0-5]{2}']) ->name('yonghu'); //起名 Route::match(['get','post'],'blog/{id}/{name?}',function($id,$name=''){ return 'blog'.$id.'-'.$name; })->name('blog');检查路由路由中间件定义中间件指令:php artisan make:middleware CheckAge手动建立<?php namespace App\Http\Middleware; use Closure; class CheckAge { public function handle($request, Closure $next) { if ($request->age <= 200) { return redirect('home'); } return $next($request); } }中间件定义又分为:前置/后置中间件中间件是在请求之前或之后执行,取决于中间件本身// 请求之前执行:执行一些任务 return $next($request);//请求之后执行:$response = $next($request); // 执行一些任务return $response;在ChekAge中填写定义任务,比如:public function handle($request, Closure $next) { if ($request->age <= 200) {//如果age<200使用hello路由 return redirect('hello'); } return $next($request);//否则只用本条路由 }在Http/Kernel.php中添加中间件定义在$routeMiddleware变量中'check' => \App\Http\Middleware\CheckAge::class,最后在路由中使用middlewareRoute::any('index','IndexController@index') ->middleware('\App\Http\Middleware\CheckAge::class'); //或者使用上面routeMiddleware中自定义check //->middleware('check'); //或者使用use(第二行代码简写) //use App\Http\Middleware\CheckAge; //->middleware(CheckAge::class);访问:http://localhost/index?age=201跳转index路由,如果age=200跳转hello路由路由中间件传参//中间件CheckAge方法 public function handle($request, Closure $next,$test) { echo $test.'<br/>'; if ($request->age <= $test) { return redirect('hello'); } return $next($request); } //web路由 Route::any('index','IndexController@index')->middleware('check:100');访问index?age=99,走判断里的hello路由。访问index?age=101,走本身index路由terminable最终中间件-详情见管方手册分组路由Route::middleware('check:100,xiao')//路由参数设置 ->domain('{goods}.laravel.cn')//子域名设置 ->name('admin.')//路由名前缀设置 ->prefix('zx')//路由前缀设置 ->namespace('User')//命名空间设置 ->group(function(){ Route::any('user/{id?}','IndexController@index') ->where(['id'=>'[0-5]{2}']) ->name('yonghu'); Route::match(['get','post'],'blog/{id}/{name?}',function($goods,$id,$name=''){ return 'blog'.$id.'-'.$name.'子域名:'.$goods; })->name('blog'); });回退路由Route::fallback(function(){ echo '404'; });
2020年07月17日
105 阅读
0 评论
0 点赞
2020-06-30
CentOS7手动安装Nginx1.18
系统:CentOS 7请根据自己实际情况进行安装我所用的环境:本地Xshell连接本地虚拟器CenOS7系统进行操作我肯定不会说因为偷懒,使用Xshell可以复制代码。yum部署CenOS 7 自带yum-3.4.3-161查看已经安装好的yum源仓库yum repolist 查询原有的yum rpm -qa |grep yum 删除原有的yum rpm -aq|grep yum|xargs rpm -e –nodeps和rpm -qa |grep yum下载yum wget http://mirrors.163.com/centos/7/os/x86_64/Packages/yum-3.4.3-161.el7.centos.noarch.rpm更换yum源wget -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo //或者 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 清除缓存//清除系统所有yum缓存 yum clean all //生成yum缓存 yum makecache安装编译工具及库文件yum -y install make zlib zlib-devel gcc-c ++ libtool openssl openssl-devel安装PCRE库一般我们都需要先装pcre, zlib,前者为了重写rewrite,后者为了gzip压缩。https://blog.csdn.net/eddy23513/article/details/81366751或者使用yum安装yum install pcre pcre-devel或者apt-get install libpcre3 libpcre3-dev查看pcre版本pcre-config --version安装zlib库yum安装yum install -y zlib zlib-devel安装Nginxwget安装wget http://nginx.org/download/nginx-1.18.0.tar.gz如果没有wget使用yum安装 yum -y install wget解压tar zxvf nginx-1.18.0.tar.gz进入安装包目录cd nginx-1.18.0编译安装./configure --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.35编译make安装make install查看nginx版本nginx -v或者使用yum安装nginx1.18.0yum安装首先配置vim /etc/yum.repos.d/nginx.repo文件[nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true [nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/ gpgcheck=1 enabled=0 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true安装yum install nginx启停服务service nginx status | stop | start设置开机启动systemctl enable nginx查看版本nginx -v测试访问ip(默认80端口)如果访问失败,请关闭防火墙https://blog.csdn.net/mayancheng7/article/details/106319196/Xshell连接vm虚拟机CentOS系统1.虚拟机网卡使用NAT2.查看CentOS系统ip id addr3.Xshell连接,主机填ip 端口默认22补充-80端口被占用1、根据端口号得到其占用的进程的详细信息netstat -tlnp|grep 802、手工终止进程的运行kill 835如果终止不了,可以强制终止kill -9 5014【参考资料】centos7 安装php5.6+nginx1.11+mysql5.7https://www.jianshu.com/p/837ebf98d47dNginx安装配置(菜鸟)https://www.runoob.com/linux/nginx-install-setup.htmlyum安装Nginx1.18.0https://blog.csdn.net/mayancheng7/article/details/106319196/CentOS安装zlib库https://blog.csdn.net/sirria1/article/details/83115582无聊又漫长的录制操作视频(失效)https://cloud.uuppp.top/#/s/3gfK
2020年06月30日
156 阅读
0 评论
0 点赞
2020-06-17
微信开发流程
JSAPI支付设置支付目录(登录微信支付商户平台(pay.weixin.qq.com)-->产品中心-->开发配置)设置授权域名(网页授权域名,授权回调页面域名)详细情况公众号jsAPI开发填写js安全域名引入js文件通过config接口注入权限验证配置通过ready接口处理成功验证通过error接口处理失败验证微信网页授权填写域名回调地址拉起用户同意界面(OAuth2.0 授权登录接口)获取code用code获取access_token获取用户信息小程序登陆在app.js中onLaunch:function(){}使用wx.logo获取code用code在后台调用登陆凭证校验接口(appid+appsecret+code)获取session_key+openid后台自定义登陆状态与openid,session_key关联,并返回给小程序自定义登陆状态小程序保存登陆状态(wx.storage)使用数据缓存保存openid和session_key返回业务数据
2020年06月17日
133 阅读
0 评论
0 点赞
2020-06-14
图片生成base64数据流
介绍PHP+mysql存储照片有两种方式,1是通过数据库中存储图片的路径来实现图片的存储2是把图片数据存储在数据库中本文介绍就是第2种方法,将图片数据存储在数据库中。方法封装//图片生成Base64数据流 public function base64EncodeImage ($image_file) { $base64_image = ''; $image_info = getimagesize($image_file); $image_data = fread(fopen($image_file, 'r'), filesize($image_file)); $base64_image = 'data:' . $image_info['mime'] . ';base64,' . chunk_split(base64_encode($image_data)); return $base64_image; }使用方法//图片真实物理路径 $img=ROOT.DS.'public/images.png'; //调用图片生成base64数据流方法 $base64_img = $this->base64EncodeImage($img); //将数据流存储在数据库中 $i=Db::table('lr_wx_info')->where('name','是滑稽啊')->update(['head'=>$base64_img]);数据表的字段类型字段名类型长度小数点允许空值主键headblob00√
2020年06月14日
130 阅读
0 评论
0 点赞
2020-06-09
小程序搜索防抖处理
小程序在搜索处理时候都会考虑输入防抖和节流。在此记录一下我处理防抖功能代码,如果你有更好方案欢迎同我一起交流qwq。主要思路是使用计时器计算,再加上wx.showLoading和 wx.hideLoading等待效果直接扔代码(/= _ =)/~┴┴demo.wxml<view class="container"> <view class="dept-container"> <view class="section"> <input name="keyword" bindinput="bindKeywordInput" placeholder="请输入关键字" confirm-type="搜索" bindconfirm="search"/> </view> </view> <scroll-view scroll-y bindscrolltoupper="upper" bindscrolltolower="lower" bindscroll="scroll" scroll-into-view="{{toView}}" scroll-top="{{scrollTop}}"> <view class="scroll-view-item" wx:for="{{deptsData}}" wx:key="key"> <navigator url="/pages/card/card?class={{item.class}}" open-type="navigate" hover-class="none"> <text class="dept-name">{{item.class}}</text> <text class="dept-count">{{item.count}}</text> <image class="arrow" mode="aspectFit" src="/image/arrow.png"></image> </navigator> </view> </scroll-view> </view>demo.jsPage({ /** * 页面的初始数据 */ data: { keyword: '', deptsData: [], params: '', //搜索条件 countTime:1800, //延迟搜索 时间 searchWaiting: false, //是否等待搜索倒计时中 }, /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { this.getCustList(); }, /** * 查数据 */ getCustList: function() { var that=this; wx.showLoading({ title: '加载中', }); wx.request({ url: 'https://weixin.uuppp.top/applet/Depar/index', method:'post', data:{ss:that.data.params}, success:function(e){ console.log('成功的回调结果'); console.log(e); var arr=e.data; //关闭loading wx.hideLoading(); that.setData({deptsData:arr}); } }) }, /** * 输入关键字 */ bindKeywordInput: function (e) { this.setData({ countTime:1800, params:e.detail.value, }) //是否处于搜索倒计时中 if (!this.data.searchWaiting){ //console.log(e.detail.value); this.search(); } }, /** * 搜索 * 延迟搜索 */ search: function (e) { var that=this; this.setData({ searchWaiting: true }) let promise = new Promise((resolve, reject) => { let setTimer = setInterval( () => { console.log('搜索倒计时: ' + that.data.countTime); this.setData({ countTime: this.data.countTime - 1000 }) if (this.data.countTime <= 0) { console.log('开始搜索: ' + that.data.params); this.setData({ countTime: 1800, searchWaiting: false, }) resolve(setTimer) } } , 1000) }) promise.then((setTimer) => { that.getCustList();//获取班级列表 clearInterval(setTimer)//清除计时器 }) } }) demo.php(后台处理) /** * 所有班级+人数查询 */ public function index(){ //接值post是否有值:为空则查所有班级,不为空则接参模糊查询 $request=Request::instance(); $post=$request->post(); $arr=''; if($post['ss']!=''){ //trace($post,'搜索不为空传来的值'); $arr = Db::table('lr_wx_info')->field('class')->whereLike('class','%'.$post['ss'].'%')->group('class')->select(); }else { $arr = Db::table('lr_wx_info')->field('class')->group('class')->select(); } $data = [];//存 班级名+人数 foreach ($arr as $k => $v) { $count = Db::table('lr_wx_info')->where('class', $v['class'])->count(); $data[$k] = [ 'class' => $v['class'], 'count' => $count ]; } echo json_encode($data); }后台处理使用的是thinkphp5.0框架mysql
2020年06月09日
196 阅读
1 评论
0 点赞
2020-05-19
tp5检查redis安装是否成功
1.首先你的php得是已经安装了redis扩展的2.在tp里找到config.php配置文件,找到cache,改成下面的样子'cache' => [ // 选择模式 'type' => 'complex', // 默认(文件缓存) 'default'=>[ // 驱动方式 'type' => 'File', // 缓存保存目录 'path' => CACHE_PATH, // 缓存前缀 'prefix' => '', // 缓存有效期 0表示永久缓存 'expire' => 0, ], //redis缓存设置 'redis' => [ // 驱动方式 'type' => 'redis', // 服务器地址 'host' => '127.0.0.1', //redis服务器ip 'password' => '', 'port' => '6379', 'password'=> "", 'timeout' => 3600 ], ],3.控制器里写上以下代码测试一下<?php namespace app\index\controller; class Index { public $redis; public function __construct(){ $this->redis = new \Redis(); $this->redis->connect('127.0.0.1',6379); } public function index() { $redis = $this->redis; echo $redis->ping(); } }
2020年05月19日
120 阅读
0 评论
0 点赞
2020-05-13
CURL方法
CURL方法curl_setopt()函数的参数PHP CURL curl_setopt 参数bool curl_setopt (int ch, string option, mixed value)curl_setopt()函数将为一个CURL会话设置选项。option参数是你想要的设置,value是这个选项给定的值。一般常用的curl方式接口介绍$headers = [ "Content-type: application/json;charset='utf-8'", "Accept: application/json", "Cache-Control: no-cache", "Pragma: no-cache" ]; $ch = curl_init($url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);//当请求https的数据时,会要求证书,这时候,加上以上这两个参数,规避ssl的证书检查 curl_setopt($ch, CURLOPT_TIMEOUT, 60);//设置超时时间 curl_setopt($ch, CURLOPT_POST, TRUE);//设置post方式提交 curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($post)); //post提交数据,数组格式,键名是name,键值是value curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);//CURLOPT_RETURNTRANSFER 不设置 curl_exec返回TRUE 设置 curl_exec返回json(此处) 失败都返回FALSE curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); $data = curl_exec($ch); curl_close($ch);
2020年05月13日
174 阅读
0 评论
0 点赞
2020-03-23
网站环境一键部署工具推荐
前言一个网站的运行其中环境必不可少。网站它一般分为前端和后台,网站后台主要功能就是处理数据,存储数据..等等,既然数据有'互动'那后台所使用的语言可能是PHP,JAVA,Python,Go...虽然语言不同但需要的环境相似,且不完全一样。比如我所学习的是PHP语言,后台以为php为主,那大家都知道两种方式,一是LAMP:Linux+apache+mysql+php,二是WAMP:windows+apache+mysql+php,这两种环境大家可能都同时使用,在本地电脑搭建环境用WAMP方式(windows操作简单)在服务器搭建环境用LAMP方式(Linux性能最强)这些环境原本安装是需要一个一个配置的,很是麻烦。所以程序员们就做了现在这些一键配置一键启动环境的工具这些工具不仅对小白来说是个福音,对老司机来说也是必备的工具。我来推荐一下我所使用过的那些环境工具箱XAMPP这是我学习php第一个接触的集成软件【优点缺点】apache,php,mysql可以分开启动,但没有一键启动界面都是英文没有汉化版对小白来说改个配置项困难些安装过程稍稍麻烦些(安装插件多)【适合系统】Linux,Windows,Mas Os, Solaris SPARC【最新版本】XAMPP 1.8.3Apache 2.4.4MySQL 5.6.11PHP 5.5.3phpMyAdmin 4.0.4FileZillaFTP Server 0.9.41Tomcat 7.0.42 (with mod_proxy_ajp as connector)Strawberry Perl 5.16.3.1 PortableXAMPP Control Panel 3.2.1 (from hackattack142)图片来源网络题外话:练习网站攻击推荐使用XAMPP+DVWA->详情WampServer界面排版简洁,有汉化版,该软件作者是由法国人开发的Apache Web服务器,PHP解释器以及MySQL数据库的整合软件包。省去了繁琐配置环境过程。-> 官网介绍【优点缺点】一键启动是他的最大优点之一,直接打开Localhost本地网页直接打开phpMyAdmin网页Apache,php,mysql配置拓展修改简单图片来源网络【最新版本】Wampserver 3.2.0 64位/32位Apache 2.4.41PHP 5.6.40、7.3.12、7.4.0MariaDB 10.4.10 | 10.3.20PhpMyAdmin 4.9.2PhpSysInfo 3.3.1phpstudy(原版)使用时间最久我在学习thinkPHP框架时所用使用的软件主要使用Apache和MySQL【优点缺点】一键启动,分开启动切换php版本方便由图片可以看出来真正的简约,功能不复杂一看就会运行模型分为系统模式和非服务模式作为系统模式可以随着系统启动自动运行环境后来被安徽小皮教育收购又名小皮工具箱【适合系统】全面适合 Win2000/XP/2003/win7/win8/win10 操作系统,支持IIS和Apache、Nginx、Lighttpd。phpStudy(小皮工具箱)目前正在使用的软件-小皮工具箱国内优秀团队优化更新,炒鸡好用官网介绍【优点缺点】一键启动五大核心:多环境切换,多版本切换,PHP多版本共存,一键配置FTP,多用户多权限。UI界面有科技感有众多工具可供下载比如:redis,composer,SQL_Front5.3环境运行状态可以看内存硬盘使用率系统日志【适合系统】Windows,Linux【最新版本】phpStudy v8.1(32+64位)宝塔优秀的Linux网页版环境我经常在linux服务器上使用宝塔,使用特简单有专属应用商店官网详细介绍【优点缺点】在Linux服务器上搭建建站环境很麻烦,使用宝塔就方便很多了。只用宝塔的面板可直接看服务器的运作状态-数据化。监控,安全,任务计划=》功能完善。【适合系统】Windows,Linux【最新版本】7.1phpEnv-正在尝试国人制作维护,打算测试一下是否像宣传的那样好用官方介绍【优点缺点】待使用
2020年03月23日
505 阅读
0 评论
0 点赞
2020-03-02
关于success在frameset框架中跳转套娃问题
清除tp中默认session作用域//检查是否登录public function __construct(Request $request){ parent::__construct($request); if(!session('?userid','','')){ $this->error('请先登录!','index/login/login'); } } session('名称',‘值’,‘前缀’)设置前缀为空字符串随之也修改session方法中protected function success($msg ='',$url=null,$data='',$wait=3,array $header=[],$parent='')将$result=[...]参数加入'parent'=>$parent,在最后一个参数加入$parent=''session('成功','index',[],3,[],'parent');最后一个参数为跳转的方式在$result中添加'parent'=>$parent,修改session作用域这一步骤可以省略,目的是避免session中多个作用域冲突修改跳转模板参数模板地址:thinkphp/library/tpl/dispatch_jump.tpl在location.href = href;代码前加入判断<?php echo($parent?$parent.'.':'')?>来根据session(‘’,‘’,‘parent’)来决定跳转的方式。同样error方法还有点击跳转也要加点击跳转的a标签加 target="_parent"总结success的跳转默认是在当前框架中子框架中跳转页面,想要跳出整个框架,需要用到js/jq的跳转代码location.href前面加上parent.这样就可以跳出框架的限制。附加-其他解决方式<script> if(window.top!=window){ window.top.location.href=document.location.href; } </script>
2020年03月02日
214 阅读
1 评论
1 点赞
2019-11-19
PHP常用系统函数速查表
常用的一些系统内置函数~要记住常用的系统函数数学函数名字参数个数一参二参三参四参备注ceil()向上取整1数字////floor()向下取整1数字////round()四舍五入2数字位数///rand随机数2数字数字///mt_rand随机数2小位数大位数///number_format()格式化数字4数字保留小数位数最小为0小数分隔符千位分隔符/加密函数名字参数个数一参二参三参四参备注base64_encode()base64加密1字符串////base64_decode()base64解密1字符串////md5()md5加密1字符串///不可解密,32位长度sha1()sha1加密1字符串///不可解密,40位长度时间函数名字参数个数一参二参三参四参备注time()当前时间戳0/////strtotime()转时间戳1时间格式字符串////date()格式化时间戳2时间格式字符串时间戳//第二个参数不写,默认当前时间字符串函数名字参数个数一参二参三参四参备注strlen()获取长度1字符串////mb_strlen()获取字符长度2字符串编码///substr()字符串截取3父字符串截取开始位置截取长度/开始位置为负数是倒数mb_substr()中文字符串截取4字符串截取开始位置截取长度编码开始位置为负数是倒数substr_replace()替换字符串的子串4字符串替换的字符串开始位置为负数是倒数截取长度/trim()去掉两端空格2字符串去掉的字符///ltrim()去左侧空格2字符串去掉的字符///rtrim()去右侧空格2字符串去掉的字符///strpos()字符串查第一次位置3父字符串子字符串开始匹配位置/区分大小写stripos()字符串查第一次位置3父字符串子字符串开始匹配位置/不区分大小写strrpos()字符串查最后一次位置3父字符串子字符串开始匹配位置/区分大小写strripos()字符串查最后一次位置3父字符串子字符串开始匹配位置/不区分大小写str_replace()字符串替换3要替换的字符串替换的字符串原字符串/区分大小写str_ireplace字符串替换3要替换的字符串替换后的字符转原字符串/不区分大小写strtolower()转为小写1字符串////strtoupper()转为大写1字符串////ucfirst()首字母大写1字符串////ucwords()单词首字母大写1字符串////iconv()字符按编码换函数3转换前的格式转换后的格式字符串//转换函数名字参数个数一参二参三参四参备注explode()字符串转数组2符号字符串///implode()数组转字符串2符号字符串///排序函数名字参数个数一参二参三参四参备注sort()升序排列1数组///键值不保留asort()升序排列1数组///键值保留rsort()降序排列1数组///键值不保留arsort()降序排列1数组///键值保留ksort()按键升序排列1数组////krsort()按键降序排列1数组////shuffle()随机排序1数组///键值不保留统计函数名字参数个数一参二参三参四参备注count()计算个数1数组////array_sum()数组求和1数组////max()/min()数组中最值1数组////in_array()元素是否在数组中2元素数组//返回true/falsearray_key_exists()键是否存在2键值数组//返回true/falsearray_values()键重置1数组///生成新数组array_keys()值变键,值消失1数组///生成新数组empty()数组是否为空1数组////is_array()是否是数组1数组////is_null()是否是空1字符串///只有null返回值为trueisset()是否被定义1字符串///null,'',0均为trueis_numeric()是否为数字或数字字符串1数字/字符串///返回true/false遍历函数名字参数个数一参二参三参四参备注current()指针当前所指元素1数组////next()指针下移1数组///移出数组后指针丢失prev()指针上移1数组///移出数组后指针丢失reset()重置指针1数组////end()指针指向最后一个1数组////key()指针当前所指元素键1数组//// 操作函数名字参数个数一参二参三参四参备注array_push()尾部添加2+n数组元素//可添加对个array_pop()尾部移除,返回该值1数组////array_unshift()首部添加2+n数组元素//可添加对各array_shift()首部移除,返回该值1数组////array_unique()移除数据中重复元素1数组排序方式请见php手册//原数组不变补充str_pad()填充字符串原字符串*字符串长度*填充字符默认空白填充位置xSTR_PAD_BOTH - 填充字符串的两侧STR_PAD_LEFT - 填充字符串的左侧STR_PAD_RIGHT - 填充字符串的右侧。默认strtolower()字符串转小写字符串xxxx该函数将传入的字符串参数所有的字符都转换成小写strtoupper()字符串转大写字符串xxxx该函数将传入的字符串参数所有的字符都转换成大写usfilst()字符串首字符转大写字符串xxxx.ucwords()字符串单词首字符转大写字符串xxxx例如"Hello Word"
2019年11月19日
343 阅读
0 评论
1 点赞
2019-11-19
ajax介绍
AJAX的简单介绍AJAX是Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)缩写AJAX的优点是在不重新加载整个页面情况下,可以与服务器交换数据并更新部分网页内容。AJAX 不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。AJAX是异步传输技术AJAX流程图AJAX传参的三种方式a链接(get方式)from表单(post)JS/JQ(ajax)AJAX的8个属性ajax一个json参数(8个属性):$.ajax({async:是否异步(默认true),url:提交地址,data:提交的数据(json格式),type:提交方式(post),dataType:(html,json,xml)预期的服务端返回的类型,success:成功的回调函数形参为返回的数据,error:失败的回调函数,beforeSend:等待的回调函数})post有4个参数:$.post("文件地址",{act:'del',uid=uid},funtion(data){ },"html")1.发送地址 2.发送数据 3.成功的回调 4. 服务端返回的数据类型XML格式<book> <content> <name>李大鹏</name> <sex>男</sex> </content> </book> JSON格式<script> var js=[{name:'李大鹏'},{sex:'男'}]; </script>XML格式与JSON格式区别:XML重量级|JSON轻量级代码程序1. js原生index.phpsercer.php页面展示2. JQ-html数据类型index.phpajax.php页面展示效果和下面json一样。3. JQ-json数据类型index.phpajax.php页面展示4. JQ-JSON数据类型index.phpajax.php页面展示5.JQ-POST数据类型index.phpajax.php页面展示
2019年11月19日
197 阅读
0 评论
0 点赞
2019-10-27
PHP面试题基础篇
前言PHP必须掌握的基本知识及时记录遇到过的习题,知识点一.什么是post通过 HTTP POST 方法传递给当前脚本的变量的数组。二.文件上传处理错误信息说明文件上传成功上传文件超过php限制上传文件超过HTML限制文件部分上传没有文件被上传找不到临时文件没有写入权限三.PHP的错误信息notice通知,warning警告,fatal error致命错误,parse error语法错误四.session和cookie的区别和联系1.不同的访问方法2.不同的隐私政策3.有效期的差异4.不同的服务器压力5.不同的浏览器支持6.跨域支持的差异Cookie支持跨域访问。区别:session安全cookie不安全session存在服务器cookie存在客户端session速度快cookie速度慢session容量大cookie受浏览器限制2-4k联系:session_id储存在cookie中手动关闭浏览器cookie,session失效五.数据库的三大范式不能没有主键每个属性不可再分不能有属性传递依赖六.ajax状态码输入状态码:console.log(xhr,readyState) ajax的状态码:0初始值,1数据发送成功,2服务端已返回数据,3浏览器正在解析数据,4完成 http的状态码:200成功,404路径错误ajax的流程:1.创建ajax对象2.Ajax初始化3.设置头格式 发送请求方式为 键值对4.设置回调函数 返回才调用的函数5.执行ajax发送数据七.jq的ajax语法1.$.ajax-写法复杂,功能全面2.$.post-写法简单,功能简单3.$,get-写法简单,功能简单ajax一个json参数(8个属性):$.ajax({ async:是否异步,url:提交地址,data:提交的数据, type:提交方式,dataType:预期的服务端返回的类型, success:成功的回调函数形参为返回的数据, error:失败的回调函数,beforeSend:等待的回调函数}) post有4个参数:$.post("文件地址",{act:'del',uid=uid},funtion(data){ },"html") 1.发送地址 2.发送数据 3.成功的回调 4. 服务端返回的数据类型ajax属性 $.ajax({ async:true,//是否异步 url:''//提交地址 data:{name:admin,act:'check'}//提交的数据 type:'post',//提交类型 dataType:'html',//(json,xml,html)预期的服务端返回的类型 success:function(data自定义名){ //成功的回调函数 形参为返回的数据 }, error:function(){//失败的回调函数}, beforeSend:function(){//等待的回调函数}, });在一个server.php页面红处理多个ajaxif($act=='check'){//业务1}if($act=='name'){//业务2}...============================================八.封装类的三种封装类型:public公共的,无限访问修饰符protected受保护的,类的外部无法使用private私有的,类的外部无法使用,不能被继承16种魔术方法(方法必须是public function) 构造方法1. __construct (自定义形参)new的时候自动执行 public function __construct($参数1,$参数2...){} 析构方法2. __destruct(无形参)对象被销毁之前自动执行 public function __destruct(){} 销毁 unset(对象名) 方法3. __set(固定两个形参1.属性名2.属性值)类的外部不可调用的属性赋值时自动执行 方法4. __get(一个形参,1.属性名)类的外部对不可调用的属性取值时自动执行 方法5. __isset(一个形参,1.属性名)类的外部判断不可调用的属性是否存在时自动执行 方法6. __unset(一个形参,1.属性名)类的外部销毁不可调用的属性时自动执行 方法7. __toString(无形参)把对象当成字符串去使用时自动执行 方法8. __clone(无形参)在对象被克隆时自动执行 方法9. __sleep(无形参)序列化对象时自动执行 方法10. __wakeup(无形参)反序列化对象时自动执行 方法11. __call(两个形参1.不存在的方法名2.传入的参数[数组])调用不存在的方法时自动执行 方法12. __callStatic(用静态方式中调用一个不可访问方式时调用) 方法13. __autoload(尝试加载未定义的类) 方法14. __invoke(调用函数的方式调用一个对象时的回应方法) 方法15. __set_state(调用var_export()导出类时,此静态方法会被调用) 方法16. __debugInfo(打印所需调试信息)构造方法在new的时候自动执行,设置了形参要在new的同时传入实参栗子:public function __construct($name,$age,$sex){....}$zh=new 类名('小张','18','男')析构方法在对象被销毁之前执行的方法(不可传参)如果没有手动销毁,则在页面执行之后执行栗子:public function __destruct(){echo "";}如果没有unset()销毁对象,那么这个分隔符永远在页面最下面序列化:将复杂类型的数据按照一定的规则转换成字符串的方法栗子://数组$arr=['name'=>'京东','sex'=>'男'];$str=serialize($arr);//序列化echo $str;结果:a:2:{s:4:"name";s:9:"京东";s:3:"sex";s:3:"男";}//对象$xx=new Test("京东");$xx->name="张小龙";$str=serialize($xx);echo $str;结果:O:4:"Test":3:{s:4:"name";s:9:"张小龙";s:6:"*sex";s:3:"女";}反序列化:将序列话后的数据还原1.$arr2=unserialize($str);//数组序列化反序列化2.$xx=unserialize($srt);//对象序列化反序列化json序列化json_encode()序列化json_decode()反序列化-> 对像的连接符号=> 数组的连接符号self 用来调用静态属性和方法:: 范围解析操作符 用来调用静态属性和静态属性方法serialize()方法通过序列化表单值,创建URL编码文本字符串JSON的一般写法:{name:'xiaozhang',age:'18'}或者serialize序列化写法O:6:"Person":{s:3:"sex";s:3:"男";}或者json_encode-json序列化写法[['admin',1],['admin',2]...]九.类的三大特性封装(将函数和变量结合在了一起)继承(类是可以继承的)多态(多种形态)同一个父类 有多个子类 他们调用同一个方法 得到的结果继承规则:一个父类可以有多个子类 一个子类只能有一个父类子类可以继承父类的所有非私有的成员class 名{ //属性 public $a; //公共的,无限访问修饰符 protected $b; //受保护的,类的外部无法使用 private $c; //私有的,类的外部无法使用,不能被继承 //方法 public function __construct($max,值2,值3){ $this->max=$max; $this->... $this->... } }十.Class的普通属性和静态属性
2019年10月27日
259 阅读
0 评论
0 点赞
1
2
3