php技巧

PhpStorm+xdebug+postman调试技巧分享

2020-09-13
下面记录下我自己从安装到测试的全部详细过程.我的运行环境是:windows+wamp 一.配置wamp安装目录下的php.ini文件 我的安装目录是:C:\wamp64\bin\apache\apache2.4.23\bin 1 zend_extension ="c:/wamp64/bin/php/php5.6.31/zend_ext/php_xdebug-2.5.5-5.6-vc11-x86_64.dll" 2 xdebug.remote_enable = on 3 xdebug.p

PHP $O00OO0=urldecode & eval 解密,记一次商业源码的去后门

2020-09-12
代码如下: $O00OO0=urldecode("%6E1%7A%62%2F%6D%615%5C%76%740%6928%2D%70%78%75%71%79%2A6%6C%72%6B%64%679%5F%65%68%63%73%77%6F4%2B%6637%6A");$O00O0O=$O00OO0{3}.$O00OO0{6}.$O00OO0{33}.$O00OO0{30};$O0OO00=$O00OO0{33}.$O00OO0{10}.$O00OO0{24}.$O00OO0{10}.$

PHP实现限制域名访问的实现代码(本地验证)

2020-09-11
用PHP编写好的源码,如果不想被其它人直接利用怎么办?首先想到的是加密,但现在除了Zend 5加密还比较难破解外,其它的加密方式都不堪一击.即使不破解,不怀好意的人同样可以使用你的源码搭建一个和你一模一样的一个网站.这岂不是使你的劳动成果白白的被别人占为己有.下面介绍一种方法即限制域名的方法来保护你的源代码不被直接拷贝运行. 如何通过程序限制域名从而保护源码呢?比如你所做的网站将来要使用的是www.jb51.net,如果PHP的程序丢失了,即使其它人使用你的PHP源码,如果判断的域名不正确,也无

PHP获取类私有属性的3种方法

2020-09-10
今天在推上看到一条获取PHP类私有属性的推文,感觉很有意思: 顺着推文联想,还有其他方式吗?经过自己的测试及网上答案,总结出三种方法: 1. 反射 反射可以获取类的详细信息,要获取私有属性的值,只需将对应属性的ReflectionProperty实例设置为可访问再取值即可.示例代码如下: namespace tlanyan; class Foo { private $bar = "Foo bar!"; } // 获取反射类及反射属性 $class = new \ReflectionCl

PHP反射基础知识回顾

2020-09-09
反射是编程语言的高级特性,能在运行时让代码有感知代码的能力.PHP自5起支持反射机制,其是各种OOP框架底层实现的重要支撑. 反射 从一个简单的例子理解反射:人有五官四肢,但鲜有人清楚人体内部的经脉走向.骨骼构造.如果你修仙顺利,在丹田深处练出元婴,那么就通过元婴透析身体内部的构造.理解内部构造后,还可以让元婴指引体内真气在经脉的流向,早日修成正果. 如其名,反射是(从镜子里)照出自身.我们写代码,告诉代码怎么运行,事件发生在编译期.代码运行期间,代码如何知道自己的结构以及能力呢?反射机制相当于

PHP重载基础知识回顾

2020-09-07
重载和重写 先区分一下重载(overload)和重写(override):重载指多个名字相同,但参数不同的函数在同一作用域并存的现象;重写出现在继承中,指子类重定义父类功能的现象,也被称为覆盖.重载中说的参数不同有三种情况:参数个数不同,参数类型不同,参数顺序不同.重写一般指函数的覆盖,即相同签名的成员函数在子类中重新定义(实现抽象函数或接口不是重写),是实现多态(polymorphism)的一种关键技术.成员变量也可以重载/覆盖,但一般不会这么做. 用简单的C代码来说明重载: int add(

如何在PHP中读写文件

2020-09-05
在PHP中读写文件,可以用到一下内置函数: 1.fopen(创建文件和打开文件) 语法: fopen(filename,mode) filename,规定要打开的文件.mode,打开文件的模式,可能的值见下表. mode 说明 "r" 只读方式打开,将文件指针指向文件开头. "r+" 读写方式打开,将文件指针指向文件开头. "w" 写入方式打开,将文件指针指向文件开头并将文件大小截为零.如果文件不存在则尝试创建. "w+" 读

XAMPP升级PHP版本实现步骤解析

2020-09-04
XAMPP(Apache+MySQL+PHP+PERL)是一个功能强大的建站集成软件包.这个软件包原来的名字是 LAMPP,但是为了避免误解,最新的几个版本就改名为 XAMPP 了.它可以在Windows.Linux.Solaris.Mac OS X 等多种操作系统下安装使用,支持多语言:英文.简体中文.繁体中文.韩文.俄文.日文等 查阅了一遍百度上的同类文章,基本都行不通.我这一篇博客上写的方法,是我今天亲自测试过有效的. 一般来说,不建议单独升级XAMPP的PHP部分.你应该首先考虑升级XA

PHP数组访问常用方法解析

2020-09-04
1.如果使用的是索引方式的数组可以使用for循环来实现如下: for ( $i = 0; $i < count($arr); $i++ ){ echo $arr[i] . '<br/>'; } 2.如果使用的是非索引方式的选择就多了,比如 (1)foreach用法 foreach ( $arr as $value ){ echo $value . '<br/>'; } (2)另一种foreach用法 foreach ( $arr as $key => $value ){

PHP延迟静态绑定使用方法实例解析

2020-09-04
PHP的继承模型中有一个存在已久的问题,那就是在父类中引用扩展类的最终状态比较困难.我们来看一下代码清单5-11中的例子. 代码清单5-11 意想不到的继承 <?php class ParentBase { static $property = 'Parent Value'; public static function render() { return self::$property; } } class Descendant extends ParentBase { static $pro

PHP autoload使用方法及步骤详解

2020-09-02
我们知道在PHP4里面,当我们使用一个类的时候,必须将该类所以文件使用include或require加进来,这样我们就可以使用类了. 而对于PHP5来说也可以使用在PHP4里面的方式,将类文件包进来,但当有了__autoload之后,这种情况就可以靠编写规则也实现. 以下代码: <?php $obj_A = new clsA(); $obj_B = new clsB(); ?> PHP4下正确写法为: <?php //PHP4 写法,之前必须加载类文件 include_once &quo

PHP如何使用array_unshift()在数组开头插入元素

2020-09-01
PHP array_unshift() 函数用来在数组开头插入一个或多个元素,其语法如下: int array_unshift ( array &$arr , mixed $value1 [, mixed $value2, mixed $value3 ... ] ) 参数说明: arr 表示一个数组: value1, value2, value3 ... 表示需要插入的元素(值). 返回值:返回插入新元素后的数组长度. 两点说明: 元素是作为一个整体被插入的,这些元素在插入后将保持同样的顺序.

PHP 实现base64编码文件上传出现问题详解

2020-08-30
一.场景 领导:小A同学,我们要做一个样本上传进行分析的功能,你看下是否使用base64编码加进去,这样客户端的同学就不需要用form-data方式来上传了,直接使用json格式就可以上报,可以让格式上报统一. 小A:好的,领导,马上搞定! 咋看上面的对话没啥问题,很多公司团队内部为了一些标准化的问题,都会进行一些技术选型问题,但是噩梦也就从这个对话开始,功能实现当然都是很简单的,先来看简单流程图: 本身的流程是一个很简单的文件转换成base64上传,再服务端decode保存,在开发联调过程中没

PHP数组Key强制类型转换实现原理解析

2020-08-30
PHP是弱类型语言,就像JavaScript一样,在定义变量时,不需要强制指定变量的类型.同时,PHP又有着强大的数组功能,数组的Key即可以是普通的数字类型下标,也可以是字符串类型的Hash键值,那么,当一个数组的Key同时拥有字符串和数字时,会产生什么情况呢? 首先来看下面这样一段代码: $arr = [ "1" => "a", "01" => "b", 1 => "aa", 1.1

PHP实现Snowflake生成分布式唯一ID的方法示例

2020-08-28
前言 Twitter 的 snowflake 在分布式生成唯一 UUID 应用还是蛮广泛的,基于 snowflake 的一些变种的算法网上也有不少.使用 snowflake 生成 UUID 很多都是在分布式场景下使用,我看了下网上有其中有几篇 PHP 实现的都没有考虑到线程安全.现在 PHP 有了 Swoole 的锁和协程的加持,对于我们开发线程安全和高并发模拟还是很方便的,这里用 PHP 结合 Swoole 来学习下实现最简单的 snowflake. 先来看以下 snowflake 的结构:

PHP实现简单日历类编写

2020-08-28
用PHP实现日历类的编写,供大家参考,具体内容如下 calendar.class.php <?php /* * 创建一个日历类 * * */ //修改默认时区 date_default_timezone_set("PRC"); class Calendar { private $year; private $month; private $day; //当月总天数 private $first_week; //每月的第一天是星期几 //构造函数 function __constr

PHP常用header头定义代码示例汇总

2020-08-27
在php的开发中,我们常常需要使用到header函数头来进行做标记 header() 函数向客户端发送原始的 HTTP 报头. 常用header设置列表如下: header('HTTP/1.1 200 OK'); // ok 正常访问 header('HTTP/1.1 404 Not Found'); //通知浏览器 页面不存在 header('HTTP/1.1 301 Moved Permanently'); //设置地址被永久的重定向 301 header('Location: http:/

PHP isset()及empty()用法区别详解

2020-08-26
PHP isset函数作用 isset函数是检测变量是否设置. 格式:bool isset( mixed var [, mixed var [, ...]] ) 返回值: 若变量不存在则返回FALSE 若变量存在且其值为NULL,也返回FALSE 若变量存在且值不为NULL,则返回TURE 同时检查多个变量时,每个单项都符号上一条要求时才返回TRUE,否则结果为FALSE 如果已经使用unset()释放了一个变量之后,它将不再是isset().若使用isset()测试一个被设置成NULL的变量,

利用PHP计算有多少小于当前数字的数字方法示例

2020-08-25
给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目. 换而言之,对于每个 nums[i] 你必须计算出有效的 j 的数量,其中 j 满足 j != i 且 nums[j] < nums[i] . 以数组形式返回答案. 示例 1: 输入:nums = [8,1,2,2,3] 输出:[4,0,1,1,3] 解释: 对于 nums[0]=8 存在四个比它小的数字:(1,2,2 和 3). 对于 nums[1]=1 不存在比它小的数字. 对于 nums[2]=

解决PHP Opcache 缓存刷新、代码重载出现无法更新代码的问题

2020-08-23
问题背景 通过启用Opcache的缓存优化,将PHP代码预编译为Opcode缓存到共享内存中供进程反复调用,从而减少了重复从磁盘解析PHP代码的时间消耗,显著的提高了PHP性能,提升了业务性能的调用,但是也引发了一些问题,就是我们每次更新了相应的PHP代码后,web server 无法即时加载到更新后的代码. 解决方案 (一).设置Opcache脚本验证时间 可以通过更改 Opcache 以下两个配置选项来调整代码重载时间 opcache.revalidate_freq=0 检查脚本时间戳是否有