php技巧

PHP中include和require的使用详解

2021-04-28
在PHP中,有两种包含外部文件的方式,分别是include和require.他们之间有什么不同呢? 如果文件不存在或发生了错误,require产生E_COMPILE_ERROR级别的错误,程序停止运行.而include只产生警告,脚本会继续执行. 这就是它们最主要的区别,其他方面require基本等同于include. 被包含文件先按参数给出的路径寻找,如果没有给出目录(只有文件名)时则按照 include_path 指定的目录寻找.如果在 include_path 下没找到该文件则 inclu

PHP中使用DOMDocument来处理HTML、XML文档的示例

2021-04-27
其实从PHP5开始,PHP就为我们提供了一个强大的解析和生成XML相关操作的类,也就是我们今天要讲的 DOMDocument 类.不过我估计大部分人在爬取网页时还是会喜欢用正则去解析网页内容,学了今天的这个类下回就可以尝试下使用这个PHP自带的方式来进行解析分析了. 解析HTML // 解析 HTML $baidu = file_get_contents('https://www.baidu.com'); $doc = new DOMDocument(); @$doc->loadHTML($ba

php遍历对象的方法

2021-04-27
对于php来说,foreach是非常方便好用的一个语法,几乎对于每一个PHPer它都是日常接触最多的请求之一.那么对象是否能通过foreach来遍历呢? 答案是肯定的,但是有个条件,那就是对象的遍历只能获得它的公共属性. // 普通遍历 class A { public $a1 = '1'; public $a2 = '2'; public $a3 = '3'; private $a4 = '4'; protected $a5 = '5'; public $a6 = '6'; public fu

PHP垃圾回收机制的一些理解

2021-04-27
相信只要入门学习过一点开发的同学都知道,不管任何编程语言,一个变量都会保存在内存中.其实,我们这些开发者就是在来回不停地操纵内存,相应地,我们如果一直增加新的变量,内存就会一直增加,如果没有一个好的机制,那么内存就会无限制地增加最终撑满所有的内存.这就造成了内存泄露.但在日常开发中,除非一次加载一个很大的文件,我们几乎见不到内存超限的错误,这就是垃圾回收机制的作用. 垃圾回收是什么东西? 在使用 C 语言的时候,我们都要手动使用 free 来释放内存,在 C 之后的大部分编程语言都会自带一个垃圾

详解PHP的引用计数

2021-04-27
什么是引用计数 在PHP的数据结构中,引用计数就是指每一个变量,除了保存了它们的类型和值之外,还额外保存了两个内容,一个是当前这个变量是否被引用,另一个是引用的次数.为什么要多保存这样两个内容呢?当然是为了垃圾回收(GC).也就是说,当引用次数为0的时候,这个变量就没有再被使用了,就可以通过 GC 来进行回收,释放占用的内存资源.任何程序都不能无限制的一直占用着内存资源,过大的内存占用往往会带来一个严重的问题,那就是内存泄露,而 GC 就是PHP底层自动帮我们完成了内存的销毁,而不用像 C 一样

如何使用Serializable接口来自定义PHP中类的序列化

2021-04-27
关于PHP中的对象序列化这件事儿,之前我们在很早前的文章中已经提到过 __sleep() 和 __weakup() 这两个魔术方法.今天我们介绍的则是另外一个可以控制序列化内容的方式,那就是使用 Serializable 接口.它的使用和上述两个魔术方法很类似,但又稍有不同. Serializable接口 class A implements Serializable { private $data; public function __construct(){ echo '__construc

PHP中断言函数的使用详解

2021-04-27
原来一直以为断言相关的函数是 PHPUnit 这些单元测试组件提供的,在阅读手册后才发现,这个 assert() 断言函数是 PHP 本身就自带的一个函数.也就是说,我们在代码中进行简单的测试的时候是不需要完全引入整个单元测试组件的. assert() 断言函数 assert(1==1); assert(1==2); // assert.exception = 0 时,Warning: assert(): assert(1 == 2) // assert.exception = 1 时,Fata

PHP设计模式之迭代器模式的使用

2021-04-27
一说到这个模式,就不得不提循环语句.在<大话设计模式>中,作者说道这个模式现在的学习意义更大于实际意义,这是为什么呢?当然就是被foreach这货给整得.任何语言都有这种类似的语法可以方便快捷的对数组.对象进行遍历,从而让迭代器模式从高高在上的23大设计模式中的明星慢慢成为了路人.特别是我们这门PHP语言,PHP的强大之处就在于对于数组的灵活操作,本身就是hashmap的结构,自然会有各种方便的数组操作语法,而foreach也是我们最常用的语句,甚至比for还常用. Gof类图及解释 GoF定

PHP 生成器的使用详解

2021-04-26
什么是生成器? 听着高大上的名字,感觉像是创造什么东西的一个功能,实际上,生成器是一个用于迭代的迭代器.它提供了一种更容易的方式来实现简单的对象迭代,相比较定义类实现Iterator接口的方式,性能开销和复杂性大大降低. 说了半天不如直接看看代码更直观. function test1() { for ($i = 0; $i < 3; $i++) { yield $i + 1; } yield 1000; yield 1001; } foreach (test1() as $t) { echo $

PHP 请求上下文相关总结

2021-04-26
我们首先来了解下什么是上下文.在我们写文章,写句子时,都会考虑一个观点或者内容的前后逻辑,转承启合,而在这个观点前后的内容就可以看成是它的上下文内容.它包含了语境的意味在里面,其实代码世界中的上下文也是一样的意思,本身 Context 这个单词就是环境.背景的意思. 接下来,我们来说说请求上下文又是什么呢?比如说我们要使用PHP来请求一个链接地址,通常我们会使用 curl 来进行请求,但是 curl 的配置其实是比较复杂的,所以我们在简单使用的情况下会使用 file_get_contents()

PHP 内置WEB服务器的简单使用

2021-04-25
在很多时候,我们需要简单的运行一个小 demo 来验证一些代码或者轮子是否可用,是否可以运行起来,但是去配 nginx 或者 apache 都很麻烦,其实,PHP CLI 已经提供了一个简单的测试服务器,我们直接就可以运行起来进行简单的一些测试工作. 直接启动一个内置服务器 php -S localhost:8081 直接使用 -S 命令选项,然后指定地址及端口号,我们就可以运行起来一个 PHP 内置的简易WEB服务器.默认情况下,这个地址会找当前目录下的 index.php 或 index.h

如何使用SublimeText3配置 PHP IDE环境

2021-04-20
首先是安装好PHP之后配置环境变量 然后在cmd中输入php -v 能看到版本号即为配置好了 之后在sublime中新建编译系统,输入代码 { "cmd": ["php", "$file"], "file_regex": "^(...*?):([0-9]*):?([0-9]*)", "selector": "source.php" } 然后保存在默认位置,改名字为ph

php常见的网络攻击及防御方法

2021-04-20
常见的Web攻击分为两类:一是利用Web服务器的漏洞进行攻击,如CGI缓冲区溢出,目录遍历漏洞利用等攻击;二是利用网页自身的安全漏洞进行攻击,如SQL注入,跨站脚本攻击等.下面这篇文章主要介绍了PHP安全防护之Web攻击,需要的朋友可以参考,下面来一起看看吧. SQL注入攻击(SQL Injection) 攻击者把SQL命令插入到Web表单的输入域或页面请求的字符串,欺骗服务器执行恶意的SQL命令.在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类

源码分析系列之json_encode()如何转化一个对象

2021-04-20
json_encode()如何转化一个对象? 使用 json_encode() 将数组 array 转化成 json 字符串我们都已经很熟悉了 那么使用 json_encode() 转化一个对象是什么样的过程呢? 初步测试 我们需要新建一个具有多种属性的对象 新建 JsonTest class JsonTest { public const TEST = 'c'; public $a = 'a'; public static $b = 'b'; protected $e = 'e'; priva

详解PHP使用非对称加密算法RSA

2021-04-20
加密的类型 在日常设计及开发中,为确保数据传输和数据存储的安全,可通过特定的算法,将数据明文加密成复杂的密文.目前主流加密手段大致可分为单向加密和双向加密. 单向加密:通过对数据进行摘要计算生成密文,密文不可逆推还原.算法代表:Base64,MD5,SHA; 双向加密:与单向加密相反,可以把密文逆推还原成明文,双向加密又分为对称加密和非对称加密. 对称加密:指数据使用者必须拥有相同的密钥才可以进行加密解密,就像彼此约定的一串暗号.算法代表:DES,3DES,AES,IDEA,RC4,RC5; 非

PHP代码加密和扩展解密实战

2021-04-19
这种方案是通过对代码进行加密,然后利用C语音写解密的PHP扩展.破解难度会有提升,但依然是会被破解的. 从网上找过各种代码加密的开源方案. 一旦开源,就不可能保证安全性.毕竟加密和解密的东西都是公开的. 目前我们没有能力自己去写扩展.还是需要采用开源的方案. 我找到的比较好用的是php-beast. https://github.com/liexusong/php-beast 实战开始 1.下载源码 wget https://github.com/liexusong/php-beast/arch

php-fpm报502问题的解决办法

2021-04-19
搭建lnmp完lnmp环境后,测试时出现502报错,看到这个问题,我立刻想到是php-fpm没有起来,但是我用 ps -ef | grep php-fpm 截取 php-fpm 的进程,发现是有的,这时我有查看nginx的错误日志,发现错误信息是: 2017/05/05 17:08:45 [crit] 3258#0: *2 connect() to unix:/tmp/php-cgi.sock failed (2: No such file or directory) while connect

php中foreach遍历类对象的总结

2021-04-19
foreach 遍历数组很常见,同样foreach也可以遍历对象 做如下测试: class my { public $a = 'a'; protected $b = 'b'; private $c = 'c'; private $data = array('fantasy','windows','linux'); // 内部foreach遍历class function traversable() { foreach($this as $key=>$val) { echo $key.'=>';

SublimeText3配置PHP函数追踪定位插件

2021-04-19
一.下载ctags http://download.csdn.net/detail/xujunabc999/9604934 二.安装ctags和codeBeautifier插件 1)按Ctrl+shift+P,打开Install Package 2)搜索ctags进行插件安装: 3)搜索Php codeBeautifier进行插件安装. 三.配置快捷键 配置在sublime中使用Ctrl+左键单击函数跳转.Ctrl+右键单击跳回函数调用位置 复制以下代码到Preferences->Package

PHP远程调用以及RPC框架

2021-04-19
前言 一个项目,从开始到版本更新,一直到最后的版本维护.功能在不断增多,对应的代码量也在不断增加,也就意味着项目变得更不可维护,这时候,我们需要用拆分的方式将一个项目打散,以便开发团队更好的对项目进行维护. 分模块 这个阶段,一般也是项目的初级阶段,由于人手不够,一个服务端的接口项目只有一个开发进行维护,根据开发的习惯,会把项目分成若干个模块进行开发,在一个项目下进行部署. 这样做的缺点在于项目会随着版本更新而变得不可维护. 分项目 随着每个模块功能的不断完善,代码变得更加臃肿.这时候需要对项目