Switch language
zh
Switch theme
Light
  • tp5-布署-linux-注意事项

    给 public 目录权限 项目根目录下新建空的 runtime 目录, 并设置 777 权限
  • apache-一个站点配置多个域名

    在 ServerAlias 中配置, 而不是在 ServerName 中配置 <VirtualHost *:80> ServerName 4a89w9.natappfree.cc ServerAlias 4a89w9.natappfree.cc www.appapi.test DocumentRoot "${INSTALL_DIR}/www/u/public" <Directory "${INSTALL_DIR}/www/u/public"> AllowOverride All Require all granted </Directory> </VirtualHost>
  • laravel--Request-类-通过后的-$request-包含无需验证的-字段

    // Request 类: $rule = [ 'email' => 'required|email', 'password' => 'required|alpha_dash|between:6,20' ]; // form { name: 'abc', email: 'abc@qq.com', password: '123456', } // Request $request [ 'name' => 'abc', 'email' => 'abc@qq.com', 'password' => '123456', ] $request 里面会包含 name 这个没有 ( 无需 ) 验证的字段
  • php-json_encode-报错-Malformed-UTF-8-characters

    当使用了 substr() 进行字符串切割后, 再进行 json_encode() 时, 报错 改使用 mb_substr() 即可 原因: substr 按字节数进行截取产生了特殊字符, 而 mb_substr 按字符数截取, 则没有问题
  • php-substr-截取中文出乱码

    使用 mb_substr 解决即可, mb_substr 按字符来截取 而 substr 按字节来截取
  • php文件上传临时目录

    问题: 在上传表单中, 用户没有继续进行保存下去, 那么图片(或文件)会一直保存下去 ? 在 php.ini 中, php官方文档 (语言参考->特点->文件上传处理->post方法上传): 文件被上传后,默认地会被储存到服务端的默认临时目录中,除非 php.ini 中的 upload_tmp_dir 设置为其它的路径。服务端的默认临时目录可以通过更改 PHP 运行环境的环境变量 TMPDIR 来重新设置,但是在 PHP 脚本内部通过运行 putenv() 函数来设置是不起作用的。该环境变量也可以用来确认其它的操作也是在上传的文件上进行的。 了解Redis过期策略及实现原理. 我们在使用redis时,一般会设置一个过期时间,当然也有不设置过期时间的,也就是永久不过期。 当我们设置了过期时间,redis是如何判断是否过期,以及根据什么策略来进行删除的。 redis设置过期时间: expire key time(以秒为单位)–这是最常用的方式 setex(String key, int seconds, String value)–字符串独有的方式 除了字符串自己独有设置过期时间的方法外,其他方法都需要依靠expire方法来设置时间 如果没有设置时间,那缓存就是永不过期 如果设置了过期时间,之后又想让缓存永不过期,使用persist key 三种过期策略 定时删除 含义:在设置key的过期时间的同时,为该key创建一个定时器,让定时器在key的过期时间来临时,对key进行删除 优点:保证内存被尽快释放 缺点:若过期key很多,删除这些key会占用很多的CPU时间,在CPU时间紧张的情况下,CPU不能把所有的时间用来做要紧的事儿,还需要去花时间删除这些key. 定时器的创建耗时,若为每一个设置过期时间的key创建一个定时器(将会有大量的定时器产生),性能影响严重 懒汉式式删除 含义:key过期的时候不删除,每次通过key获取值的时候去检查是否过期,若过期,则删除,返回null。 优点:删除操作只发生在通过key取值的时候发生,而且只删除当前key,所以对CPU时间的占用是比较少的,而且此时的删除是已经到了非做不可的地步(如果此时还不删除的话,我们就会获取到了已经过期的key了) 缺点:若大量的key在超出超时时间后,很久一段时间内,都没有被获取过,那么可能发生内存泄露(无用的垃圾占用了大量的内存) 定期删除 含义:每隔一段时间执行一次删除过期key操作 优点:通过限制删除操作的时长和频率,来减少删除操作对CPU时间的占用–处理”定时删除”的缺点 缺点:在内存友好方面,不如”定时删除”(会造成一定的内存占用,但是没有懒汉式那么占用内存) 在CPU时间友好方面,不如”懒汉式删除”(会定期的去进行比较和删除操作,cpu方面不如懒汉式,但是比定时好) 难点:合理设置删除操作的执行时长(每次删除执行多长时间)和执行频率(每隔多长时间做一次删除)(这个要根据服务器运行情况来定了),每次执行时间太长,或者执行频率太高对cpu都是一种压力。每次进行定期删除操作执行之后,需要记录遍历循环到了哪个标志位,以便下一次定期时间来时,从上次位置开始进行循环遍历 说明:memcached只是用了惰性删除,而redis同时使用了惰性删除与定期删除,这也是二者的一个不同点(可以看做是redis优于memcached的一点);对于懒汉式删除而言,并不是只有获取key的时候才会检查key是否过期,在某些设置key的方法上也会检查(eg.setnx key2 value2:该方法类似于memcached的add方法,如果设置的key2已经存在,那么该方法返回false,什么都不做;如果设置的key2不存在,那么该方法设置缓存key2-value2。假设调用此方法的时候,发现redis中已经存在了key2,但是该key2已经过期了,如果此时不执行删除操作的话,setnx方法将会直接返回false,也就是说此时并没有重新设置key2-value2成功,所以对于一定要在setnx执行之前,对key2进行过期检查)。 Redis采用的过期策略 懒汉式删除+定期删除 懒汉式删除流程: 在进行get或setnx等操作时,先检查key是否过期; 若过期,删除key,然后执行相应操作; 若没过期,直接执行相应操作; 定期删除流程(简单而言,对指定个数个库的每一个库随机删除小于等于指定个数个过期key) 遍历每个数据库(就是redis.conf中配置的”database”数量,默认为16) 检查当前库中的指定个数个key(默认是每个库检查20个key,注意相当于该循环执行20次,循环体是下边的描述) 如果当前库中没有一个key设置了过期时间,直接执行下一个库的遍历 随机获取一个设置了过期时间的key,检查该key是否过期,如果过期,删除key 判断定期删除操作是否已经达到指定时长,若已经达到,直接退出定期删除。 对于定期删除,在程序中有一个全局变量current_db来记录下一个将要遍历的库,假设有16个库,我们这一次定期删除遍历了10个,那此时的current_db就是11,下一次定期删除就从第11个库开始遍历,假设current_db等于15了,那么之后遍历就再从0号库开始(此时current_db==0)
  • laravel-使用-composer-dump-autoload

    给 User.php 模型文件复制一次为 bak.User.php 后, 执行了一次 vendor:publish , 给出了warning: 再之后 , 依赖注入 User 模型提示 User 找不到 解决办法: 执行 composer dump-autoload
  • git-修改本地及远程分支的名称

    原文地址 git branch -m old_branch new_branch # Rename branch locally git push origin :old_branch # Delete the old branch git push --set-upstream origin new_branch # Push the new branch, set local branch to track the new remote // 第三步不在推送时关联远程分支, 可改为如下 git branch --set-upstream-to origin/master git branch -u origin/new_branch
  • git-撤消commit,-并恢复改动

    git reset HEAD^1
  • laravel-生命周期--路由实例

    {{host}}/api/topics/:topic/replies 如上路由(需要登录, 在中间件中使用了 api.auth) 实测发现 如果 :topic 不存在, 则报 404, 说明首先走的路由中隐性绑定的数据模型; 填入正确的 topic id 后, 报错 401, authenticate failed, 说明第二步走的中间件; 填入正确的 bearer token, 报错 422, Unprocessable Entity, 提示 xx 参数不能为空或格式不正确, 说明这里才开始进行 request 表单请求类验证
  • laravel-路由参数与控制器进行隐性绑定

    // 路由文件 Route('topics/{topic}', 'TopicsController@show'); // 控制器 public function show(Topics $topic) { // todo } 其中路由中的 {topic} 是与 控制器中的 $topic 进行绑定的, 如果前面写成 id, 后面则用 $id, 也能正确进行模型绑定 // 路由文件 Route('topics/{id}', 'TopicsController@show'); // 控制器 public function show(Topics $id) { // todo } 参考自 learnku
  • 一个小事故---postman-接口走不通了

    使用 postman 测试时, 发现接口走不通了, 而通过浏览器能访问到 想起昨天用了 fiddler 而给 postman 做了代理, 解决办法就是 打开 fiddler, 让 fiddler 代理请求; 或者关闭 postman 的代理即可
  • laravel-request-中-使用路由参数

    在 Controller 中使用请求参数直接使用 $request->input(’name’) 或 $request->name; 在 Controller 中使用路由参数直接使用 参数注入 或 $request->name; 在 Request 中, 使用请求参数使用 $this->input(’name’) 或 $this->name 在 Request 中, 使用请求参数使用 $this->name, (不能使用参数注入) 在使用动态属性时,Laravel 首先会在请求载体中查找参数的值。如果该值不存在,Lavarel 将在路由参数中搜索。
  • access_token-和-refresh_token

    设置 access_token 为 1 天有效期, refresh_token 为 7 天有效期, 如果 access_token 未过期, 则直接通过登录判断 (不更新 access_token 或 refresh_token ) 当 access_token 过期, 则检测 refresh_token , refresh_token 未过期时, 更新并返回 access_token 和 refresh_token 当 access_token 过期, refresh_token 也过期, 则返回未登录 ps: 由于 refresh_token 的有效期大于 access_token 的有效期 (而二者是同时更新的), 所以不存在 access_token 未过期, 而 refresh_token 过期的情况
  • 注册页面禁止浏览器保存账号及密码

    起因: 注册页面邮箱后有验证码, 之后再有微信号, 手机号之类, 再是密码框. 在点击提交表单时, 浏览器会提示保存账号密码, 但是保存的却不是邮箱和密码, 而是面密码框上一个 input 框的内容 解决思路(使用 firefox 浏览器测试): 禁止浏览器保存密码 1.1 通过 autocomplete=off 或 new-complete 方法无效 1.2 使用 onfocus="this.type='password'" 或 onfocus="this.removeAttribute('readonly')" 无效 1.3 使用 window.onload=function(){ document.getElementById('myid').value = '' } 无效 1.4 未测试 使用隐藏框来保存密码, 而把显示的密码框 type 设置为 text, 并通过 js 来控制该用户输入框显示为 圆点或星号; 考虑到如果用户输入 backspace 或 delete 如何处理的问题, 遂未进行测试 让浏览器保存正确的邮箱账号和密码 在密码框之前添加一个 <input type="text" name="test" style="display:none"> 框, 并让该框的 value 与 email 框同步, 就能让浏览器保存正确的账号和密码 ps: stackoverflow 上有人说: 最新的浏览器都已(大部分)禁用了 autocomplete=off, 因为厂商认为这件事情应该交给用户而不是开发者来解决
  • css-文本分散对齐

    <style> text-align-last:justify; text-align:justify; text-justify:distribute-all-lines; // 这行必加,兼容ie浏览器 </style>
  • js-对象名是一个变量时,-怎么获取当前对象

    var j1 = { 'j11': 'a', 'j12': 'b', 'j13': 'c', }; var j2 = { 'n1': 'j1', 'n2': 'j2', }; var obj = { j1: j1 }; var x = 'n1'; console.log(j2[x]['j11']);//undefined console.log(obj[j2[x]]['j11']);// a // ? 如何直接通过对象名同名字符串来获取对象 ?
  • lnmp-环境中-使用-system-函数被报安全因素无法启用

    原因: 要在 php 中使用 mysqldump 进行数据库备份 在本地 wamp 环境中使用没有问题 在线上 lnmp 环境下报错 system 函数无法使用 解决办法: 查看线上 php.ini 文件是否开启 safe_mode (安全模式); 2.1.1 如果开启了 安全模式, 则查看 disable_function 是否禁用了 system 函数 2.1.2 如果 disable_function 是禁用了 system 函数, 那么取消禁用, 并在 safe_mode_exec_dir 中添加一个包含要执行命令的目录 2.2.1 如果未开户安全模式, 直接查看 disable_function 是否禁用了 system 函数, 取消掉即可
  • 让-tp5-api-返回-json-格式的异常

    见: https://blog.csdn.net/qq_38287952/article/details/80247000
  • 如何让-Laravel-API-永远返回-JSON-格式响应?

    见: https://www.jianshu.com/p/c0b7365a21e5 当你在编写完全为 API 服务的 Laravel 应用时,你希望所有响应都是 JSON 格式的,而不是例如说授权错误会重定向到 /home 或 /login,最终重定向会变成 InvalidArgumentException: Route [login] is not defined. 的视图。 下面这个简单的方案,可以让你的 Laravel 应用优先响应为 JSON 格式。 第一步、编写 BaseRequest 首先我们需要构建一个 BaseRequest 来重写 Illuminate\Http\Request ,修改为默认优先使用 JSON 响应: app/Http/Requests/BaseRequest.php
  • php-json_decode-函数

    json_decode 把 json 字符串转成 object 或 array $str = '{"id":1, "name":"hello"}'; $obj = json_decode($str); // 转成对象 $arr = json_decode($str, true);// 转成数组 // 要求 // json 字符串中的键值必须用 双引号("") 包裹起来, 单引号或者不用引号都不能正确解析, 结果会是 null
  • phpstorm对laravel提供智能提示

    composer 安装 laravel-ide-helper 执行 php artisan ide-helper:generate 第二步不能少
  • git-取消更改

    取消对工作区已存在文件的修改, git checkout . 取消对工作区新增文件, git add -A + git checkout -f
  • git-删除版本库中的文件夹

    起因: 使用 phpstorm 新建一个文件时, 创建了一个空的本地 git 版本库 ( git init ), 并执行了全部提交( git add -A; git commit); 对项目进行开发后, 要进行第一次提交, git status 发现 phpstorm 的相关文件 .idea 也发生了变化 modified, 然而这是不应该提交到版本库的, 所以要将其放到 .gitignore 中 此时, git status 依然会出现 .idea 发生了改变, 但未添加到暂存区, changes not staged for commit 所以不仅当前工作区中要修改 .gitignore 文件, 版本库中的已经提交过的版本中也要删除这个文件夹, 使用 git rm -r folder_path --cached 命令即可 解决办法: .gitignore 文件中添加要忽略的文件 执行 git rm -r folder_path --cached 删除版本库中对应的文件夹 说明: git rm -r folder_path --cached 中
  • JS-的遍历-or,-forEach,map,filter,every,some等

    原文: https://www.cnblogs.com/ihboy/p/6878427.html 1. for循环,需要知道数组的长度,才能遍历, 2. forEach循环,循环数组中每一个元素并采取操作, 没有返回值, 可以不用知道数组长度 3. map函数,遍历数组每个元素,并回调操作,需要返回值,返回值组成新的数组,原数组不变 4. filter函数, 过滤通过条件的元素组成一个新数组, 原数组不变 5. some函数,遍历数组中是否有符合条件的元素,返回Boolean值 6. every函数, 遍历数组中是否每个元素都符合条件, 返回Boolean值
  • git-bash-set-alias

    原文见: https://www.jianshu.com/p/35d23e0e121b 基本使用: alias com=“git checkout master” 此时关闭终端窗口之后,再试该命令你就会发现这个命令不存在了,原因是没有永久保存,可以使用如下方法: 确认文件在不在 $ ls ~/.bash_profile 如果不在就创建一个: vi ~/.bash_profile 写入 alias la=“ls -al” 永久保存 source ~/.bash_profile alias #会看见 alias la=‘ls -al’ #卸载使用 unalias xxx source ~/.bash_profile
  • 正则查找-跨行问题

    使用 [\s\S] 而不是 . 来匹配所有字符(包括换行 \r\n 等) 原文见 https://blog.csdn.net/xiaodongxiexie/article/details/51678295
  • vue-v-for-列表中的数据进行值的更改后,页面不能同步更新

    <div id="app"> <ul> <li v-for="item in list">{{ item }}</li> </ul> </div> <script src="vue.js"></script> <script> let vm = new Vue({ el:'#app', data:{ list:['a','b','c'] } }); vm.list[0]= 1; // vm.list.push(1); // vm.list.pop(); </script> 如果没有最后的 push 与 pop 对 list 进行入栈、出栈, list 的值会改变, 但是页面不会改变; 通过对 list 进行入栈、出栈, 可以实现页面上值的改变 另附官方解决办法 https://cn.vuejs.org/v2/guide/list.html#%E6%95%B0%E7%BB%84%E6%9B%B4%E6%96%B0%E6%A3%80%E6%B5%8B
  • js-中条件判断

    前因: 在 vue 中使用各种条件判断 (如 v-if, v-show, disabled ) 时, 其中的 1, 0, ‘0’ 等造成与想要的结果不同, 遂在此先记录一下 说到底还是 js 的条件判断问题 if ( exp ) { // exp 为真 } exp 为 1, true exp 为 0, false exp 为 ‘0’, true —- 易混淆点 exp 为 true, true exp 为 false, false. exp 为 null, false exp 为 undefined, false exp 为 ’true’, true exp 为 ‘false’, true
  • fastadmin----跨域问题

    原文见: https://forum.fastadmin.net/thread/7485 在入口文件 index.php 中添加如下代码 header("Access-Control-Allow-Origin: *"); header("Access-Control-Allow-Methods: GET, POST"); header("Access-Control-Allow-Headers: Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With");
  • fastadmin----nginx-配置----解决除首页外的404问题

    原文见: https://forum.fastadmin.net/thread/8320 在 nginx 配置文件中加入如下代码 server { ``` listen 80; server_name www.abc.com abc.com; index index.php index.html index.htm default.php default.htm default.html; root /www/wwwroot/abc/public; location / { index index.html index.htm index.php; #autoindex on; if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=/$1 last; break; } } #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则 #error_page 404/404.html; #SSL-END #ERROR-PAGE-START 错误页配置,可以注释、删除或修改 error_page 404 /404.html; error_page 502 /502.html; #ERROR-PAGE-END #PHP-INFO-START PHP引用配置,可以注释或修改 include enable-php-72.conf; #PHP-INFO-END #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效 #include /www/server/panel/vhost/rewrite/www.xfguoye.com.conf; #REWRITE-END #禁止访问的文件或目录 location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md) { return 404; } #一键申请SSL证书验证目录相关设置 location ~ \.
  • tp5-数据集(对象)转成数组(再转json)输出

    原文见: https://www.jianshu.com/p/a69164fd1f50?utm_campaign 先在数据库配置文件中 // 数据集返回类型 'resultset_type' => 'collection', 在使用时, 使用 toArray() 方法 // 查询数据库 $news = NewsModel::order('createtime desc')->limit($num)->page($page)->select()->toArray(); /* array (size=2) 0 => array (size=8) 'id' => int 2 'title' => string '2' (length=1) 'title_image' => string '2' (length=1) 'label_name' => string '2' (length=1) 'content' => string '<p>2</p>' (length=8) 'link_url' => string '2' (length=1) 'createtime' => int 1549338746 'updatetime' => int 1549338746 1 => array (size=8) 'id' => int 1 'title' => string 'dd' (length=2) 'title_image' => string '' (length=0) 'label_name' => string '' (length=0) 'content' => string 'dd' (length=2) 'link_url' => string '' (length=0) 'createtime' => int 11 'updatetime' => int 11 */
  • firefox-下-jquery-ajax-不返回值的原因-(chrome正常)

    可能是因为 点击的 button 标签的 type 属性设置为了 “submit”, 而这样 firefox 会认为其是按表单提交, 而非 ajax 的异步 所以, 把 submit 改为 button 就好了
  • git-一直不能-添加文件到暂存区,-提示-untracked-content

    原因可能是文件夹里面还有 .git 文件, 将之删除即可
  • php-trait-的优先级

    <?php trait Demo1{ public function test(){ return __METHOD__; } } trait Demo2{ public function test(){ return __METHOD__; } } class Demo0{ public function test(){ return __METHOD__; } } class Demo extends Demo0{ use Demo1,Demo2{ Demo1::test insteadof Demo2; // tait1中的test方法优先于trait2中的test方法(如果不这么设置,同名的方法会导致报错) Demo2::test as demo2test; // trait2 的test方法别名为 trait2test } } $obj = new demo(); $obj->test();// Demo1::test $obj->demo2test();// Demo2::test trait ,当前类,父类优先级: 当前类方法 > trait 的方法 > 父类的方法 如果当前类引用了两个 trait, 并且这两个 trait 中有同名方法,则会报错, 可以使用 insteadof 指定使用哪个trait的方法, 此外还可以用 as 来设置别名, 从而供当前类使用
  • 正则表达式-cheat-sheet-from-github

    转载自: https://github.com/niklongstone/regular-expression-cheat-sheet.git Regular Expression Cheat Sheet - PCRE Anchor Description Example Valid match Invalid ^ start of string or line ^foam foam bath foam \A start of string in any match mode \Afoam foam bath foam $ end of string or line finish$ finish finnish \Z end of string, or char before last new line in any match mode finish\Z finish finnish \z end of string, in any match mode.
  • openssl-加密函数

    后台使用密码保存时, 使用 md5, 不可解密; 如今想给一个登录 token 加密, 原始做法是用 md5+一定数量的字符串, 并且在缓存(或数据库)中保存这个键值对; 如果不想在后台保存 token 信息, 可以把 token信息(包括过期时间,用户账号等) 使用 open_ssl 加密, 然后要在后台要验证的时候, 再解密出来 例如 <?php $key = 'key123456789';//加密字符串的密码, 类似于md5加盐 $method = 'AES-128-CBC';// 加密方法 $arr = ['user_id'=>1, 'expire_time'=>60*60]; // 用户id为1, 有效期为1h $str = json_encode($arr); $secret_str = openssl_encrypt($str,$method,$key);// 加密字符串 $secret_str = urlencode($secret_str);// 加密字符串 var_dump($secret_str);// jRX%2BtqOyhHVOzHX7cFI0usMUs7qKH4uEaOqKkdBQ2A08C1FmRRGXWFBfCleJPu3i $origin_str = urldecode($secret_str); $origin_str = openssl_decrypt($origin_str,$method,$key);// 解密字符串 var_dump($origin_str);// {"user_id":1,"expire_time":3600} var_dump(json_decode($origin_str));// ["user_id"=>1,"expire_time"=>3600] // 加密 openssl_encrypt ( string $data , string $method , string $key [, int $options = 0 [, string $iv = "" [, string &$tag = NULL [, string $aad = "" [, int $tag_length = 16 ]]]]] ) : string // 解密 openssl_decrypt ( string $data , string $method , string $key [, int $options = 0 [, string $iv = "" [, string $tag = "" [, string $aad = "" ]]]] ) : string // data // The encrypted message to be decrypted.
  • nginx-反向代理

    正向代理是 客户端向指定的服务器发起请求, 客户是隐藏的; 反向代理, 则是隐藏了多个服务器, 由代理服务器决定向(集群服务器组)哪个服务器发起请求 参考自: https://blog.csdn.net/tsummerb/article/details/79248015
  • onethink-后台编辑器选择问题

    public function adminArticleEdit($data){ $res= $this->getConfig(); // var_dump($res); $res['editor_type']=2; $this->assign('addons_data', $data); // $this->assign('addons_config', $this->getConfig()); $this->assign('addons_config', $res); $this->display('content'); } }
  • phpqrcode-生成的图片转为-base64-格式输出

    原文见: https://www.pusonglin.cn/work/1619.html 项目中需要用到phpqrcode生成二维码,但是通过QRcode::png()生成的是显示输出当前的照片流,这样就不适用于列表显示多个二维码的需求了。网上也有相关的一些解决方案:通过把照片流缓存,然后进行base64编码。 找到生成图片用到了QRimage类的png方法,去除里面的:Header(“Content-type: image/png”);即可。 class QRimage { //---------------------------------------------------------------------- public static function png($frame, $filename = false, $pixelPerPoint = 4, $outerFrame = 4,$saveandprint=FALSE) { $image = self::image($frame, $pixelPerPoint, $outerFrame); if ($filename === false) { // Header("Content-type: image/png"); ImagePng($image); } else { if($saveandprint===TRUE){ ImagePng($image, $filename); header("Content-type: image/png"); ImagePng($image); }else{ ImagePng($image, $filename); } } ImageDestroy($image); } 如此,不再让输出端整个页面变为图片类型,解决方案并不完美,但是能达到我的目的即可。 附调用端代码: <?php global $_W,$_GPC; function getqrcode($url){ require_once MODULE_ROOT.'/lib/phpqrcode_web.php'; $value = $url; //二维码内容 $errorCorrectionLevel = 'L'; //容错级别 $matrixPointSize = 5; //生成图片大小 //生成二维码图片 ob_start(); QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2); $imgstr = base64_encode(ob_get_contents()); ob_end_clean(); return $imgstr; } //调用查看结果 include $this->template('web/test'); ?
  • 正则表达式-----必须含有大写字母和数字

    原文见:https://blog.csdn.net/u011974797/article/details/71479456 要求:由数字和字母组成,并且要同时含有数字和字母,且长度要在8-16位之间。 ^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$ 分开来注释一下: ^ 匹配一行的开头位置 (?![0-9]+$) 预测该位置后面不全是数字 (?![a-zA-Z]+$) 预测该位置后面不全是字母 [0-9A-Za-z] {8,16} 由8-16位数字或这字母组成 $ 匹配行结尾位置 注:(?!xxxx) 是正则表达式的负向零宽断言一种形式,标识预该位置后不是xxxx字符。 附: 要求:可以包含数字、字母、下划线,并且要同时含有数字和字母,且长度要在8-16位之间。 ^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z_]{8,16}$
  • 使用键盘选择字符

    shift + Home : 光标至行首的字符 shift + End : 光标至行尾的字符 shift + → : 光标向后一个字符 shift + ← : 光标向前一个字符
  • HTML+CSS底部footer两种固定方式

    原文见: https://blog.csdn.net/xianglikai1/article/details/78411615 网页常见的底部栏(footer)目前有两种: 一、永久固定,不管页面的内容有多高,footer一直位于浏览器最底部,适合做移动端底部菜单,这个比较好实现; <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <meta charset="utf-8" /> <style> body { padding-bottom: 50px; } .footer { position: fixed; left: 0px; bottom: 0px; width: 100%; height: 50px; background-color: #eee; z-index: 9999; } </style> </head> <body> 内容,可以大量复制看效果<br /> <div class="footer">固定在底部</div> </body> </html> 二、相对固定,当页面内容高度不沾满浏览器高度,footer显示在浏览器底部,且不会出现滚动条,如果页面内容高度超出浏览器高度,footer则相对与内容的最底部,并且自动出现滚动条; <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <meta charset="utf-8" /> <style type="text/css"> * { margin: 0px; padding: 0px; } html, body { height: 100%; } .
  • fastadmin-隐藏后台登陆地址

    我们都知道后台/admin是我们最常用的登录入口,方便的同时也留下了隐患,如果你刚好使用了admin/123456这种账号密码的方式,会导致我们的后台完全暴露在外。 因此我们建议修改后台的登录入口,达到隐藏后台登录入口的效果。 原文见:https://forum.fastadmin.net/thread/7640 操作步骤 1、首页修改application/config.php中deny_module_list的值,其中默认已经有common,我们添加admin,改成['common', 'admin'] 2、然后修改项目public目录下的admin.php,将其改名为admin_d75KABNWt.php,我们可以将admin.php其中的admin改成任意随机的字符串,越长越好。 登录后台 通过以上的修改后,我们不能再通过[www.yoursite.com/admin](http://www.yoursite.com/admin)的形式登录后台了,此时我们可以采用[www.yoursite.com/admin_d75KABNWt.php](http://www.yoursite.com/admin_d75KABNWt.php),其中admin_d75KABNWt.php就是我们任意修改的名称。 请保护好你后台的登录入口,千万别到处去粘贴,如果有泄漏后台入口,请再次尝试修改即可。 安全建议 通过上面的隐藏后台入口地址,我们已经加好了第一道门,以下是FastAdmin给大家的安全建议,为我们后台添加更多的安全防护。 1、定期修改后台管理的登录入口和超级管理员密码,越复杂越好。 2、开启后台登录验证码,开启方式:修改application/config.php底部中login_captcha,将它的值改为true 3、修改后台超级管理员用户名,默认是admin,建议修改,修改方式直接在权限管理->管理员管理中修改 4、移除冗余的管理员,早期FastAdmin中默认添加了几个管理员用于权限划分,建议删除。
  • fastadmin-忘记后台账号密码

    https://forum.fastadmin.net/thread/43 数据库修改两个字段 密码:c13f62012fd6a8fdf06b3452a94430e5 密码盐:rpR6Bv 登录密码是123456
  • firefox的checkbox选中后按f5刷新还是选中状态

    autocomplete=“off” 这个配置在from上或者你的checkbox上 autocomplete 属性规定输入字段是否应该启用自动完成功能。 自动完成允许浏览器预测对字段的输入。当用户在字段开始键入时,浏览器基于之前键入过的值,应该显示出在字段中填写的选项。
  • simditor-的使用

    <textarea id="editor">{$introduction}</textarea> <script> var editor = new Simditor({ textarea: $('#editor'), toolbarHidden: true }); </script> 如果一个页面使用多个 simditor 编辑器, 那么每个编辑器的 id 要设置为不同 <volist name="industries" id="vo"> <if condition="$i eq 2"> <div class="zi"> <div class="fs14 f-c9c"> <textarea id="editor{$i}">{$vo.content}</textarea> <script> var editor{$i} = new Simditor({ textarea: $('#editor{$i}'), toolbarHidden: true }); </script> </div> </div> <else/> <div class="zi f-dn"> <div class="fs14 f-c9c"> <textarea id="editor{$i}">{$vo.content}</textarea> <script> var editor{$i} = new Simditor({ textarea: $('#editor{$i}'), toolbarHidden: true }); </script> </div> </div> </if> </volist>
  • HeidiSQL-的-SSH-Tunnel-连接方式

    设置里面- 设置的是 远程服务器如何连接 数据库 ssh 隧道- 设置的是本地如何连接服务器 原文见
  • img-标签中的-src-不存在时,-不显示img标签

    <img src="{$trend.picture}" onerror="javascript:this.remove()">
  • http-状态码

    HTTP 提供了丰富的状态码供我们使用,正确的使用状态码可以让响应数据更具可读性。 200 OK - 对成功的 GET、PUT、PATCH 或 DELETE 操作进行响应。也可以被用在不创建新资源的 POST 操作上 201 Created - 对创建新资源的 POST 操作进行响应。应该带着指向新资源地址的 Location 头 202 Accepted - 服务器接受了请求,但是还未处理,响应中应该包含相应的指示信息,告诉客户端该去哪里查询关于本次请求的信息 204 No Content - 对不会返回响应体的成功请求进行响应(比如 DELETE 请求) 304 Not Modified - HTTP缓存header生效的时候用 400 Bad Request - 请求异常,比如请求中的body无法解析 401 Unauthorized - 没有进行认证或者认证非法 403 Forbidden - 服务器已经理解请求,但是拒绝执行它 404 Not Found - 请求一个不存在的资源 405 Method Not Allowed - 所请求的 HTTP 方法不允许当前认证用户访问 410 Gone - 表示当前请求的资源不再可用。当调用老版本 API 的时候很有用 415 Unsupported Media Type - 如果请求中的内容类型是错误的 422 Unprocessable Entity - 用来表示校验错误 429 Too Many Requests - 由于请求频次达到上限而被拒绝访问 [转载], [原文见] https://laravel-china.
  • laravel-中用「hash_equals」防止时序攻击

    比对验证码是否与缓存中一致时,使用了 hash_equals 方法。 hash_equals($verifyData['code'], $request->verification_code) hash_equals 是可防止时序攻击的字符串比较,那么什么是时序攻击呢?比如这段代码我们使用 $verifyData['code'] == $request->verification_code 进行比较,那么两个字符串是从第一位开始逐一进行比较的,发现不同就立即返回 false,那么通过计算返回的速度就知道了大概是哪一位开始不同的,这样就实现了电影中经常出现的按位破解密码的场景。而使用 hash_equals 比较两个字符串,无论字符串是否相等,函数的时间消耗是恒定的,这样可以有效的防止时序攻击。 [原文见laravel-china.org:] (https://laravel-china.org/courses/laravel-advance-training/5.5/building-a-user-registration-interface/929)
  • rm和chmod-删除和更新权限

    rm -r -f xxx // 强制删除文件夹及其中的全部文件或文件夹 chmod -R 777 xxx // 给xxx文件夹及其中的全部文件或文件夹设置 777 权限
  • fastadmin-使用-simditor-不显示

    需要把 『根目录 addons』 中的 assets 中的文件夹复制一份到 『根目录 public』中的 assets/addons/simditor 中
  • 帝国cms更改后台页面

    1.登陆页面, e/admin/index.php 2.后台首页, e/admin/main.php 3.后台首页, e/admin/adminstyle/1/AdminMain.php
  • onethink-一张表(模型)只能有一个字段设置为编辑器的解决办法

    原文见:http://www.topthink.com/topic/8867.html 在后台建立两个编辑器字段,发现提交表单时,两个字段的值不能进行更新,原因是在生成代码时,编辑器的对象名相同导致的,在这里可以通过修改 Addons\EditorForAdmin\content.html 文件来实现多个编辑器字段值的更新
  • onethink-模型(表)增加-时间自动完成字段

    需要到对应表的模型 xxxModel.class.php 进行添加字段为 auto 完成
  • 帝国cms搜索模板制作

    <form name="searchform" method="post" action="/e/search/index.php"> <!--按表搜索--> <input type="hidden" name="tbname" value="activity"> <!--所用搜索模板--> <input type="hidden" name="tempid" value="3"> <!--搜索字段变量--> <input type="hidden" name="show" value="title"> <!--搜索范围不限制--> <input type="hidden" name="member" value="0"> <!--查询逻辑, 默认模糊查询--> <input type="hidden" name="hh" value="LK"> <!--按关键词搜索--> <input name="keyboard" type="text" placeholder="输入活动关键词"> <button type="submit" name="submit">搜 索</button> </form> 模板的所属系统模型要与『要搜索的表』一致 对应的系统模型中对应搜索字段要选中
  • 帝国cms-如何调用-栏目(表)-的全部字段信息

    使用 e:loop 标签调用时, 会发现有些字段不能够读取出来, 可能是因为该字段没有加入到 列表模板或内容模板中 (亲测可用) 也可能是该字段不在 主表 中(此项没有测试, 未知是否正确)
  • onethink-后台验证码输错一次后,再次输入(正确)依然提示错误

    if(!check_verify($verify)){ // $this->error('验证码输入错误!'); // $this->error('验证码输入错误!',U('/Admin/Public/login'),2);// 自己改 $this->error('验证码输入错误!','Admin/Public/login',2); } success方法的默认跳转地址是 $_SERVER[“HTTP_REFERER”] , error方法的默认跳转地址是 javascript:history.back(-1); 。 原因: 因为默认的 $this->error , 是通过 javascript:history.back(-1) 跳转的, 这样就依然显示之前生成的验证码, 而后台已经生成新的验证码, 所以会出现报错; 解决办法: 把 error 方法的路径填写, 那么会相当于重新打开登陆页面, 也就可以正常登陆
  • js-确认-a-标签是否跳转

    <!-- 默认使用 jquery --> <a href="http://www.hao123.com">a标签</a> <script> $(function(){ $('a').click(function(){ alert('ok'); var $res = confirm('真的要跳转吗?'); if(!$res){ // $(this).href(''); 这种会导致 href 变为空, 下次再要点击时,不能跳转 return false;// 这样可以成功达到确认的目的,且不影响下次点击 } }); }); </script>
  • restful--patch-和-put-请求的区别

    看到 laravel 使用 Route::resource 生成 restful 架构的路由, 里面的更新用的是 patch 请求, 而有的地方说是用 put, 就查了一下, 这篇说得很明白, 就复制过来了 put 更新全部资源 patch 方法用来更新局部资源 假设我们有一个UserInfo,里面有userId, userName, userGender等10个字段。可你的编辑功能因为需求,在某个特别的页面里只能修改userName,这时候的更新怎么做? 人们通常(为徒省事)把一个包含了修改后userName的完整userInfo对象传给后端,做完整更新。但仔细想想,这种做法感觉有点二,而且真心浪费带宽(纯技术上讲,你不关心带宽那是你土豪)。 于是patch诞生,只传一个userName到指定资源去,表示该请求是一个局部更新,后端仅更新接收到的字段。 而put虽然也是更新资源,但要求前端提供的一定是一个完整的资源对象,理论上说,如果你用了put,但却没有提供完整的UserInfo,那么缺了的那些字段应该被清空 原文见 https://blog.csdn.net/mysevenyear/article/details/80674080
  • laravel-学习笔记1_20180829

    ######1. 在修改完 Homestead.yaml 文件后, 需要在本机加载并重启 vagrant, 执行如下 > vagrant provision && vagrant reload ######2. git 初始化(保存到本地), 设置远程仓库及使用默认远程仓库 $ git init $ git add -A $ git commit -m "Initial commit" $ git remote add origin git@github.com:<user_name>/<repositoy_name>.git $ git push -u origin master 其中, origin 作为默认的远程仓库服务器名 ( 也可以改成别的 ), <user_name> 指的是 git 中的用户名, <repositoy_name> 指的是 git 中的仓库名 git push -u origin master 意为将本地 master 分支推送到 origin 远程仓库; 其中 -u 指的是将 origin 和 master 连接起来, 以后即可以直接使用 git push 则代表推送 master 到 origin
  • phpstorm-快速给选择的文本进行包裹

    用 ctrl+w 可以快速选择文本 用ctrl+alt+t 可以打开包裹列表进行选择, 是用 () 还是(!)进行包裹 2.设置里面, 搜索 surround with, 在editor->general->smart keys里面 选中 surround selection on typing quote or brace; 然后在选中文本后可以直接输入引号’即完成用 ‘‘包裹, 输入括号(即完成用()包裹
  • mysqldump备份时出错

    mysqldump备份时出现 couldn’t find table 或 Got error: 1049: Unknown database 错误 原因可能是, 在命令行的末尾不能加入 分号 原因是通过DOS运行mysql命令的情况下,相当于没有进入mysql环境,不能再在命令行结束处加分号;,直接属于命令行即可! 原文见: https://blog.csdn.net/song19890528/article/details/9620981
  • phpstorm中写sql语句时,-数据库的表名或列名提示未找到

    在phpstorm中配置连接当前数据库 在数据库上选择同步即可
  • js中一个函数作为另一个函数的参数时,-是否加-引号

    setInterval("abc()",1000); // setInterval(abc,1000); function abc(){ document.write("abc"); } 以上两种写法都可以: 加引号,就要带 括号; 不加引号,就不要带括号
  • JS-区分变量类型,用-typeof-操作符的结果

    原文见: 廖雪峰js教程 在JavaScript的世界里,一切都是对象。 但是某些对象还是和其他对象不太一样。 为了区分对象的类型,我们用 typeof 操作符获取对象的类型,它总是返回一个字符串: typeof 123; // 'number' typeof NaN; // 'number' typeof 'str'; // 'string' typeof true; // 'boolean' typeof undefined; // 'undefined' typeof Math.abs; // 'function' typeof null; // 'object' typeof []; // 'object' typeof {}; // 'object' 可见,number、string、boolean、function和undefined有别于其他类型。特别注意null的类型是object,Array的类型也是object,如果我们用typeof将无法区分出null、Array和通常意义上的object——{}。 此外 var val = 123.4; console.log(typeof val.toFixed(2));// string 注意: 用parseInt()或parseFloat()来转换任意类型到number; 用String()来转换任意类型到string,或者直接调用某个对象的toString()方法; 通常不必把任意类型转换为boolean再判断,因为可以直接写if (myVar) {...}; typeof操作符可以判断出 number、boolean、string、function 和 undefined; 判断Array要使用 Array.isArray(arr); 判断null请使用 myVar === null; 判断某个全局变量是否存在用 typeof window.
  • js-数组对象的-sort()--按自己的要求排序

    js 数组的 sort() 排序 默认是按 ascii 码排序 var arr = [0,1,11,2,123,3,4]; arr = arr.sort(); console.log(arr); // Array [ 0, 1, 11, 123, 2, 3, 4 ] 如果想要按照大小排序, 可在 sort() 中将一个函数作为参数调用 var arr = [0,1,11,2,123,3,4]; arr = arr.sort(mySort); function mySort(a,b) { return a-b; } console.log(arr);// Array [ 0, 1, 2, 3, 4, 11, 123 ] 这里的 mySort 函数, 接收两个参数, 依次是数组中的两个值, 然后返回一个值, 再让 sort 方法来判定哪个在前, 哪个在后 (类似于冒泡排序), 这里的返回值应该是按 正负 来判断, 大于0则a在前, 小于0则b在前.
  • phpstorm-正则表达式进行查找替换

    想在phpstorm中 全部清除 之间的内容(保留script标签), 查找的正则表达式 为 ()([\s\S]*)(), 其中的 [\s\S] 表示 包括换行符在内的任何字符, 也可用 [\d\D] 或[\w\W] 代替, 这样默认为贪婪模式, 会匹配第一个 和最后一个 之间的内容 如果有多个 script 标签, 那么正则表达式为 ()((?!)[\s\S])*(), 其中 (?!) 表示 非 这个字符串 替换的正则表达式 为 $1\n\n$3
  • JS-中数组对象-length-属性值与php-count()-差异

    Js的length 指的是 最大数字索引(arr[0] 或 arr[‘0’])的下标值+1, 如果是关联数组, 那么length值为0; Php中 count($arr) 反映的是 arr数组中元素的个数. <script type=text/javascript> var arr = []; var brr = []; arr[0]=0; arr[5]=5; brr['a'] = 'a'; brr['e']='e'; console.log(arr.length); // 6 console.log(brr.length); // 0 </script> <?php $arr=[]; $arr[0]=0; $arr[5]=5; echo count($arr);// 2 ?>
  • js-逻辑运算的结果不一定是-boolean

    js 逻辑运算符的结果不一定是 boolean. 只有当 逻辑非 运算时,结果才是 布尔值中的 true 或 false; 逻辑与 逻辑或 运算的结果为能确定运算结果的那一项, 可能是任意类型 var z = 9 && 0 && 99; console.log(z); // 0 console.log(typeof z); // number var z = 9 && "" && 99; console.log(z); // console.log(typeof z); // string var z = 9 && null && 99; console.log(z); // null console.log(typeof z); // object
  • a标签伪类:visited-text-decoration设置无效的原因

    a:visited 伪类可能会暴露用户浏览信息记录,攻击者可能会据此判断用户曾经访问过的网站,造成不必要的损失,因此这些浏览器决定限制 a:visited 的功能, 所以不是代码的问题,而是浏览器方面的限制。 用下划线来判断某链接是否曾被点击过是失效的,那么我们就只能通过设置颜色来区别了 原文见: https://www.cnblogs.com/phoenixee/p/5960917.html
  • 用-uploadifive-插件上传文件时的问题

    官方文档错误 fileType 的值是 ‘fileType’: ‘image’ 而不能是 ‘fileType’: ‘image/*’ 后台用tp5框架时, 返回值如果是数组,则要通过json_encode [ 或者tp5 的 json ]函数进行转码, 而不能直接 return[即使配置文件中设置了 ‘default_return_type’ => ‘json’,] 否则会出现错误
  • phpstorm-快捷生成函数的注释

    在函数上一行键入 /** /** * @param $a * @param $b * @return mixed */ function abc($a, $b) { $c = $a + $b; return $c; } 然后 enter 回车即可
  • php-正则匹配中文

    php正则匹配汉字! $reg = ‘/^[\x{4e00}-\x{9fa5}]+$/u’; 而不是 $reg = ‘/^[\u4e00-\u9fa5]+$/u’;
  • thinkphp5-模板渲染-在控制器中不能-少了return

    namespace module\controller; use think\Controller; class index extends Controller { public function index{ return this->view->fetch('index'); } }
  • ThinkPHP5-对无限分类数组进行分页显示

    use think\Controller; use think\paginator\driver\Bootstrap; class Category extends Controller { public function index2() { // 1.获取要分页的数组 $cate = CategoryModel::getCate();// 无限分类后的数组 $data = $cate; // 1.1 设置当前分页(从url get方式获取), 每页显示记录行数 $curPage = input('page') ? input('page') : 1; $listRow = 3; // 1.2 得到当前分页所要显示的数组(array_chunk 或 array_slice 函数) $showData = array_chunk($data, $listRow, true); $showData = $showData[$curPage - 1]; // $showData = array_slice($data, ($curPage - 1) * $listRow, $listRow, true); // 1.3 调用Bootstrap类方法生成分页对象 $p = Bootstrap::make($showData, $listRow, $curPage, count($data), false, [ 'var_page' => 'page', 'path' => url('category/index2'), // 这里根据需要修改url 'query' => [], 'fragment' => '', ]); $p->appends($_GET); // 添加URL参数 // 2.
  • 在弹窗通过layer插件打开的情况下,采用jQuery-Ajax提交表单后,弹窗无法关闭

    原文地址:https://blog.csdn.net/cc_niu/article/details/77949829 自己代码: <script> jQuery("#updatebtn").click(function () { jQuery.ajax({ type: 'POST', url: "<{:url('admin/admin/update')}>", data: jQuery(".layui-form").serialize(), dataType: 'json', success: function (data) { if (data.status == 1) { // 成功返回 alert(data.message); // 刷新父级窗口,即可关闭当前窗口 window.parent.location.reload(); } else { // 失败返回 alert(data.message); window.location.href = "<{:url('admin/edit')}>"; } } }) }); </script>
  • jQuery-AJAX-提交表单信息时,提交按钮不能为-submit

    ajax代码: <script> jQuery("#btn").click(function () { jQuery.ajax({ type: 'POST', url: "<{:url('admin/admin/update')}>", data: jQuery("form").serialize(), dataType: 'json', success: function (data) { if (data.status == 1) { alert(data.message); // window.location.href = "<{:url('admin/index')}>"; } else { alert(data.message); // window.location.href = "<{:url('admin/edit')}>"; } } }) }); </script> html文件可以是: <input type="button" id="btn0" value="保存"> <button type="button" id="btn1">保存</button> <a>保存</a>
  • php路径

    / 代表服务器根目录 ./ 代表当前同一级目录 ../ 代表上一级目录
  • phpstorm-删除空行

    思路: 用正则把所有空行找到,然后一键全部替换。 步骤: 首先把 Regex 打上勾 ctrl+f 搜索框就填写正则规则:^\n ctrl+r 匹配到所有空行之后,点击【Replace all】即可
  • PHP封装一个自己的my_parse_ini_file()

    PHP文件提取练习[parse_ini_file() ] : 编写一个自己的 my_parse_ini_file() ,完成对 .ini 文件的读取 提示: explode 分割字符串 / fgets 读取一行数据 <?php function my_parse_ini_file($dir) { if (!file_exists($dir)) { echo '文件不存在, 无法访问'; return FALSE; } else { $fsize = filesize($dir); $fp = fopen($dir, 'r'); $con_str = fread($fp, $fsize); // 把字符串中的空白字符' '替换为'', 也就是删除空白字符 $con_str = str_replace(' ', '', $con_str); // 按回车换行给字符串分割成数组 $arr_temp1 = explode("\r\n", $con_str); $arr_res = array(); foreach ($arr_temp1 as $value) { $arr_temp2 = explode('=', $value); $arr_res[$arr_temp2[0]] = $arr_temp2[1]; } return $arr_res; } } $file_full_path = 'e:/config.
  • 双引号和单引号----由sql语句中的字符串变量而来

    在用php操作mysql 表的时候,遇到一个问题 表结构: CREATE TABLE news ( id int(10) unsigned NOT NULL AUTO_INCREMENT, title varchar(50) DEFAULT NULL, content text, add_time int(11) DEFAULT NULL, PRIMARY KEY (id) ); 写了条sql语句 结果第一条可以正确显示,第二条却出错 原因在于title字段类型是字符串,所以其中的变量要用引号引起来 也就是 $sql2 = “SELECT * FROM news WHERE title=’$title’”; 由此举例php中单双引号的使用情况如下:
  • Sublime-Text-3-快捷键汇总

    1、选择类 Ctrl+D 选中光标所占的文本,继续操作则会选中下一个相同的文本。 Alt+F3 选中文本按下快捷键,即可一次性选择全部的相同文本进行同时编辑。举个栗子:快速选中并更改所有相同的变量名、函数名等。 Ctrl+L 选中整行,继续操作则继续选择下一行,效果和 Shift+↓ 效果一样。 Ctrl+Shift+L 先选中多行,再按下快捷键,会在每行行尾插入光标,即可同时编辑这些行。 Ctrl+Shift+M 选择括号内的内容(继续选择父括号)。举个栗子:快速选中删除函数中的代码,重写函数体代码或重写括号内里的内容。 Ctrl+M 光标移动至括号内结束或开始的位置。 Ctrl+Enter 在下一行插入新行。举个栗子:即使光标不在行尾,也能快速向下插入一行。 Ctrl+Shift+Enter 在上一行插入新行。举个栗子:即使光标不在行首,也能快速向上插入一行。 Ctrl+Shift+[ 选中代码,按下快捷键,折叠代码。 Ctrl+Shift+] 选中代码,按下快捷键,展开代码。 Ctrl+K+0 展开所有折叠代码。 Ctrl+← 向左单位性地移动光标,快速移动光标。 Ctrl+→ 向右单位性地移动光标,快速移动光标。 shift+↑ 向上选中多行。 shift+↓ 向下选中多行。 Shift+← 向左选中文本。 Shift+→ 向右选中文本。 Ctrl+Shift+← 向左单位性地选中文本。 Ctrl+Shift+→ 向右单位性地选中文本。 Ctrl+Shift+↑ 将光标所在行和上一行代码互换(将光标所在行插入到上一行之前)。 Ctrl+Shift+↓ 将光标所在行和下一行代码互换(将光标所在行插入到下一行之后)。 Ctrl+Alt+↑ 向上添加多行光标,可同时编辑多行。 Ctrl+Alt+↓ 向下添加多行光标,可同时编辑多行。 2、编辑类 Ctrl+J 合并选中的多行代码为一行。举个栗子:将多行格式的CSS属性合并为一行。 Ctrl+Shift+D 复制光标所在整行,插入到下一行。 Tab 向右缩进。 Shift+Tab 向左缩进。 Ctrl+K+K 从光标处开始删除代码至行尾。 Ctrl+Shift+K 删除整行。 Ctrl+/ 注释单行。 Ctrl+Shift+/ 注释多行。 Ctrl+K+U 转换大写。 Ctrl+K+L 转换小写。 Ctrl+Z 撤销。 Ctrl+Y 恢复撤销。 Ctrl+U 软撤销,感觉和 Gtrl+Z 一样。 Ctrl+F2 设置书签 Ctrl+T 左右字母互换。 F6 单词检测拼写
  • 数据库事务四大特性

    数据库事务是指作为单个逻辑工作单元执行的一系列操作,这些操作要么全做要么全不做,是一个不可分割的工作单位。 数据库事务的四大特性(简称ACID)是: (1) 原子性(Atomicity) 事务的原子性指的是,事务中包含的程序作为数据库的逻辑工作单位,它所做的对数据修改操作要么全部执行,要么完全不执行。这种特性称为原子性。 例如银行取款事务分为2个步骤(1)存折减款(2)提取现金。不可能存折减款,却没有提取现金。2个步骤必须同时完成或者都不完成。 (2)一致性(Consistency) 事务的一致性指的是在一个事务执行之前和执行之后数据库都必须处于一致性状态。这种特性称为事务的一致性。假如数据库的状态满足所有的完整性约束,就说该数据库是一致的。 例如完整性约束a+b=10,一个事务改变了a,那么b也应随之改变。 (3)分离性(亦称独立性Isolation) 分离性指并发的事务是相互隔离的。即一个事务内部的操作及正在操作的数据必须封锁起来,不被其它企图进行修改的事务看到。假如并发交叉执行的事务没有任何控制,操纵相同的共享对象的多个并发事务的执行可能引起异常情况。 (4)持久性(Durability) 持久性意味着当系统或介质发生故障时,确保已提交事务的更新不能丢失。即一旦一个事务提交,DBMS保证它对数据库中数据的改变应该是永久性的,即对已提交事务的更新能恢复。持久性通过数据库备份和恢复来保证。 原文地址: http://blog.csdn.net/wolenski/article/details/7980521
  • mysql语句分类-DML-DDL-DCL

    DML(data manipulation language): 它们是SELECT、UPDATE、INSERT、DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言 DDL(data definition language): DDL比DML要多,主要的命令有CREATE、ALTER、DROP等,DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,他们大多在建立表时使用 DCL(Data Control Language): 是数据库控制功能。是用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke等)语句。在默认状态下,只有sysadmin,dbcreator,db_owner或db_securityadmin等人员才有权力执行DCL
  • mysql-group-by-having-查询时别名

    select deptname,count(*) as ‘专业个数’ from class group by deptname having 专业个数>1; having后面的别名不能用引号
  • mysql-数值类型指定宽度

    mysql 数值类型关键字后面的括号内指定整数值的显示宽度(例如,INT(4))。 但是这里的(4) 需要和 zerofill 一起用, 否则不会有效果. 当结合可选扩展属性ZEROFILL使用时, 默认补充的空格用零代替。例如,对于声明为INT(5) ZEROFILL的列,值4检索为00004。 如果为一个数值列指定ZEROFILL,MySQL自动为该列添加UNSIGNED属性。
  • mysql-复制表结构

    实例: mysql>create database db2018 charset=utf8 collate utf8_general_ci; mysql>create table tb1(id int,name varchar(20)) engine=myisam charset=utf8; 创建一个临时表tbtemp,结构与tb1一致 mysql>create table tbtemp like tb1;
  • MySQL查看当前数据库database【三种方法】

    在MySQL下查看当前使用的是哪个数据库,有三种方式 (1)用select database()语句 mysql> select database(); +————+ | database() | +————+ | test | +————+ 1 row in set (0.00 sec) 从查询结果中可以看出,当前用的是test数据库 (2)用show tables语句,查询出来的结果中,第一行为Tables_in_XXX,这里XXX就 是当前所用的数据库名称。 mysql> show tables; +——————-+ | Tables_in_test | +——————-+ | push_test | | ship_order_detail | +——————-+ 2 rows in set (0.00 sec) 从查询结果中可以看出,当前用的是test数据库。 (3)用status语句,查询出来的结果中有一行是currrent database: XXX。这里XXX就 是当前所用的数据库名称。 mysql> status; mysql Ver 14.14 Distrib 5.1.60, for pc-linux-gnu (i686) using EditLine wrapper Connection id: 1484237 Current database: test Current user: root@localhost SSL: Not in use
  • mysql中-date_add(date,interval-type)

    mysql中 date_add(date,interval type) 中, date类型不能为"时间戳".
  • php-双引号调用函数

  • 上网证书错误

    新装了一个intellij idea,因为想搞个长期试用,就把系统时间设置到2050年去了。后来再用cdn的boostrap就不能显示css了,原因是证书过期无效,一看系统时间没改过来,改回就没问题了。
  • php获取时间有误

    我们用echo date(“Y-m-d H:i:s”);获取当前时间; 但有时我们会发现我们获取的时间其实比北京时间少8个小时(获取的是标准时间),这说明我们没有修改php配置文件里面的data属性。 如果我们想获取的是当前北京时间的话,我们必须将我们的php.ini配置文件修改一下: [Date] ; Defines the default timezone used by the date functions date.timezone = ‘PRC’ 这样即可,同理我们可以更改‘PRC’获取不同地区的当前时间。 ps:我这是wamp装的php,这里的php.ini不光在 wanmp/bin/php/php5.6.25/ 里的php.ini要改;wanmp/bin/apache/apache2.4.23/bin 里的php.ini 也要改
  • css-左右分栏各自滚动

    方式: 左右分别设置 h-screen, overflow-y-auto <body> <div class="flex"> <div class="h-screen overflow-y-auto w-1/6 bg-slate-500 text-white"> <div>sidebar</div> <div class="h-[1200px]">sidebar</div> <div>sidebar</div> <div>sidebar</div> </div> <div class="h-screen overflow-y-auto w-5/6 overflow-y-auto bg-blue-200"> <div>111</div> <div>111</div> <div class="h-[1200px]">111</div> <div>111</div> </div> </div> </body> 参考自csdn:
🍀