Atwood定律:凡是能用JavaScript写出来的,最终都会用JavaScript写出来

 

Wordpress 学习笔记 4 数据库操作

插件位置需要注意的是,由于在WordPress中可以配置wp-content/plugins/目录的位置,所以你必须使用plugin_dir_path()和plugins_url()两个函数来获取插件的路径。WordPress 查询数据库查询global $wpdb; $fivesdrafts = $wpdb->get_results("SELECT ID, post_title FROM $wpdb->posts WHERE post_status = 'publish' AND post_author = 1"); foreach ($fivesdrafts as $fivesdra
ngtwewy 2020-06-27    PHP   

Wordpress 学习笔记 3 数据库表结构

默认WordPress一共有以下12个表。这里加上了默认的表前缀 wp_ 。wp_commentmeta:存储评论的元数据wp_comments:存储评论wp_links:存储友情链接(Blogroll)wp_options:存储WordPress系统选项和插件、主题配置wp_postmeta:存储文章(包括页面、上传文件、修订)的元数据wp_posts:存储文章(包括页面、上传文件、修订)wp_terms:存储每个目录、标签wp_termsmeta:存储目录、标签的元数据wp_term_relationships:存储每个文章、链接和对应分类的关系wp_term_taxonomy:存储每个目
ngtwewy 2020-06-27    PHP   

Wordpress 学习笔记 2 插件编写

什么是 Wordpress 插件 ?插件( Plugins )是如何与 WordPress 交互的WordPress 为插件提供了多种丰富的 APIs。每一种 API( 应用程序接口 )使插件和 WordPress 以不同的方式交互。下面是 WordPress 提供的主要 APIs 以及他们的功能列表:插件: 给插件提供一系列的钩子( hooks )来使用 WordPress 的相关部分。WordPress 包含两种不同类型的钩子: 动作( Actions )和过滤器( Filters )。动作让你可以在运行时的特定时刻触发自定义的插件代码。例如,可以在用户在 WordPress 中注册了一个
ngtwewy 2020-06-27    PHP   

Wordpress 学习笔记 1 常用

1,菜单函数 wp_nav_menu()wp_nav_menu( array( 'theme_location'=> '', //[保留]用于在调用导航菜单时指定注册过的某一个导航菜单名,如果没有指定,则显示第一个 'menu'=> 'top_main1', //[可删]使用导航菜单的名称调用菜单,可以是 id, slug, name (按顺序匹配的) 。 'container'=> false, //[可删]最外层容器标签名 'container_class'=> '',//[可删]最外层容器class名 'container_id'=> '',//[可删]最外层容器id值 'm
ngtwewy 2020-06-27    PHP   

Wordpress 常用标签笔记

1,菜单函数 wp_nav_menu()wp_nav_menu( array( 'theme_location' => '', //[保留]用于在调用导航菜单时指定注册过的某一个导航菜单名,如果没有指定,则显示第一个 'menu' => 'top_main1', //[可删]使用导航菜单的名称调用菜单,可以是 id, slug, name (按顺序匹配的) 。 'container' => false, //[可删]最外层容器标签名 'container_class' => '',//[
ngtwewy 2020-05-22    PHP   

阿里的后端安全规约

1. 【强制】隶属于用户个人的页面或者功能必须进行权限控制校验。 说明:防止没有做水平权限校验就可随意访问、修改、删除别人的数据,比如查看他人的私信内容。2. 【强制】用户敏感数据禁止直接展示,必须对展示数据进行脱敏。 说明:中国大陆个人手机号码显示为:137****0969,隐藏中间 4 位,防止隐私泄露。3. 【强制】用户输入的SQL参数严格使用参数绑定或者METADATA字段值限定,防止SQL注入, 禁止字符串拼接 SQL 访问数据库。反例:某系统签名大量被恶意修改,即是因为对于危险字符 # --没有进行转义,导致数据库更新时,where 后边的信息被注释掉,对全库进行更新。4. 【强制
ngtwewy 2020-04-27    PHP   

PHP 如何防止 CSRF 跨站域请求伪造

CSRF 背景与介绍CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安全隐患之一。其他安全隐患,比如 SQL 脚本注入,跨站域脚本攻击等在近年来已经逐渐为众人熟知,很多网站也都针对他们进行了防御。然而,对于大多数人来说,CSRF 却依然是一个陌生的概念。即便是大名鼎鼎的 Gmail, 在 2007 年底也存在着 CSRF 漏洞,从而被黑客攻击而使 Gmail 的用户造成巨大的损失。CSRF 攻击实例CSRF 攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在并未授权的情况
ngtwewy 2020-04-05    PHP   

为什么 PDO 无法捕获异常

场景:有些复杂的原生SQL语句查询,出错了没有报错:try{ $sth = $dbh->prepare($sql); $sth->execute(); $articles = $sth->fetchAll(\PDO::FETCH_ASSOC); } catch (\PDOException $e){ return $this->json($e->getMessage()); } 分析:PDO 提供了三种不同的错误处理模式,以满足不同风格的应用开发:PDO::ERRMODE_SILENT此为默认模式。 PDO 将只简单地设置错误码,可使用 PDO::
ngtwewy 2020-03-29    PHP   

PHP 一次查询生成二维 Json

场景:一次查询,返回给前端一个列表,需要在列表的每一项中加一个相关子对象。比如,返回给前端一个文章列表,列表中的每一项中,都要有一个文章作者的信息对象,如下:{ "count": "548", "list": [ { "id": "620", "user_id": "1", "category_id": "17", "name": "买藕了", "thumbnail": "", "content": "一斤藕半斤都是空心的,以后不买了...", "comment_counter": "0", "like_counte
ngtwewy 2020-03-29    PHP   

Workerman 开启 WSS

准备工作:1、Workerman版本不小于3.3.72、PHP安装了openssl扩展3、已经申请了证书(pem/crt文件及key文件)放在磁盘任意目录代码: array( // 请使用绝对路径 'local_cert'=> '磁盘路径/server.pem', // 也可以是crt文件 'local_pk'=> '磁盘路径/server.key', 'verify_peer'=> false, // 'allow_self_signed' => true, //如果是自签名证书需要开启此选项 ) ); // 这里设置的是websocket协议(端口任意,但是需要保证没被其它
ngtwewy 2020-02-29    PHP   

PHP 为什么会引入 Trait

软件开发中的两种常用代码复用模式,继承和组合。继承:强调 父类与子类 的关系,即子类是父类的一个特殊类型;组合:强调 整体与局部 的关系,侧重的一种需要的关系;软件开发中有一条原则,叫做组合优于继承。这是因为从耦合度来看,继承要高于组合。继承关系中,子类与父类保持着高度的依赖关系,加上 PHP 不支持多继承,为了避免重写编写代码,很多功能都被统一封装到父类中。这样做有两个坏处:一是随着继承的层数和子类的增加,代码复杂度不断增加,大量的方法都将面临着重写;二是这些功能对于一些子类来说可能是不必要的,破坏了代码的封装性。trait ezcReflectionReturnInfo { functi
ngtwewy 2020-02-22    PHP   

PHP 获取父分类和子分类常用递归函数

/** * 递归获取所有 ID * @param array $array 所有分类列表 * @param [type] $id 子分类ID */ function get_all_parents($array, $id){ $arr = []; foreach ($array as $v) { if($v['id'] == $id){ $arr[] = $id; if($v['parent_id'] != 0){ $arr = array_merge(
ngtwewy 2020-02-16    PHP   

ThinkPHP 5.0 原生查询分页

use think\paginator\driver\Bootstrap; // 获取用户上传列表 $page    = input('page/d') > 0 ? input('page/d') : 1;  $per_page  = Config::get('per_page'); $offset   = ($page-1) * $per_page; $sql = "..."; $list = db()->query($sql); // 查询总条数 $count = "SELECT count(*) AS count from tp_item"; $count = d
ngtwewy 2020-02-05    PHP   

Workerman 实现 WebSocket IM 聊天系统【后端篇】

前端篇地址:https://javascript.net.cn/article?id=652相关文档:https://restfulapi.cn/d/271一,WebSocket 简介WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,浏览器和服务器之间就可以创建一个持久性的连接,两者之间就直接可以数据互相传送。现在,很多网站为了实现推送技术,所用的技术都是 Ajax 轮询。轮询是在特定
ngtwewy 2020-02-03    PHP   

PHP 常用函数

数组函数:1.排序类:【1.无返回值,传值引用,就直接对原数组进行了修改】按V:sort,rsort,asort,arsort,按K:ksort,krsortsort() 按升序对给定数组的值排序,不保留键名rsort() 对数组逆向排序,不保留键名asort() 对数组排序,保持索引关系arsort() 对数组逆向排序,保持索引关系ksort() 按键名对数组排序krsort() 将数组按照键逆向排序natsort() 用自然顺序算法对数组中的元素排序natcasesort() 自然排序,不区分大小写2.键值操作类:【都有返回值,没有在原来参数上修改】array_values($arr);
ngtwewy 2020-01-31    PHP