php基础
精神小伙2号
这个作者很懒,什么都没留下…
展开
-
php安装扩展
windows:1、下载2、放到D:\wamp64\bin\php\php7.3.1\zend_ext,注意是zend_ext文件夹3、改配置文件:[xdebug]zend_extension="d:/wamp64/bin/php/php7.3.1/zend_ext/php_xdebug-3.0.4-7.3-vc15-x86_64.dll";xdebug.remote_enable = off;xdebug.profiler_enable = off;xdebug.profile.原创 2021-09-16 20:14:22 · 496 阅读 · 0 评论 -
php命令注入
1、建立白名单,限制指定输入参数或者命令2、正则,例如ip、字母数字下滑线、数字3、密码、文件名特殊符号直接强制过滤$param = str_replace(array('..','/','\\','|', '&', ';'), array('', '', '', '', '', ''), $param);4、参数用escapeshellarg包裹,整体命令用escapeshellcmd包裹。不过escapeshellcmd好像用的不多escapeshellarg作用:给参数加引号,存.原创 2021-09-06 20:12:49 · 325 阅读 · 1 评论 -
关于换行符\n、\r、\r\n和<br>
结论:1、文本换行时候用PHP_EOL就好了。防止出现各种bug2、网页换行用<br>原创 2021-07-23 12:10:02 · 406 阅读 · 0 评论 -
php生成唯一id
方法一:md5(uniqid(mt_rand(), true))方法二:雪花算法原创 2021-07-14 09:55:29 · 129 阅读 · 0 评论 -
关于php的memory_limit
<?php//memory_limit //内存设置//memory_get_usage //当前分配给你的 PHP 脚本的内存量//memory_get_peak_usage //返回分配给你的 PHP 脚本的内存峰值字节数ini_set('memory_limit', '10240M');echo "开始<br>"; // 36640echo convert(memory_get_usage()) . "<.原创 2021-04-30 11:10:54 · 545 阅读 · 0 评论 -
php一些奇怪问题的答案
1、浏览器关闭后,php代码还会继续进行吗?答:会。但ignore_user_abort函数可以改变这个答案,具体没试2、php代码执行时修改php代码,结果会改变吗?答:不会。测试了下,确实不会原创 2021-04-29 17:20:26 · 64 阅读 · 0 评论 -
修复bug的原则
某些能稳定复现的操作bug:1、代码git版本、测试服ip准备2、入参、导入文件准备3、发request,尝试第一次复现4、返回值json、返回提示记录5、error.log、console.log、php_error.log等相关日志获取6、熟悉代码大致流程7、关键部位返回值/生成文件打日志断点,可以用二分法8、逐步缩小范围,打日志断点9、定位错误并找到错误原因10、出解决方案,不确定的跟同事沟通11、改完、自测、再想想有没不合理12、去掉各种断点,提交代码.........原创 2021-04-22 20:45:50 · 319 阅读 · 0 评论 -
php使用debug_backtrace函数分析代码
php使用debug_backtrace函数分析代码,特别是框架代码,很好用function miniDebugTrace($limit = 10){ $ret = array(); $trace = debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT, $limit); array_shift($trace); foreach ($trace as $line) { $ret[] = array(//原创 2021-04-21 16:37:15 · 125 阅读 · 0 评论 -
rc4加密
rc4加密:/** * rc4加密算法 * $pwd 密钥 * $data 要加密的数据 */function rc4($pwd, $data){ $key[] = ""; $box[] = ""; $cipher = ''; $pwd_length = strlen($pwd); $data_length = strlen($data); for ($i = 0; $i < 256; $i++) { $ke原创 2021-04-20 17:32:56 · 127 阅读 · 0 评论 -
php文件锁
非阻塞模式在windows下是无效的,必须使用linux、mac系统// 阻塞模式$fp = fopen("lock.txt", "r");if($fp && flock($fp,LOCK_EX)){ //..处理订单}flock($fp,LOCK_UN);fclose($fp);// 非阻塞模式$fp = fopen("lock.txt", "r");if($fp && flock($fp,LOCK_EX | LOCK_NB)){ //..处.原创 2021-03-18 19:51:44 · 363 阅读 · 0 评论 -
关于服务层service
简单粗暴的总结来说,如果你的某个业务逻辑,需要用到多个model,就放到service层里面去,如果只是这个model自己的事,跟其它的model没有任何关系,就放到model里面就好。总之:开心就好资料:是否有必要服务层...原创 2021-03-18 10:26:50 · 148 阅读 · 0 评论 -
关于 open_basedir的报错
PHP message: PHP Warning: require(): open_basedir restriction in effect.资料地址报错意思是:require的路径被限制了,所以可以先注释掉相关的限制来解决,具体有什么用后续有时间再研究吧原创 2021-03-12 11:35:55 · 121 阅读 · 0 评论 -
关于返回json的字段类型问题
总的来说:作为数据提供方,我会考虑在输出 JSON 以前,加强制类型转换。特别是文档已经明确标注类型的情况下。作为数据接受方,我也会先做数据整形,再处理。结论:先不统一,有问题了再友好协商。一定要改的话,要么pdo统一配置,要么一个一个的转了...原创 2021-02-25 19:31:10 · 117 阅读 · 0 评论 -
array_spilce函数指定位置插入元素
$a = [1,2,4,5];array_splice($a,2,0,3);print_r($a);// [1,2,3,4,5]//注意:只能处理索引数组,并且索引会重排原创 2021-02-24 17:56:11 · 114 阅读 · 1 评论 -
php通过...传函数参数
例1,参数个数不确定:function sum(...$numbers) { $acc = 0; foreach ($numbers as $n) { $acc += $n; } return $acc;}echo sum(1, 2, 3, 4); //10例2,参数个数确定,但想换种传参方式:function add($a, $b, $c){ return $a + $b + $c;}$num=[2, ...转载 2021-02-02 10:43:55 · 66 阅读 · 0 评论 -
php的sprintf函数笔记
sprintf这个函数,特殊写法写起来蛮奇怪,做个笔记%4$s这个$a = sprintf('select %4$s,count(id) as cnt from %s c left join %s s on c.id = s.id where %s and s.%4$s != 0 group by %4$s', 'aa', 'aa222222', 'aa222222433333333', 'aa22222255555');echo $a;//select aa22222255555,cou原创 2021-01-19 16:54:17 · 179 阅读 · 0 评论 -
php知识结构
1、html(div+css)2、js、jquery(选择器、dom操作)3、php基本语法4、php进阶 文件上传 文件操作 目录操作 命名空间 restful rpc 垃圾回收机制 扩展开发 php-fpm工作原理 php常驻 面向对象 设计模式 5、mysql与pdo、postgre sql case...when 存储过程 函数 postgre sql...原创 2021-01-16 15:09:59 · 455 阅读 · 0 评论 -
用php的ZipArchive来生成压缩文件
应用场景:如果导出数据有100万条,超过excel限制。则可以分批产生多个文件,然后打包压缩原创 2020-12-30 10:07:27 · 351 阅读 · 0 评论 -
php利用supervisor和redis的brpop来实现消息队列
1原创 2020-12-30 10:03:38 · 489 阅读 · 0 评论 -
用php的xhprof_enable来监控性能
11原创 2020-12-30 10:02:49 · 112 阅读 · 0 评论 -
curl上传图片问题,php版本导致
php5.5及以下写法:'imageFile' => '@' . realpath($fileName),php5.6及以上写法:'imageFile' => new \CURLFile(realpath($fileName)),最终方案:if (class_exists('\CURLFile')) { $field = array('fieldname' => new \CURLFile(realpath($filepath)));} else { .原创 2020-11-24 17:37:14 · 117 阅读 · 0 评论 -
简单单点登录
问题:同一个主域名,不同子域名。例如xw.xinwen.com和zgl.xinwen.com,登录了一个,另一个不需要再登录思路:实现cookie共享即可解决:setcookie($key, $value, $exp_time, '/', '.xinwen.com'); //注意 「.xinwen.com」里面的 「.」效果:...原创 2020-11-11 14:14:31 · 69 阅读 · 0 评论 -
php操作文件相关的函数
temefile与tempnam两者区别:1、tempnam创建文件后不会自动删除,需要手工删除;tempfile创建文件会在释放句柄fclose()调用时被自动删除。2、tempname可以指定创建路径,而temefile不可以。原创 2020-11-03 17:41:10 · 142 阅读 · 0 评论 -
记php curl一次奇怪的报错
报错:Peer certificate cannot be authenticated with known CA certificates但是url输入到浏览器又能正确请求。解决办法,改成如下:CURLOPT_SSL_VERIFYPEER => false // 禁止 cURL 验证对等证书(peer’s certificate),双方服务器时间不一致可能导致这个问题...原创 2020-06-01 13:46:27 · 266 阅读 · 0 评论 -
简述下php的垃圾回收机制
简单描述:php中的变量存储在变量容器zval中(c结构体),zval中除了存储变量类型和值外,还有is_ref和refcount字段。refcount表示指向变量的元素个数,is_ref表示变量是否有别名。如果一个zval的refcount增加,它将继续被使用,当然就不再垃圾中。如果refcount减少为0时,就回收该变量容器,不属于垃圾。如果一个zval的refcount减少到非零时(这里包含循环引用的zval),它可能是垃圾,就会进入垃圾缓冲区。当缓冲区达到最大值后,回收算法会循环遍历zval,判断其原创 2020-05-20 11:50:56 · 551 阅读 · 0 评论 -
preg_replace与preg_replace_callback
// preg_replace// 删除空格$str = 'runo o b';$str = preg_replace('/\s+/', '', $str);// 将会改变为'runoob'echo $str;// preg_replace_callback// 将文本中的年份增加一年.$text = "April fools day is 04/01/2002\n";$text.= "Last christmas was 12/24/2001\n";// 回调函数functi.原创 2020-05-19 11:35:12 · 295 阅读 · 0 评论 -
php常见的魔术方法
__construct:每次创建新对象时先调用此方法,所以非常适合在使用对象之前做一些初始化工作__destruct:对象的所有引用被null、被显式销毁、对象用完时执行。(1 对象被null、2 对象被unset、3 对象用完自动触发。注:对象包含其引用)__get:在给不可访问属性赋值时(不可访问:不存在或者访问权限不够)__set:读取不可访问属性的值时__call:在对象中调用一个不可访问方法时调用__clone:当复制完成时,则新创建的对象(复制生成的对象)中的 __clone() 方.原创 2020-05-18 16:13:14 · 260 阅读 · 0 评论 -
strpos函数的坑
$a = '111111,222222';$b = 222;// $b = strval($b);var_dump(strpos($a, $b));// false函数使用注意,传入变脸需转成字符串原创 2020-02-21 21:40:05 · 156 阅读 · 0 评论 -
几种常见的content-type
content-type作用: 在请求中 (如POST 或 PUT),客户端告诉服务器实际发送的数据类型 在响应中,Content-Type标头告诉客户端实际返回的内容的内容类型,从而进行相应处理1、Content-Type 的值类型: 1.1 application/json:消息主体是序列化后的 JSON 字符串 1.2 application/x-ww...原创 2019-11-20 10:27:40 · 1437 阅读 · 0 评论 -
$_POST 与 php://input、HTTP_RAW_POST_DATA
总结:当 HTTP POST 请求的 Content-Type 是application/x-www-form-urlencoded:php://input 中是形同 a=1&b=2的原始数据。$_POST 中是关联数组(常规的post表单提交、ajax默认post提交) 提交表单时。enctype="multipart/form-data"的时候php://input是无效...原创 2019-11-20 10:14:50 · 364 阅读 · 0 评论 -
php单例模式
单例模式在PHP中的应用场合:(1)、应用程序与数据库交互,避免每次都要连接数据库(2)、控制配置信息,如果系统中需要有一个类来全局控制某些配置信息, 那么使用单例模式可以很方便的实现php单例模式针对单次页面级请求PHP每次执行完页面都是会从内存中清理掉所有的资源。因而PHP中的单例实际每次运行都是需要重新实例化的, 这样就失去了单例重复实例化的意义了。单单从这个方面来说, PH...转载 2018-07-26 18:01:45 · 237 阅读 · 0 评论 -
关于RESTful API
REST风格的接口,这样的词汇总是出现在耳边,然后又没有完全的理解。咱们不解释REST是哪几个单词的首字母,说了也不知道,翻译成中文就是表现层状态转移,我是弄不懂。知乎大神Ivony有句话说的好:URL定位资源,用HTTP动词(GET,POST,DELETE,DETC)描述操作。在设计web接口的时候,REST主要是用于定义接口名,接口名一般是用名次写,不用动词,那怎么表达“获取”或...转载 2018-08-01 11:13:55 · 109 阅读 · 0 评论 -
URI与URL含义及区别
URI 是统一资源标示符,可以唯一标识一个资源。URL 是统一资源定位符,可以提供找到该资源的路径。 大白话,就是URI是抽象的定义,不管用什么方法表示,只要能定位一个资源,就叫URI本来设想的的使用两种方法定位:1,URL,用地址定位;2,URN 用名称定位。举个例子:去村子找个具体的人(URI),如果用地址:某村多少号房子第几间房的主人 就是URL, 如果用身份证号+名...转载 2018-08-01 11:30:23 · 420 阅读 · 0 评论 -
curl调用接口报错 Protocol http not supported or disabled in libcurl
用curl 调用外部接口 报错Protocol http not supported or disabled in libcurl怎么调试也找不到问题,最后查看代码发现竟然是url配置中http前多了一个空格。转载 2018-08-14 17:27:09 · 250 阅读 · 0 评论 -
global关键字
php变量作用域:在所有函数外部定义的变量,拥有全局作用域global;在函数内部定义的变量用于局部作用域local。全局变量可以被脚本的任何位置访问,但在函数内部访问全局变量要使用global关键字(所以说好的全局作用域呢?)。而局部变量只能在函数内部进行访问。在函数体内定义的global变量,函数体外可以使用。在函数体外定义的global变量不能在函数体内使用。并且不能在用global声明...原创 2018-08-13 11:54:08 · 1451 阅读 · 0 评论 -
用位运算标记状态
最多32个状态,但是足矣。为什么是32?int通常最大值是大约二十亿(32 位有符号),即2^320x00000001 换成2进制 0b0001 0x00000002 换成2进制 0b00100x00000004 换成2进制 0b01000x00000008 换成2进制 0b10000x000000100x000000200x...原创 2018-08-17 09:52:06 · 1170 阅读 · 0 评论 -
in_array函数漏洞
#以下,'7eee'被强制转换成整型 7var_dump(in_array('7eee', [1, 2, 7, 9]));//true#如果第三个参数设置为 true,函数只有在元素存在于数组中且数据类型与给定值相同时才返回 true。var_dump(in_array('7eee', [1, 2, 7, 9], true));//false同理:$v = in_array(0...原创 2018-08-28 09:32:43 · 2534 阅读 · 0 评论 -
关于mac环境下php代码无法解析的问题
1.在终端中运行“sudo vi /etc/apache2/httpd.conf”,打开Apache的配置文件。2.找到“#LoadModule php5_module libexec/apache2/libphp5.so”,把前面的#号去掉,保存(wq!)3.运行“sudo apachectl restart”,重启Apache,这样PHP就可以用了...原创 2018-08-29 12:38:01 · 1153 阅读 · 0 评论 -
php后期静态绑定
后期静态绑定:static:: 不再被解析为定义当前方法或属性所在的类,而是在实际运行时计算的可用 get_called_class() 函数来得到被调用的方法所在的类名class Animal { public static $name = 'This is a animal'; public function __construct() { ...原创 2018-08-29 18:55:49 · 95 阅读 · 0 评论 -
RBAC权限管理系统
权限控制:项目一: 1、项目一后台通过layout插件布局分为3块 2、定义一个数据形成菜单 3、admin_access、admin_roles、admin_user三张表控制权限项目二: 1、4张表管理权限 auth_group // 用户组数据表名 auth_group_access ...原创 2018-09-10 10:10:03 · 755 阅读 · 0 评论