1
0
mirror of https://gitee.com/tawords/tawords-docs synced 2025-01-11 11:58:14 +08:00
Code Issues Projects Releases Wiki Activity GitHub Gitee
tawords-docs/docs/manual/6. 【清单 ToDo】/随笔记/随笔记.md

553 lines
18 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

`$a ?? 0` 等同于 `isset($a) ? $a : 0`
`$a ?: 0` 等同于 `$a ? $a : 0`
`empty`:判断一个变量是否为空(`null` `false` `00` `0` `'0'`这类,都会返回`true`)。
`isset`:判断一个变量是否设置(值为`false` `00` `0` `'0'`这类,也会返回`true`)。
```php
// session_status()
// https://www.php.net/manual/zh/function.session-status.php
// 返回值
// PHP_SESSION_DISABLED 会话是被禁用的。
// PHP_SESSION_NONE 会话是启用的,但不存在当前会话。
// PHP_SESSION_ACTIVE 会话是启用的,而且存在当前会话。
```
------------
mysql.php参考
```php
// 参考文章https://www.cnblogs.com/liujunhang/p/10926632.html
// PHP 官网 关于MySQL的介绍https://www.php.net/manual/zh/set.mysqlinfo.php
```
------------
mysql
```
// 常用sql语句总结
// 在上面的代码中我们尝试了通过mysqli对mysql数据进行的增删改查操作其中较为核心的是sql语句的使用。
// 下面我们来说一下常用的sql语句语法
// 创建数据库
// create database 数据库名 default character set = 'utf8';
// 创建数据表
// create table 数据表名 (
// -- 下面是表中的一些字段
// id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
// firstname VARCHAR(30) NOT NULL,
// lastname VARCHAR(30) NOT NULL,
// email VARCHAR(50),
// reg_date TIMESTAMP
// )
// 插入数据
// insert into table_name (column1, column2, column3,...) values (value1, value2, value3,...)
// 读取数据
// select column_name(s) from table_name
// 如果传入一个*,则表示搜索所有的数据:
// select * from table_name
// 也可以在后面加入指定条件
// select * from table_name where 条件
// 修改
// update table_name
// set column1=value, column2=value2,...
// where some_column=some_value
// 删除数据
// delete from table_name
// where some_column = some_value
```
------------
会话相关
```php
// // 初始化会话。
// // 如果要使用会话,别忘了现在就调用:
// session_start();
// // 重置会话中的所有变量
// $_SESSION = array();
// // 如果要清理的更彻底,那么同时删除会话 cookie
// // 注意:这样不但销毁了会话中的数据,还同时销毁了会话本身
// if (ini_get("session.use_cookies")) {
// $params = session_get_cookie_params();
// setcookie(session_name(),"", -1,
// $params["path"], $params["domain"],
// $params["secure"], $params["httponly"]
// );
// }
// // 最后,销毁会话
// session_destroy();
------------------------------------------------------
// //开启 Session
// session_start();
// // 删除所有 Session 变量
// $_SESSION = array();
// //判断 cookie 中是否保存 Session ID
// if(isset($_COOKIE[session_name()])){
// setcookie(session_name(),'',time()-3600, '/');
// }
// //彻底销毁 Session
// session_destroy();
```
------------
```
//SQL join 用于把来自两个或多个表的行结合起来。
/*
https://zhidao.baidu.com/question/1835987585872639700.html
SQL语句中AS的意思是别名。
AS用处
query时
用来重新指定返回的column名字。
示例
一个table有个column叫 idquery是select id from table1
如果不想叫id就可重新命名。
如叫 systemID可这样写select id as systemId from table1。
create table 或 procedure 时
as 是个关键字。
示例
create table test as select * from table1
这时会create 一个table test完全copy table table1里的全部数据。
create procdure name as is
begin
end;这时as和is可以互换。
*/
```
------------
mysql-connect(full).php.bak
```php
<?php
// 参考文章https://www.cnblogs.com/liujunhang/p/10926632.html
// PHP 官网 关于MySQL的介绍https://www.php.net/manual/zh/set.mysqlinfo.php
// 当前页https://only4.work/recite-words/component/mysql-connect.php
// *************************************************** 通过mysqli 连接数据库 ***************************************************
// php 连接Mysql
// 通过mysqli
// 采用面向对象的写法来完成数据库的连接
// 设置基础数据库信息
require_once "../config.php";
// 创建连接
$conn = new mysqli($mysql_server_name, $mysql_username, $mysql_password, $mysql_database);
// 如果存储数据的时候出现乱码,那么可以使用下面的代码来解决:
mysqli_set_charset($conn,'utf8'); // 解决乱码问题
// 检测连接是否成功
if($conn->connect_error){
die("连接失败,错误:" . $conn->connect_error ."<br />");
}
// 否则连接成功
echo "数据库连接成功!<br />";
// *************************************************** 通过mysqli 创建数据库 ***************************************************
// /*
// * 通过mysqli 创建数据库 创建连接语句:$conn = new mysqli($mysql_server_name, $mysql_username, $mysql_password);
// */
// // 设置sql语句
// $sql = "create database stu_01 default character set = 'utf8' ";
// // 发送sql语句 并且验证是否创建成功
// if($conn->query($sql) === TRUE){
// echo "数据库创建成功.";
// }else {
// echo "数据库创建失败 ,错误信息为:" . $conn->error; // 如果失败输出错误信息
// }
// *************************************************** 通过mysqli 创建数据表 ***************************************************
// // 使用sql 创建数据表
// $sql = "create table stu_info(
// id int(6) UNSIGNED auto_increment primary key,
// firstname varchar(30) not null,
// lastname varchar(30) not null,
// email varchar(50),
// reg_date timestamp
// )";
// if($conn->query($sql) === TRUE){
// echo "数据表创建成功。" ."<br />";
// }else {
// echo "数据表创建失败,错误信息:" . $conn->error ."<br />";
// }
// *************************************************** 通过mysqli 向数据表中插入信息 ***************************************************
// // 设置插入数据的sql语句
// $sql = "insert into stu_info(firstname,lastname,email) values('张三','张小三','zhangsan@qq.com')";
// // 发送sql 语句
// if($conn->query($sql) === TRUE){
// echo "新记录添加成功!"."<br />";
// }else {
// echo "新记录添加失败,错误信息:" . $conn->error ."<br />";
// }
// // 下面开始插入多条数据
// $sql = "insert into stu_info(firstname,lastname,email) values('张三丰','张君宝','sanfeng@qq.com');";
// // 使用.= 的形式进行sql语句连接
// $sql .= "insert into stu_info(firstname,lastname,email) values('东方不败','东方拜拜','dongfang@qq.com');";
// // 发送sql
// if($conn->multi_query($sql) === TRUE) {
// echo "数据添加成功!" . '<br>';
// }else{
// echo "数据添加失败,错误信息如下: " . $conn->connect_error . '<br>';
// }
// *************************************************** 通过mysqli 读取数据据库中的信息 ***************************************************
// // 设置sql 语句,查询全部数据
// $sql = "select * from stu_info";
// // $sql = "select id ,firstname,lastname from stu_info;";
// // $sql = "select * from stu_info where id > 3;";
// // 发送sql语句获得查询结果
// $result = $conn->query($sql);
// // 如果查询的结果>0表示查询成功那么就可以将数据输出
// // 函数 num_rows() 判断返回的数据。
// // 如果返回的是多条数据,函数 fetch_assoc() 将结合集放入到关联数组并循环输出。
// if(isset($result->num_rows) && $result->num_rows > 0) {
// // 输出数据
// while($row = $result->fetch_assoc()){
// echo "id" . $row['id'] . '- Name:' . $row['firstname'] . " " . $row['lastname'] . '<br>';
// }
// }else {
// echo "暂无数据" . '<br>';
// }
// *************************************************** 通过mysqli 删除数据 ***************************************************
// // 设置sql
// $sql = "delete from stu_info where lastname = '东方拜拜';";
// // 发送sql
// if($conn->query($sql) === TRUE) {
// echo "删除成功" . '<br>';
// }else {
// echo "删除失败,错误信息为:" . $conn->connect_error . '<br>';
// }
// *************************************************** 通过mysqli 删除数据 ***************************************************
// // 设置sql语句
// $sql = "update stu_info set firstname='张小三小三小三小三小三' where id = 4";
// // 发送sql语句
// if($conn->query($sql) === TRUE) {
// echo "修改成功" . '<br>';
// }else {
// echo "修改失败,错误信息:" . $conn->connect_error . '<br>';
// }
// *************************************************** 清空数据表 ***************************************************
// $sql = "TRUNCATE `$mysql_database`.`stu_info`";
// // 发送sql语句获得查询结果
// $result = $conn->query($sql);
// *************************************************** 关闭数据库连接 ***************************************************
// 连接之后,还需要将连接关闭
$conn->close();
// 常用sql语句总结
// 在上面的代码中我们尝试了通过mysqli对mysql数据进行的增删改查操作其中较为核心的是sql语句的使用。
// 下面我们来说一下常用的sql语句语法
// 创建数据库
// create database 数据库名 default character set = 'utf8';
// 创建数据表
// create table 数据表名 (
// -- 下面是表中的一些字段
// id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
// firstname VARCHAR(30) NOT NULL,
// lastname VARCHAR(30) NOT NULL,
// email VARCHAR(50),
// reg_date TIMESTAMP
// )
// 插入数据
// insert into table_name (column1, column2, column3,...) values (value1, value2, value3,...)
// 读取数据
// select column_name(s) from table_name
// 如果传入一个*,则表示搜索所有的数据:
// select * from table_name
// 也可以在后面加入指定条件
// select * from table_name where 条件
// 修改
// update table_name
// set column1=value, column2=value2,...
// where some_column=some_value
// 删除数据
// delete from table_name
// where some_column = some_value
```
------------
csrf document.txt
```
[https://www.zhihu.com/question/60102253]
PHP加了Token验证表单防止CSRF后还有必要做其它的防范吗?比如判断REFERER再加个验证码之类的有没有这个必要目前再写一个模板做练习已经加上了Token验证准备再加上判断REFERER时突然觉得这样会不会有点多此一举或则有什么其它更好的方法吗
目前的代码是这样的先判断来源再判断Token
//判断请求-登陆
if($_GET['login']=='action'){
//判断REFERER
$referer = $_SERVER["HTTP_REFERER"]; //获取前一页面的 URL 地址
$url = $_SERVER["HTTP_HOST"]; //获取本页面的主机 URL 地址
//echo "来源页面:$referer </br> 本地页面:$url </br>"; //输出结果(测试用)
if(preg_match("|$url|", $referer)){
//来源通过判断Token令牌
session_start();
if($_POST['token'] == $_SESSION['token']){
unset($_SESSION['token']);
echo "这是一个正常的提交请求";
}else{
echo "这是一个非法的提交请求";
}
}else{
echo '非法来源的请求';
}
}
[https://blog.csdn.net/qq_31752115/article/details/103775475]
php如何防止csrf攻击
CSRF概念CSRF跨站点请求伪造(Cross—Site Request Forgery)跟XSS攻击一样存在巨大的危害性你可以这样来理解
攻击者盗用了你的身份以你的名义发送恶意请求对服务器来说这个请求是完全合法的但是却完成了攻击者所期望的一个操作比如以你的名义发送邮件、发消息盗取你的账号添加系统管理员甚至于购买商品、虚拟货币转账等。推荐学习PHP编程从入门到精通
其中Web A为存在CSRF漏洞的网站Web B为攻击者构建的恶意网站User C为Web A网站的合法用户。
防御CSRF攻击
目前防御 CSRF 攻击主要有三种策略:验证 HTTP Referer 字段;在请求地址中添加 token 并验证;在 HTTP 头中自定义属性并验证。
1验证 HTTP Referer 字段
根据 HTTP 协议,在 HTTP 头中有一个字段叫 Referer它记录了该 HTTP 请求的来源地址。在通常情况下,访问一个安全受限页面的请求来自于同一个网站,比如需要访问 http://bank.example/withdraw?account=bob&amount=1000000&for=Mallory用户必须先登陆 bank.example然后通过点击页面上的按钮来触发转账事件。
这时,该转帐请求的 Referer 值就会是转账按钮所在的页面的 URL通常是以 bank.example 域名开头的地址。而如果黑客要对银行网站实施 CSRF 攻击,他只能在他自己的网站构造请求,当用户通过黑客的网站发送请求到银行时,该请求的 Referer 是指向黑客自己的网站。
因此,要防御 CSRF 攻击,银行网站只需要对于每一个转账请求验证其 Referer 值,如果是以 bank.example 开头的域名,则说明该请求是来自银行网站自己的请求,是合法的。如果 Referer 是其他网站的话,则有可能是黑客的 CSRF 攻击,拒绝该请求。
2在请求地址中添加 token 并验证
CSRF 攻击之所以能够成功,是因为黑客可以完全伪造用户的请求,该请求中所有的用户验证信息都是存在于 cookie 中,因此黑客可以在不知道这些验证信息的情况下直接利用用户自己的 cookie 来通过安全验证。
要抵御 CSRF关键在于在请求中放入黑客所不能伪造的信息并且该信息不存在于 cookie 之中。
可以在 HTTP 请求中以参数的形式加入一个随机产生的 token并在服务器端建立一个拦截器来验证这个 token如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。
3在 HTTP 头中自定义属性并验证
这种方法也是使用 token 并进行验证,和上一种方法不同的是,这里并不是把 token 以参数的形式置于 HTTP 请求之中,而是把它放到 HTTP 头中自定义的属性里。通过 XMLHttpRequest 这个类,可以一次性给所有该类请求加上 csrftoken 这个 HTTP 头属性,并把 token 值放入其中。这样解决了上种方法在请求中加入 token 的不便,同时,通过 XMLHttpRequest 请求的地址不会被记录到浏览器的地址栏,也不用担心 token 会透过 Referer 泄露到其他网站中去。
```
------------
note____.txt
```php
<!-- 涟漪动画效果mdui-ripple -->
<!--按钮稍微小一点mdui-btn-dense-->
<!-- font-size: 3.5em; font-size: 3rem; font-size: 36pt; font-size: 48px;-->
查询IP有道API
https://foundation.youdao.com/ip/ipinfo
如果有标DJ的是英式音标标KK的是美式音标。bai
比如你查一个词coatDJdu[kəut]KK[kot]
若页面需默认用 极速 速核,增加标签:<meta name="renderer" content="webkit">
若页面需默认用ie兼容内核增加标签<meta name="renderer" content="ie-comp">
若页面需默认用ie标准内核增加标签<meta name="renderer" content="ie-stand">
HTML5 Boilerplate 使用相对协议请求 Google CDN 中的 jQuery ,使用方式为:
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js"></script>
<script>!window.jQuery && document.write(unescape('%3Cscript src="js/libs/jquery-1.4.2.js"%3E%3C/script%3E'))</script>
上面的例子中除了引用 Google CDN 中的文件外,还添加了一个本地 jQuery 链接,以便连接 Google CDN 失败后,使用本地副本。
分享到QQ的缩略图显示设置未确认是否有效
<meta itemprop="name" content="0047ol"/>
<meta name="shareimage" itemprop="image" content="logo.png" />
<meta name="keywords" content="0047ol" />
<meta name="description" itemprop="description" content="0047ol" />
H5手Q分享通用接口代码片段https://blog.csdn.net/qq_35432904/article/details/81704321
<meta itemprop="name" content="网页标题">
<meta itemprop="description" content="网页描述">
<meta itemprop="image" content="缩略图">
error_reporting(0);//禁用错误报告
error_reporting(E_ALL ^ E_NOTICE);//显示除去 E_NOTICE 之外的所有错误信息
error_reporting(E_ALL^E_WARNING^E_NOTICE);//显示除去E_WARNING E_NOTICE 之外的所有错误信息
error_reporting(E_ERROR | E_WARNING | E_PARSE);//显示运行时错误与error_reporting(E_ALL ^ E_NOTICE);效果相同。
error_reporting(E_ALL);//显示所有错误
js:
// var flags = [
// {flag:'1',info:'清香1'},
// {flag:'2',info:'清香2'},
// {flag:'3',info:'清香3'},
// {flag:'4',info:'清香4'},
// {flag:'5',info:'清香5'}];
// var arr = '4';
// flags.map(e=>{ if(arr == e.flag){ console.log(e.info); alert(e.info);} })
HTMl中Meta标签 参考https://www.cnblogs.com/cxzhome/p/8448463.html
详解HTML5中rel属性的prefetch预加载功能使用https://www.cnblogs.com/suyuwen1/p/5506397.html
header('Content-Type: text/html; charset=utf-8'); //网页编码
header('Content-Type: text/plain'); //纯文本格式
header('Content-Type: image/jpeg'); //JPG、JPEG
header('Content-Type: application/zip'); // ZIP文件
header('Content-Type: application/pdf'); // PDF文件
header('Content-Type: audio/mpeg'); // 音频文件
header('Content-type: text/css'); //css文件
header('Content-type: text/javascript'); //js文件
header('Content-type: application/json'); //json
header('Content-type: application/pdf'); //pdf
header('Content-type: text/xml'); //xml
header('Content-Type: application/x-shockw**e-flash'); //Flash动画
```
------------
```php
```
------------
```php
```
------------
```php
```
------------
```php
```
------------
```php
```
------------
```php
```
------------
```php
```
------------
```php
```
------------
```php
```
------------
```php
```