04 2021 档案
摘要:之前我们已经学习过 PHP 中的引用计数以及垃圾回收机制的概念。这些内容非常偏理论,也是非常常见的面试内容。而今天介绍的则是具体的关于垃圾回收的一些功能函数。关于之前的两篇介绍文章,大家可以到文章底部查看。 再谈循环引用以及强制清理循环引用 我们为什么要强调 “循环引用” 呢?其实,在默认情况下,我
阅读全文
摘要:今天来学习的是两个非常简单的函数,一个可以用来设置我们执行脚本时运行的进程名。而另一个就是简单的获取当前运行的进程名。这两个函数对于大量的脚本运行代码有很大的作用,比如我们需要 kill 掉某个进程时,可以直接使用我们自己定义的进程名来进行操作。 设置进程名 cli_set_process_titl
阅读全文
摘要:关于 PHP 的配置,我们大多数情况下都是去查看 php.ini 文件或者通过命令行来查询某些信息,其实,PHP 的一些内置函数也可以帮助我们去查看或操作这些配置参数。比如之前我们学习过的 关于php的ini文件相关操作函数浅析 。修改方面的函数就只有 ini_set() ,其他大部分的函数其实都是
阅读全文
摘要:原来一直以为断言相关的函数是 PHPUnit 这些单元测试组件提供的,在阅读手册后才发现,这个 assert() 断言函数是 PHP 本身就自带的一个函数。也就是说,我们在代码中进行简单的测试的时候是不需要完全引入整个单元测试组件的。 assert() 断言函数 assert(1==1); asse
阅读全文
摘要:对于 PHP 这样的解释型语言来说,每次的运行都会将所有的代码进行一次加载解析,这样一方面的好处是代码随时都可以进行热更新修改,因为我们不需要编译。但是这也会带来一个问题,那就是无法承载过大的访问量。毕竟每次加载解析再释放,都会增加 CPU 的负担,通常一台 8核16G 的服务器在2、3000并发左
阅读全文
摘要:在 PHP 中,我们直接进行 echo 、 或者 print_r 的时候,输出的内容就会直接打印出来。但是,在某些情况下,我们并不想直接打印,这个时候就可以使用输出缓冲控制来进行输出打印的控制。当然,这一套功能并不仅限出针对打印的内容,我们还可以做其它一些操作,这个我们放到最后再说。 清除输出 首先
阅读全文
摘要:在小公司,特别是创业型公司,整个服务器的搭建一般也是我们 PHP 开发工程师的职责之一。其中,最主要的一项就是要配置好服务器的 php.ini 文件。一些参数会对服务器的性能产生深远的影响,而且也有些参数是可以在 PHP 运行时动态指定和获取的。今天,我们就来学习一些和 php.ini 文件有关的操
阅读全文
摘要:在编译并完成 php.ini 的配置之后,我们就成功的安装了一个 PHP 的扩展。不过, PHP 也为我们提供了两个在动态运行期间可以查看扩展状态以及加载未在 php.ini 中进行配置的扩展的函数。下面,我们就来看看它们的使用。 查看是否已经加载了扩展 echo extension_loaded(
阅读全文
摘要:数据库的优化是我们做web开发的重中之重,甚至很多情况下其实我们是在面向数据库编程。当然,用户的一切操作、行为都是以数据的形式保存下来的。在这其中,数据库的连接创建过程有没有什么可以优化的内容呢?答案当然是有的,Java等语言中有连接池的设定,而PHP在普通开发中并没有连接池这种东西,在牵涉到多线程
阅读全文
摘要:相信只要入门学习过一点开发的同学都知道,不管任何编程语言,一个变量都会保存在内存中。其实,我们这些开发者就是在来回不停地操纵内存,相应地,我们如果一直增加新的变量,内存就会一直增加,如果没有一个好的机制,那么内存就会无限制地增加最终撑满所有的内存。这就造成了内存泄露。但在日常开发中,除非一次加载一个
阅读全文
摘要:文件上传是所有web应用中最常见的功能,而PHP实现这一功能也非常的简单,只需要前端设置表单的 enctype 值为 multipart/form-data 之后,我们就可以通过 $_FILES 获得表单中的 file 控件中的内容。 同时,我们还可以将 file 控件的名称写成带 [] 的数组形式
阅读全文
摘要:在做开发的时候,我们不仅仅只是做各种网站或者接口,也经常需要写一些命令行脚本用来处理一些后端的事务。比如对数据进行处理统计等。当然也是为了效率着想,当一个事务有可能会有较长的耗时时,往往会交由服务器的定时器来固定时间调用脚本进行处理,从而让客户端能够有更好的用户体验。我们今天就来了解下 PHP 的命
阅读全文
摘要:什么是引用计数 在PHP的数据结构中,引用计数就是指每一个变量,除了保存了它们的类型和值之外,还额外保存了两个内容,一个是当前这个变量是否被引用,另一个是引用的次数。为什么要多保存这样两个内容呢?当然是为了垃圾回收(GC)。也就是说,当引用次数为0的时候,这个变量就没有再被使用了,就可以通过 GC
阅读全文
摘要:在很多时候,我们需要简单的运行一个小 demo 来验证一些代码或者轮子是否可用,是否可以运行起来,但是去配 nginx 或者 apache 都很麻烦,其实,PHP CLI 已经提供了一个简单的测试服务器,我们直接就可以运行起来进行简单的一些测试工作。 直接启动一个内置服务器 php -S local
阅读全文
摘要:对于大部分编译型语言来说,比如 C 、 Java 、 C# ,我们都能很方便地进行断点调试,但是 PHP 则必须安装 XDebug 并且在编辑器中进行复杂的配置才能实现断点调试的能力。不过,如果只是简单的调试并且查看堆栈回溯的话,其实 PHP 已经为我们准备好了两个函数,能够让我们非常方便的看到程序
阅读全文
摘要:接下来,我们继续学习 PHP 中的错误处理函数。上次学习过的函数是错误信息的获取、设置、发送等功能,今天学习的内容主要是关于错误的捕获相关的函数。 set_error_handler() 首先是大家可能会接触过的一个函数,它可以用来捕获一些错误的信息。如果我们需要统一处理一些错误,比如规定日志格式或
阅读全文
摘要:在之前的文章中,我们了解过了 PHP 中的异常和错误的区别,也简单地介绍了一些 PHP 中的错误处理函数。这次,我们再开两篇文章,详细的介绍一些 PHP 中错误处理相关的函数。想了解错误和异常相关内容的,请移步: 一起搞懂PHP的错误和异常(一) 一起搞懂PHP的错误和异常(二) 一起搞懂PHP的错
阅读全文
摘要:想必大家都使用过 memcached 或者 redis 这类的缓存系统来做日常的缓存,或者用来抗流量,或者用来保存一些常用的热点数据,其实在小项目中,PHP 也已经为我们准备好了一套简单的缓存系统,完全能够应付我们日常普通规模站点的开发。这一套扩展就是 APCu 扩展。 APCu 扩展 APCu 扩
阅读全文
摘要:在大型公司中,一般会有很我编程语言的配合。比如说让 Java 来做微服务层,用 C++ 来进行底层运算,用 PHP 来做中间层,最后使用 JS 展现效果。这些语言间的配合大部分都是通过 RPC 来完成,或者直接将数据入库再使用不同的语言来取用。那么,我们 PHP 的代码能否直接调用这些语言呢?其实,
阅读全文