PHP多进程讲解(二):孤儿进程

依旧讲解PHP进程的相关知识。Q:什么是孤儿进程呢? A:孤儿进程就是父进程作为老爹已经挂掉了,但是子进程还在跑着,这个时候呢,子进程就成为孤儿了。在linux系统中,这个时候呢,就有进程pid为1的老祖宗收留这个孤儿进程,直到孤儿进程运行结束或者直接干掉TA。下面,我们来演示下,孤儿进程是如何产生的:<?php $pid = pcntl_fork(); if ($pid === -1)

- 阅读全文 -

PHP多进程讲解(一):pcntl扩展创建多进程

前言PHP开发的小伙伴很少接触到多进程的概念。 当然,随着对`计算机及操作系统的熟悉和学习,进程自然需要我们去掌握TA。 PHP也是有多进程的操作的,我们可以通过下面的命令查看PHP是否可以创建多进程:php -m |grep pcntl如果输出 pcntl 的话则说明支持。当然,PHP也有其它创建多进程的方法,本篇文章讲解的是利用pcntl扩展来创建多进程。在使用pcntl创建多进程之前,我

- 阅读全文 -

判断字符串是否在数组中,你会怎么写?

in_array 函数大部分小伙伴第一时间想到的答案就是:in_array 函数啦,是吧,这是PHP内置的函数,可以判断字符串是否在数组中:<?php $arr = ['str1', 'str2', 'str3']; var_dump('str4', $arr);但是吧,这种写法效率不高,特别是数组中元素非常多的时候。TA的时间复杂度取决于数组的长度,也就是N。isset 方法$arr =

- 阅读全文 -

PHP导出csv在window下打开乱码

mac下打开导出的csv文件上是正常的,但是window打开csv是乱码的,搜索了下解决方案,需要在导出内容前面加上BOM头,也就是这个:chr(0xEF) . chr(0xBB) . chr(0xBF)这里给一个示例:$data = [chr(0xEF) . chr(0xBB) . chr(0xBF) . "学生,分数,是否及格"]; foreach ($or

- 阅读全文 -

PHP7.4部分新特性

类属性类型修饰<?php class User { public int $id; public string $name; }7.4之后,可以给类属性增加类型限定了。箭头函数(语法糖)<?php $factor = 10; $nums = array_map(fn($n) => $n * $factor, [1, 2, 3, 4]); // $nums = ar

- 阅读全文 -

浅谈PHP语言的深入学习之道

很多小伙伴都问过小滕一个问题:”小滕,你是如何学习PHP的啊?“从这句话中小滕可以感觉出来,那就是提问的小伙伴对于自己在PHP的学习道路上可能存在一定的疑惑了。这其实很正常,在学习的过程中,会遇到一个又一个瓶颈,而长期处于瓶颈中后,会使人感到疑惑。如果没有较大的行为打破这个变化,那么瓶颈就会使人更加难受。特别是小伙伴如果辞职去寻找新的工作机会,这种时候愈发能感受到自己的瓶颈和差距所在。但是,虽然可

- 阅读全文 -

laravel配置日志的链路追踪

在 Laravel 应用中,记录日志我们可以这样:<?php namespace Tests\Unit; use Illuminate\Support\Facades\Log; use Tests\TestCase; class ExampleTest extends TestCase { /** * A basic test example. *

- 阅读全文 -

PHP7.4新功能:短箭头闭包

PHP7.4Z之前,我们这样使用闭包:$arr = [1,2,3]; $arr = array_map(function ($item) { return $item * 2; }, $arr); var_dump($arr);7.4之后呢,我们可以这样:$arr = [1,2,3]; $arr = array_map(fn($item) => $item*2, $arr); var

- 阅读全文 -

PHP7.4新功能:数组的扩张

直接上例子:$parts = ['apple', 'pear']; $fruits = ['banana', 'orange', ...$parts, 'watermelon']; // ['banana', 'orange', 'apple', 'pear', 'watermelon'];再深入一点:$arr1 = [1, 2, 3]; $arr2 = [...$arr1]; // [1, 2,

- 阅读全文 -

Laravel使用terminate记录API的响应时间,请求参数和响应值

Laravel 的中间件有一个叫做 terminate 的方法,如果我们实现了该方法,那么在 Laravel 整个生命周期执行快要结束的时候,Laravel 就会执行这个方法,方法结构如下:public function terminate($request, $response) { }它有两个参数,一个是 $request ,另外一个是 $response 。也就是本次请求的参

- 阅读全文 -

利用PHP的socket发起HTTP请求

直接上代码:<?php $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if (!socket_connect($socket, '58hualong.cn', 80)) { exit(sprintf('58hualong.com connect error.message:%d', socket_last_error

- 阅读全文 -