首页
关于
归档
朋友
壁纸
留言
API平台
告白墙
更多
休闲游戏
留言板
练字贴
Layui手册
Search
1
【PHP】PHPoffice/PHPSpreadsheet读取和写入Excel
1,339 阅读
2
【Git】No tracked branch configured for branch master or the branch doesn't exist.
1,039 阅读
3
【Layui】控制页面元素展示隐藏
859 阅读
4
【composer】composer常用命令
787 阅读
5
【PHP】PHP实现JWT生成和验证
769 阅读
默认分类
PHP
ThinkPHP
Laravel
面向对象
设计模式
算法
基础
网络安全
Web
HTML
CSS
JavaScript
jQuery
Layui
VUE
uni-app
Database
MySQL
Redis
RabbitMQ
Nginx
Git
Linux
Soft Ware
Windows
网赚
Go
登录
Search
标签搜索
PHP
函数
方法
类
MySQL
ThinkPHP
OOP
JavaScript
Layui
Web
Linux
Array
设计模式
Git
PHPSpreadsheet
PHPoffice
排序算法
基础
面试题
Windows
小破孩
累计撰写
223
篇文章
累计收到
33
条评论
首页
栏目
默认分类
PHP
ThinkPHP
Laravel
面向对象
设计模式
算法
基础
网络安全
Web
HTML
CSS
JavaScript
jQuery
Layui
VUE
uni-app
Database
MySQL
Redis
RabbitMQ
Nginx
Git
Linux
Soft Ware
Windows
网赚
Go
页面
关于
归档
朋友
壁纸
留言
API平台
告白墙
休闲游戏
留言板
练字贴
Layui手册
搜索到
29
篇与
的结果
2022-06-23
【PHP】$_SERVER详解
## $_SERVER详解 ## > 以 "http://local.sdd.com/public/index.php/fast" 这个地址为例; $_SERVER['SCRIPT_NAME']; //当前脚本的路径 /public/index.php dirname($_SERVER['SCRIPT_NAME']); //dirname() 返回路径中的目录部分 /public $_SERVER['SCRIPT_FILENAME']; //当前脚本执行的绝对路径 D:/phpstudy_pro/WWW/sdd/public/index.php $_SERVER['HTTP_HOST']; //获取当前域名 local.sdd.com $_SERVER['SERVER_NAME']; //输出配置文件httpd.conf中的ServerName,一般情况下与HTTP_HOST值相同 local.sdd.com $_SERVER['SystemRoot']; //当前服务器的操作系统的目录 C:\WINDOWS $_SERVER['SERVER_SOFTWARE']; //服务器软件配置信息 Apache/2.4.39 (Win64) OpenSSL/1.1.1b mod_fcgid/2.3.9a mod_log_rotate/1.02 $_SERVER['SERVER_PORT']; //服务器端口 80 $_SERVER['REMOTE_PORT']; //用户连接到服务器时所使用的端口 58222 $_SERVER['SERVER_ADDR']; //服务器的ip地址 127.0.0.1 $_SERVER['REMOTE_ADDR']; //浏览网页的用户ip。 127.0.0.1 $_SERVER['DOCUMENT_ROOT']; //当前运行脚本所在的根目录 D:/phpstudy_pro/WWW/sdd $_SERVER['REQUEST_SCHEME']; //服务器通信协议,是http或https。 http $_SERVER['SERVER_ADMIN']; //服务器管理员信息 admin@example.com $_SERVER['REQUEST_METHOD']; //请求数据的方式 GET $_SERVER['REQUEST_URI']; //当前脚本路径,根目录之后的目录 /public/index.php/fast $_SERVER['PHP_SELF']; //当前正在执行脚本的文件名 /public/index.php/fast $_SERVER['REQUEST_TIME']; //得到请求开始时的时间戳。 1616986524 $_SERVER['HTTP_COOKIE']; //获取浏览器的cookie信息。 authId=u%2B4BNnh9IsFDM%2BM%7C1617241258%7C7b4GM396cJIXMeM%2BS3v0tszZx%2FKx; shownum=10 $_SERVER['HTTP_CONNECTION']; //当前请求的连接情况 close $_SERVER['HTTP_USER_AGENT']; //获取用户相关信息,包括用户浏览器、操作系统等信息 Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36 $_SERVER['HTTP_ACCEPT']; //当前请求的ACCEPT头部信息 text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 $_SERVER['HTTP_ACCEPT_LANGUAGE']; //返回用户默认的语言设置,后面的q值表示用户对该语言的喜好程度 zh-CN,zh;q=0.9
2022年06月23日
164 阅读
0 评论
0 点赞
2022-06-21
【PHP】GET和POST传输方式的区别
Get方式是从服务器上获取数据,在数据查询时,建议用Get方式;如商品信息接口、搜索接口等Post方式是向服务器传送数据,做数据添加、修改或删除时,建议用Post方式,如登录注册接口等。1、GET是用来从服务器上获取数据,而POST是用来向服务器上传递数据。2、GET将表单中数据按照variable=value的形式,添加到action所指向的URL后面,并且两者使用“?”连接;而各个变量之间用“&”连接。POST是将表单中的数据放在FORM数据体中,按照变量和值相对应的方式,传递到Action指向的URL中。3、GET是不安全的,因为在传输过程,数据被放在请求的URL中,而如今很多服务器或代理服务器会把请求的URL放到日志文件中,这样会有一些隐私信息会被第三方看到。另外,用户也可以在浏览器上直接看到提交的数据,一些系统内部消息会一同显示在用户面前。POST的所有操作对用户来说是不可见的。4、GET传输的数据量小,主要是受URL长度限制,而POST可以传输大量数据,所以上传文件只能使用POST。5、GET限制FORM表的数据集的值必须为ASCII字符,而POST支持整个ISO10646字符集。Post和Get的区别:1)Get请求只是简单的获取数据,不修改请求的资源;而POST请求会修改请求的资源。导致的后果说相同的GET请求能获取相同的资源,而POST不能保证获取相同的资源。2)GET请求的参数在HTTP中是通过URL传递的,而POST请求的数据是通过requestbody传递的。3)GET请求资源在服务器上能够缓存,POST请求就不能够了。4)GET请求的参数的数据长度是有限制的,而POST请求的数据长度没有限制。5)GET请求无法传递二进制数据到服务器上,而POST可以。1、GET参数通过URL传递,POST放在REQUEST BODY中。2、GET请求在URL中传递是有长度限制的,而POST没有。3、GET比POST更不安全,因为参数直接暴露在URL中,所以不能传递敏感信息。4、GET请求只能进行URL编码,而POST支持多种编码方式。5、GET请求参数会完整保留在浏览器历史记录中,而POST中的参数不会被保留。Get和POST请求有什么区别?1、get比post更不安全2、get传输的数据长度比post小3、get通过在URL后拼接字符串的形式传递参数,post将参数放在RequestBody中4、get产生一个TCP数据包;post产生两个TCP数据包。(get会把 httpheader 和 data 一起发送给服务器,服务器会响应200,post会先把httpheader发送给服务端,服务端响应100,提示客户端继续发送。浏览器接着发送data给服务端。最终服务端响应200)5、get请求可以被缓存起来,post不行
2022年06月21日
211 阅读
0 评论
0 点赞
2022-06-21
【PHP】好用的PHP函数集合-在线版
string函数:http://www.w3school.com.cn/php/php_ref_string.asp array函数:http://www.w3school.com.cn/php/php_ref_array.asp 日期函数:http://www.w3school.com.cn/php/php_ref_date.asp 日历函数:http://www.w3school.com.cn/php/php_ref_calendar.asp 目录函数:http://www.w3school.com.cn/php/php_ref_directory.asp 数学函数:http://php.net/manual/zh/ref.math.php
2022年06月21日
175 阅读
0 评论
0 点赞
2022-06-19
【PHP】PHP生成唯一ID
<?php header("Content-Type: text/html; charset=UTF-8"); date_default_timezone_set("PRC"); // error_reporting(0); // 生成ID:Unix时间戳+毫秒+微妙+四位随机数字(20位数字,2028/06/15 前可存入MySQL,数据类型:BIGINT) $id = microtime(); $id = substr($id, 11) . substr($id, 2, 6) . mt_rand(1000, 9999); //循环里面可用 public function setUUID(){ $currentTimestamp = microtime(true); $uuid = self::generateUUIDInner(); while (in_array($uuid, self::$generatedUUIDs)) { $uuid = self::generateUUIDInner(); } self::$generatedUUIDs[] = $uuid; self::$lastTimestamp = $currentTimestamp; return $uuid; } private static function generateUUIDInner() { $milliseconds = floor(microtime(true) * 1000); $randomPart = mt_rand(100, 999); $uuid = date('YmdHis').substr(strval($milliseconds), -3).$randomPart; return $uuid; echo "Generated UUID inside: ".$uuid."\n"; die; }
2022年06月19日
193 阅读
0 评论
0 点赞
2022-06-19
【PHP】PHP接口返回数据格式
/** * @Author: 小破孩嫩 * @Email: 3584685883@qq.com * @Time: 2020/9/30 16:35 * @param $code 状态码 * @param string $msg 提示信息 * @param array $data 数据 * @Description:返回标格式 */ function returnResponse ($code,$msg = '',$data=array()){ $retData = array( 'code' => $code, 'message' => $msg, 'data' => $data?$data:'', ); #错误时不显示data if($code != 200){ unset($retData['data']); } header('Content-Type:application/json; charset=utf-8'); exit(json_encode($retData,JSON_UNESCAPED_UNICODE)); } public function show($code = '', $message = '', $result = '', $httpCode = 200){ $data = [ 'code' => $code, 'message' => $message, 'result' => $result, ]; if(empty($data['result'])){ unset($data['result']); } return json($data,$httpCode); }这个方法只是code值在200的时候才会有返回data;
2022年06月19日
121 阅读
0 评论
0 点赞
2022-06-19
【PHP】基于RBAC模式解决权限管理
本文以最简单逻辑解释什么是rbac模式本文全是个人理解,如有不恰当的地方,请指出,互相学习RBAC(Role-Based Access Control)权限模型的概念,即:基于角色的权限控制。通过角色关联用户,角色关联权限的方式间接赋予用户权限。1.创建最基本的三个表,即 人员表(admin),角色表(role),功能表(func),和一个扩展人员权限表(admin_func)人员表:必有得字段(role_id)角色表:必有的字段(func_ids)人员扩展权限表:必有得字段(admin_id,func_ids)2.整体思路用户登录,查人员表数据,获取到角色唯一标志(这里是id)通过角色唯一标记,获取权限(这里角色里面的func_ids里面的数据通常是逗号隔开的字符串,我们在业务逻辑上处理时,转换成数组比较好处理)用户操作任意一个功能,获取到该功能的 控制器 和 方法 去功能表里查获取到id获取到的id判断是不是在上一步查的角色所对应的func_ids里面3.特殊情况如果在一个公司内,举个例子,在同一个公司有两个销售部(a部门,b部门),两个销售部的领导都是有一样的权限的(角色是一样的),这个时候,公司高层决定,a部门的领导为总领导,可以查看b部门的数据,这个时候,都知道,a和b的部门领导角色不能修改,一种笨方法,在开一个账号,分配角色和权限,可以查看b部门的数据,这样不符合工作逻辑,对领导不友好,下面就有了扩展人员权限在扩展人员表里绑定人员id和对应的功能表的id这样在我们操作的时候就多了一个步骤,多查一个表(admin_func),获取到的数据在和角色里面的权限进行合并,在做后面业务逻辑操作4.在什么位置实现权限在你看来怎么方便怎么实现,最好的就在中间件里实现权限验证,可以有效的降低无效访问中间件的主要应用场景可以包括对HTTP请求的数据过滤、权限检测、请求拦截等行为,使用中间件能够让控制器的定义更加简单,很多额外的非核心业务流程的处理都可以交给中间件执行。补充: 在实际的代码逻辑中应该避免用if else 判断不同角色查看同一接口返回不同的数据,不同的角色应该在权限理固定好访问接口。这里面需要更多的绑定关系。
2022年06月19日
160 阅读
0 评论
0 点赞
2022-06-19
【PHP】PHP易混淆函数区别(面试题常见)
1、echo、print、print_r/var_dump的区别 echo():可以一次输出多个值,多个值用逗号隔开,echo是语言结构,而并不是真正的函数,因此不 能作为表达式的一部分使用。 print():打印一个值(它的参数),如果字符串成功显示则返回true,否则返回false print_r():可以把字符串和数字简单地打印出来,而数组则以括起来的键和值得列表形式显示,并以Array开头 var_dump():判断一个变量的类型与长度,并输出变量的数值,如果变量有值输的是变量的值并回返数据类型。此函数显示关于一 个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。2、include、include_once、require、require_once的区别 include():使用include应用外部文件时,只有代码执行到include语句时,外部文件才会被引入并读取,当所引用的外部文件 发生错误时,系统只给出一个警告,而整个php文件则继续向下执行。 include_once():使用include_once语句会在导入文件前先检测该文件是否在该页面的其他部分被应用过,如果有,则不会重复 引用该文件,程序只能引用一次。 require():使用require语句来调用文件时,如果调用的文件没找到,require语句会输出错误信息,并且立即终止脚本处理 require_once():使用require_once语句时,会先检查要引用的文件是不是已经在该程序中的其他地方被引用过,如果有,则不 会在重复调用该文件,在同一个页面中引用了两个相同的文件,那么在输出时,只有第一个文件被执行,第二次引用的文件 则不会被执行。3、empty、isset、is_null的区别 empty:如果 var 是非空或非零的值,则 empty() 返回 FALSE。换句话说,""、0、"0"、NULL、FALSE、array()、var $var; 以及没有任何属性的对象都将被认为是空的,如果 var 为空,则返回 TRUE isset: 检测变量是否设置;如果 var 存在则返回 TRUE,否则返回 FALSE。如果已经使用 unset() 释放了一个变量之后,它 将不再是 isset()。若使用 isset() 测试一个被设置成 NULL 的变量,将返回 FALSE。 is_null:当参数满足下面三种情况时,将返回TRUE,其它的情况就是FALSE。 * 它被赋值为NULL * 它还没有赋值 * 它未定义,相当于 unset(),将一个变量 unset()后,不就是没有定义吗 $myvar = NULL; var_dump(is_null($myvar)); // TRUE $myvar1; var_dump(is_null($myvar1)); // TRUE Notice: Undefined variable $num = 520; unset($num); var_dump(is_null($num)); //TRUE Notice: Undefined variable var_dump(is_null($some_undefined_var)); //TRUE Notice: Undefined variable $myvar = 0; is_null($myvar); // FALSE $myvar = FALSE; is_null($myvar); // FALSE $myvar = ''; is_null($myvar); // FALSE4、双引号和单引号的区别一般情况下两者是通用的.但双引号内部变量会解析,单引号则不解析.双引号中的变量和特殊字符 (\r\n) 会被转义,单引号中的内容不会被转义5、session和cookie的区别(1)cookie数据存放在客户的浏览器上,session数据放在服务器上。 (2)cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session。 (3)单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。 (4)session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能 考虑到减轻服务器性能方面,应当使用COOKIE6、get和post的区别(1)GET请求,请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数用&连接; (2)POST请求:POST请求会把请求的数据放置在HTTP请求包的包体中。 (3)GET请求在URL中传送的参数是有长度限制的,而POST没有。 (4)POST相对于GET更加安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。7、传值与传引用的区别传值:把实参的值赋值给形参,对形参的修改不会影响到实参的值 传引用:真正的以地址的方式传递参数,传递以后,行参和实参都是同一个对象,对行参的修改将影响实参的值 8、==和===的区别、“!==”与“!=”的区别===比较两个变量的值和类型;==比较两个变量的值,不比较数据类型。9、->和=>的区别->用来引用对象的成员(属性与方法) =>只用来数组赋值10、?? 与 ?:区别?? :用于判断并赋值,先判断当前变量是否为null,如果是就可以赋一个新值 ?:常用于三元运算符,问号的作用是选择条件作为程序继续执行的分支11、跳出循环:exit、return、break、continue之间的区别 exit:用来结束程序执行的。可以用在任何地方,本身没有跳出循环的含义。 return: (1)从当前的方法中退出,返回到该调用的方法的语句处,继续执行。 (2)返回一个值给调用该方法的语句,返回值的数据类型必须与方法的声明中的返回值的类型一致。 (3)return 后面也可以不带参数,不带参数就是返回空,其实主要目的就是用于想中断函数执行,返回调用函数处。 break: (1)当它在循环体内,强行结束循环的执行,也就是结束整个循环过程,不在判断执行循环的条件是否成立,直接转 向循环语句下面的语句。 (2)当它出现在循环体中的switch语句体内时,其作用只是跳出该switch语句体。 continue:终止本次循环的执行,即跳过当前这次循环中continue语句后尚未执行的语句,接着进行下一次循环条件的判断。12、function_exists、method_exists、class_exists、property_exists、is_subclass_of 的区别 function_exists( string $function_name ) : 函数用于检测函数是否被定义,检测的函数可以是 PHP 的内置函数,也可以 是用户的自定义函数。如果被检测的函数存在则返回 TRUE ,否则返回 FALSE 。 method_exists ( mixed $object , string $method_name ) :检查类的方法是否存在于指定的 object中。如果检测的方法存 在与指定的对象中,则返回true,否则返回false。 class_exists ( string $class_name [, bool $autoload = TRUE ] ) :检查类是否被定义。第一个参数为检测的类名(如果 使用了命名空间后,需要使用完整的带命名空间的类名,如:app\admin\service\UserService ); class_exists()会默认将 会尝试调用 _autoload,如果不想让 class_exists() 调用_autoload,可以将 autoload 参数设为 FALSE。 property_exists([mixed] $class,string $property):判断类或对象中的属性是否存在(可无视属性权限),存在返回true, 否则返回false,$class 可以是类名(字符串)或类对象,$property为属性的名字 is_subclass_of ( object $object , string $class_name ):判断一个对象是否为一个类的子类,返回bool值13、PHP四种网页重定向方式 header('location:http://www.baidu.com'); echo '<meta http-equiv="refresh" content="1;http://www.baidu.com">'; echo '<script>window.location.href="http://www.baidu.com"</script>'; echo file_get_contents('http://www.baidu.com');14、php三种合并数组的方式 array_merge($arr, $arr_1); // 合并数组,如果健名为整数,键名会从 0 开始进行重新索引。 array_merge_recursive($arr, $arr_1); // 递归合并数组,不会进行键名覆盖,而是将多个相同键名的值递归组成一个数组 $arr + $arr_1 // 保留键名,追加数组转载:https://www.kancloud.cn/chunyu/php_basic_knowledge/767174
2022年06月19日
164 阅读
0 评论
0 点赞
2022-06-17
【PHP】PHP函数大全
PHP函数大全有道云地址:http://note.youdao.com/noteshare?id=f1271100f4366b0338e9a45b8bbd4db7&sub=0DA577EC658B4923A67FA4EB862D2FDA
2022年06月17日
141 阅读
0 评论
0 点赞
2022-06-17
【PHP】PHP常见header头
//200 正常状态 header('HTTP/1.1 200 OK'); // 301 永久重定向,记得在后面要加重定向地址 Location:$url header('HTTP/1.1 301 Moved Permanently'); // 重定向,其实就是302 暂时重定向 header('Location: http://www.maiyoule.com/'); // 设置页面304 没有修改 header('HTTP/1.1 304 Not Modified'); // 显示登录框, header('HTTP/1.1 401 Unauthorized'); header('WWW-Authenticate: Basic realm="登录信息"'); echo '显示的信息!'; // 403 禁止访问 header('HTTP/1.1 403 Forbidden'); // 404 错误 header('HTTP/1.1 404 Not Found'); // 500 服务器错误 header('HTTP/1.1 500 Internal Server Error'); // 3秒后重定向指定地址(也就是刷新到新页面与 <meta http-equiv="refresh" content="10;http://www.maiyoule.com/ /> 相同) header('Refresh: 3; url=http://www.maiyoule.com/'); echo '10后跳转到http://www.maiyoule.com'; // 重写 X-Powered-By 值 header('X-Powered-By: PHP/5.3.0'); header('X-Powered-By: Brain/0.6b'); //设置上下文语言 header('Content-language: en'); // 设置页面最后修改时间(多用于防缓存) $time = time() - 60; //建议使用filetime函数来设置页面缓存时间 header('Last-Modified: '.gmdate('D, d M Y H:i:s', $time).' GMT'); // 设置内容长度 header('Content-Length: 39344'); // 设置头文件类型,可以用于流文件或者文件下载 header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="example.zip"'); header('Content-Transfer-Encoding: binary'); readfile('example.zip');//读取文件到客户端 //禁用页面缓存 header('Cache-Control: no-cache, no-store, max-age=0, must-revalidate'); header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); header('Pragma: no-cache'); //设置页面头信息 header('Content-Type: text/html; charset=iso-8859-1'); header('Content-Type: text/html; charset=utf-8'); header('Content-Type: text/plain'); header('Content-Type: image/jpeg'); header('Content-Type: application/zip'); header('Content-Type: application/pdf'); header('Content-Type: audio/mpeg'); header('Content-Type: application/x-shockwave-flash'); //.... 至于Content-Type 的值 可以去查查 w3c 的文档库,那里很丰富
2022年06月17日
173 阅读
0 评论
0 点赞
1
2