kk Blog —— 通用基础

date [-d @int|str] [+%s|"+%F %T"]

CSS实现侧边栏导航 + 透明

https://www.cnblogs.com/liubingyjui/p/12698504.html

css background背景透明

1
2
background: transparent;
background: rgba(0, 0, 0, 0.8);

CSS实现侧边栏导航

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style type="text/css">
		/*隐藏checked复选框*/
			#sidemenu{
				display: none;
			}

			#sidemenu:checked + aside {
				/*为被选中的sidemenu后的aside设置属性(紧邻)*/
				left: 0;
				/*点击按钮即选中checked后,侧边栏位置变为贴着左边,配合ease-out使用,有渐变滑出的效果*/
			}

			#sidemenu:checked ~ #wrap {
				/*为被选中的sidemenu后的wrap设置属性(非紧邻)*/
				padding-left: 220px;
			}

			aside {
				/*侧边栏,初始位置为-200px,即隐藏效果*/
				position: absolute;
				top: 0;
				bottom: 0;
				left: -200px;
				width: 200px;
				background: black;
				transition: 0.2s ease-out;
				/*动画效果的执行方式是ease-out,即侧边栏滑动效果为渐变式,而不是生硬的突然变化*/
			}

			h2 {
				color: white;
				text-align: center;
				font-size: 2em;
			}

			/*控制侧边栏进出的按钮(外部包裹)*/
			#wrap {
				margin-left: 20px;
				padding: 10px;
				transition: 0.2s ease-out;
			}

			/*控制侧边栏进出的按钮(内部文字样式)*/
			label {
				/*控制侧边栏进出的按钮*/
				background: white;
				border-radius: 70px;
				color: orange;
				cursor: pointer;
				display: block;
				font-family: Courier New;
				font-size: 2em;
				width: 1.5em;
				height: 1.5em;
				line-height: 1.5em;
				text-align: center;
				display: inline-block;
			}

			label:hover {
				background: #000;
			}

			#sideul li {
				list-style: none;
				color: white;
				width: 100%;
				height: 1.8em;
				font-size: 1.5em;
				text-align: center;
			}

			a {
				text-decoration: none;
			}

			#sideul li:hover {
				color: orange;
			}
		</style>
	</head>

	<body>
		<input type='checkbox' id='sidemenu'>
		<aside>
			<h2>主菜单</h2>
			<br />
			<ul id="sideul">
				<a href="##">
					<li>首页</li>
				</a>
				<a href="##">
					<li style="color: orange;">导航1</li>
				</a>
				<a href="##">
					<li>导航2</li>
				</a>
				<a href="##">
					<li>导航3</li>
				</a>
				<a href="##">
					<li>导航4</li>
				</a>
				<a href="##">
					<li>导航5</li>
				</a>
				<a href="##">
					<li>导航6ʳ</li>
				</a>
			</ul>
		</aside>
		<div id='wrap'>
			<label id='sideMenuControl' for='sidemenu'>≡</label>
			<!--for 属性规定 label 与哪个表单元素绑定,即将这个控制侧边栏进出的按钮与checkbox绑定-->
		</div>
	</body>
</html>

html实现点击直接下载文件

http://www.divcss5.com/html5/h57401.shtml

这样当用户打开浏览器点击链接的时候就会直接下载文件。

但是有个情况,比如txt,png,jpg等这些浏览器支持直接打开的文件是不会执行下载任务的,而是会直接打开文件,这个时候就需要给a标签添加一个属性“download”;

使用 a 标签

1
<a href="/user/test/xxxx.txt" download="文件名.txt">点击下载</a>

PHP session有效期session.gc_maxlifetime

https://www.jb51.net/article/26890.htm

PHP中的session有效期默认是1440秒(24分钟)【weiweiok 注:php5里默认的是180分】,也就是说,客户端超过24分钟没有刷新,当前session就会失效。很明显,这是不能满足需要的。

服务器的操作,只是需要进行如下的步骤:

1、把“session.use_cookies”设置为1,打开Cookie储存SessionID,不过默认就是1,一般不用修改;

2、把“session.cookie_lifetime”改为正无穷(当然没有正无穷的参数,不过999999999和正无穷也没有什么区别);

3、把“session.gc_maxlifetime”设置为和“session.cookie_lifetime”一样的时间;

在PHP的文档中明确指出,设定session有效期的参数是session.gc_maxlifetime。可以在php.ini文件中,或者通过ini_set()函数来修改这一参数。

PHP 使用 +1month、-1month 的问题

https://blog.csdn.net/qq_32737755/article/details/92690573

经常会有人被strtotime结合-1 month, +1 month, next month的时候搞得很困惑, 然后就会觉得这个函数有点不那么靠谱, 动不动就出问题. 用的时候就会很慌…

比如 2018-07-31 这天执行代码:

1
date("Y-m-d",strtotime("-1 month"))

怎么输出是的2018-07-01? 上个月的最后一天不应该是2018-06-30吗?

我们来模拟下date内部的对于这种事情的处理逻辑:

1
2
1. 先做-1 month, 那么当前是07-31, 减去一以后就是06-31.
2. 再做日期规范化, 因为6月没有31号, 所以就好像2点60等于3点一样, 6月31就等于了7月1

怎么办

只用每月1号处理

从PHP5.3开始呢, date新增了一系列修正短语, 来明确这个问题, 那就是”first day of” 和 “last day of”, 也就是你可以限定好不要让date自动”规范化”:

1
2
3
4
var_dump(date("Y-m-d", strtotime("last day of -1 month", strtotime("2017-03-31"))));
//输出2017-02-28
var_dump(date("Y-m-d", strtotime("first day of +1 month", strtotime("2017-08-31"))));
输出2017-09-01

vpn CONNECT方法

https://www.cnblogs.com/xyl1932432873/p/7735866.html

CONNECT这个方法的作用就是把服务器作为跳板,让服务器代替用户去访问其它网页,之后把数据原原本本的返回给用户。这样用户就可以访问到一些只有服务器上才能访问到的网站了,这就是HTTP代理。

假如我想通过代理访问这个博客(www.web-tinker.com),我就需要建立一个TCP连接,连接到服务器监听的那个端口,然后给服务器发送一个HTTP头。下面就是这个HTTP头的内容:

1
2
3
4
5
CONNECT www.web-tinker.com:80 HTTP/1.1
Host: www.web-tinker.com:80
Proxy-Connection: Keep-Alive
Proxy-Authorization: Basic *
Content-Length: 0

所有的HTTP头都是类似的,第一行是方法名、主要参数、HTTP版本。接着一行一个参数,最后用两个换行来结束。这个地方应该填写验证的用户名和密码。

发送完这个请求之后,就是服务器端响应请求了。如果用户名和密码验证通过,就会返回一个状态码为200的响应信息。虽然状态码是200,但是这个状态描述不是OK,而是Connection Established。

1
HTTP/1.1 200 Connection Established

如果用户名和密码验证不通过。会返回一个407的状态码,状态表述是Unauthorized。表示没有权限访问代理服务器。

1
HTTP/1.1 407 Unauthorized

验证通过之后,我们就可以做普通的HTTP操作了。完全可以把现在的代理服务器看作是请求连接的Internet服务器,也就是说可以像直接访问普通的服务器一样,使用GET、POST等方法来请求Internet服务器上的页面了。我们在发送CONNECT请求的时候就已经告诉了服务器我们需要访问的Internet服务器,上面我用了这个博客的网址。现在我们要访问这个博客的主页就可以发送一个简单的GET请求。

1
2
3
GET / HTTP/1.1
Host: www.web-tinker.com
Content-Length: 0