跳至主要內容
Composer安装

Composer安装

运行以下命令:(这里默认已经安装了php)

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === 'e21205b207c3ff031906575712edab6f13eb0b361f2085f1f1237b7126d785e826a450292b6cfd1d64d92e6563bbde02') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
sudo mv composer.phar /usr/local/bin/composer

Mr.Lexon小于 1 分钟environmentphpComposerenv-configuration
PHP 整体结构解析和Opcache优化案例

PHP 整体结构解析和Opcache优化案例

PHP由以下部分组成:

  1. Zend Zend 引擎整体用C语言实现,是 PHP 的内核部分,它负责将 PHP 代码翻译(词法、语法解析等一系列编译过程)为可执行的 opcode 操作码,并实现相应的处理方法、基本的数据结构(如 hashtable、oo)、内存分配及管理、提供相应的 API 方法供外部调用。Zend 是一切的核心,所有的外围功能均围绕 Zend 实现。
  2. Extension 围绕着 Zend 引擎,Extensions 通过组件化的方式提供各种基础服务,我们常见的各种内置函数(例如变量操作函数、字符串操作函数等)以及标准库等都是通过 Extensions 来实现。用户也可以根据需要实现自己的 Extension 组件以达到功能扩展、性能优化等目的。
  3. SAPI SAPI 全称是 Server Application Programming Interface,译为“服务器应用程序编程接口”。SAPI 通过一系列钩子函数,使得 PHP 可以和外围交互数据,这是 PHP 非常优雅和成功的一个设计,通过 SAPI 成功的将 PHP 本身和上层应用解耦隔离,PHP 可以不再考虑如何针对不同应用进行兼容,而应用本身也可以针对自己的特点实现不同的处理方式。SAPI 提供了一个和外部通信的接口,常见的 SAPI 有:cgi、fast-cgi、cli、apache 模块的 DLL、isapi 等。

Mr.Lexon大约 5 分钟environmentphpopcache
php环境使用docker构建

php环境使用docker构建

注意: 本方案还是需要人工建立php环境容器,并非完全以dockerFile直接构建出来,但是前面的构建成功之后,可对镜像导出或上传至docker hub中,直接拉取使用,方案做得比较粗糙,整个容器的大小尚未压缩,但是应付一般和测试情况足以。

安装

首先执行拉取ubuntu镜像,并进入镜像

docker pull ubuntu
docker run -it ubuntu /bin/bash

Mr.Lexon大约 6 分钟environmentphpdockerenv-configuration
php环境安装

php环境安装

#运维

下列配置只适合debian系统安装,并成功

一、获取相关开源程序
1、利用CentOS Linux系统自带的yum命令安装、升级所需的程序库:

sudo-s

LANG=C

yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel openssl openssl-devel openldap openldap-devel patch git libtool automake telnet cmake bison bind-utils ntsysv iptables iptables-services epel-release psmisc sqlite-devel wget net-tools traceroute whois

Mr.Lexon大约 7 分钟environmentphpenv-configuration
hyperf记录(一)

hyperf记录(一)

核心架构

生命周期

因为hyperf是基于swoole的,swoole是基于php的,所以了解hyperf生命周期要从php的生命周期开始

php生命周期:

现在有一个index.php,我们通过命令行运行以下命令:

# php -f index.php

php首先会进入minit阶段,即模块初始初始化阶段,php在这个阶段会做以下操作:

  1. 初始化所有已安装的模块

  2. 初始化内核,Zend引擎

以上工作完成后php开始处理请求,此时我们的请求只有一个就是处理index.php

处理请求的时候php会进入请求启动阶段RINIT,php在这个阶段会做以下操作:

初始化index.php运行的基本环境,然后完成index.php的编译。

RINIT阶段完成之后,开始运行index.php的内容。

当index.php运行完毕之后就会php进入RSHUTDOWN(请求关闭)阶段,php将会把index.php运行之后所返回内容返回给命令行,并清理index.php所占用的内存,关闭php执行器。

因为我们的请求就只有一个,所以接下来php就会进入MSHUTDOWN(模块关闭)阶段,在这个阶段里面,php就会把所有的模块全部关闭,并清理模块所运行的程序,清理完之后,php就把自己一同关闭掉,整个php生命周期就完成了。


Mr.Lexon大约 17 分钟back-endback-endphphyperf
PHP基础

PHP基础

#php

[toc]

本篇php基础更多的是个人文档,而并非是教程,用于日常查询语法所用。 php安装教程: [[php环境安装]]

0.环境安装

建议使用lamp或lnmp,因为一些依赖上的东西需要一个个打,所以,直接使用一键安装来迅速建立依赖环境不失为更好的选择,当然还是要根据具体的项目进行搭建环境。

lnmp:LNMP一键安装包 - CentOS/RadHat/Debian/Ubuntu下自动编译安装Nginx,PHP,MySQL,PHPMyAdmin


Mr.Lexon大约 10 分钟back-endback-endphp
PHP高级技巧

PHP高级技巧

1. 多维数组

可以将其理解为矩阵,但是与矩阵不同的是,他可以嵌套无限次,所以他更像多维表

2. 日期

见[菜鸟][https://www.runoob.com/php/php-ref-date.html]

3. 引用外部文件

include 和 require 除了处理错误的方式不同之外,在其他方面都是相同的:

include 'filename';
#或者
require 'filename';

Mr.Lexon大约 2 分钟back-endback-endphp
redis工具封装(基于laravel)

redis工具封装(基于laravel)

<?php  
  
namespace App\Util;  
  
use Illuminate\Support\Facades\Redis;  
  
class RedisUtil  
{  
    public static function getResource($pool = null)  
    {  
        return Redis::connection($pool)->client();  
    }  
    public static function setData(string $key,$data,$timeout = 1,$pool = null){  
        if (is_array($data)){  
            $data = json_encode($data);  
        }  
        try {  
            return static::getResource($pool)->set($key,$data,['EX'=>$timeout]);  
        } catch (\RedisException $e) {  
            return false;  
        }  
    }  
  
    public static function getData(string $key,$pool = null){  
        try {  
            return static::getResource($pool)->get($key);  
        } catch (\RedisException $e) {  
            return false;  
        }  
    }  
  
    public static function remove(string $key,$pool = null): bool|int|\Redis  
    {  
        try {  
            return static::getResource($pool)->del($key);  
        } catch (\RedisException $e) {  
            return false;  
        }  
    }  
}

Mr.Lexon小于 1 分钟back-endback-endphplaravel
工作的一些经验记录

工作的一些经验记录

函数输入

当函数输入需要数组或者字符串时,可以使用:

function a($a){
	if(is_string($a)){
		$a = [$a]
	}
}

Mr.Lexon大约 2 分钟back-endback-endphplaravelhyperf
授权方案(php实现)

授权方案(php实现)

以下方案为用户登录授权参考

1. 采用数据库授权

本方法仅仅只在laravel实验过

思路

首先在用户表添加一列为token列,然后在登录校验成功之后,生成token,将其添加至数据库,并在登录成功之后返回token和用户id,在用户需要登出时,清空token列数据,在这个的基础上增加一个定时器,检查用户表的更新时间,当用户表的更新时间超过规定时间时,自动清空token列内容。

特征

  1. 缺陷明显: 首先此方法无法使用在大量用户场景,因这样会产生大量的sql操作,极大降低服务器性能
  2. 存在错误: 当用户表修改频繁时,会直接延长有效时间 总结这个方法既繁琐又低效。

Mr.Lexon大约 6 分钟back-endback-endphp