分类: php

  • PHP使用JSON_DECODE解码JSON字符串

    示例代码:

    <?php
    //预定义变量
    $http_json_data = null;
    
    //将HTTP报文Body赋值给预定义变量
    $http_json_data = file_get_contents('php://input');
    
    //如果HTTP报文内容不为空
    if ( !empty($http_json_data) ) {
    
            //使用json_decode函数解码数据包为数组
            $data = json_decode($http_json_data, true);
    
            //如果解码时,没有出现错误
            if ( json_last_error() == JSON_ERROR_NONE ) {
    
                    //解码后的数据是个数组
                    if ( is_array($data) ) {
                            //答应数组的内容
                            var_dump($data);
                    }
            }
    
    }

    视频地址:

    https://www.bilibili.com/video/BV17E421u7KN

    参考:

    https://www.php.net/manual/zh/function.json-decode.php

    https://github.com/chuguotech/labs/blob/master/www/php/json_decode.php

  • Docker php:7.2.34-fpm-alpine3.12 安装zip扩展

    基于 php:7.2.34-fpm-alpine3.12 创建docker安装 zip 扩展

    apk add --no-cache libzip-dev && docker-php-ext-configure zip --with-libzip=/usr/include && docker-php-ext-install zip

    参考:

    https://github.com/docker-library/php/issues/797

  • 获取已知年月第一天和最后一天的日期【PHP/Carbon】

    获取已知年月的第一天和最后一天的日期

    get the first day date and last day date of the month

    第一天是 1 不变,最后一天可能是 28,29,30,31

    PHP编程实现:

    1、使用 Composer 安装 Carbon

    composer require nesbot/carbon

    2、编写代码:

    <?php
    
    require 'vendor/autoload.php';
    
    use Carbon\Carbon;
    
    $year = 2023;
    $month = 2;
    
    // Get the first day of the month.
    $firstDayOfMonth = Carbon::create($year, $month, 1)->startOfMonth();
    
    echo 'First day of the month: ' . $firstDayOfMonth->format('Y-m-d') . PHP_EOL;
    
    // Get the last day of the month.
    $lastDayOfMonth = Carbon::create($year, $month, 1)->endOfMonth();
    
    // Print the first day and last day of the month.
    echo 'Last day of the month: ' . $lastDayOfMonth->format('Y-m-d') . PHP_EOL;
    
    ?>
    

    代码由 Google Bard 生成,

    提示词 (prompt words) :

    known year and month,get the first day date and last day date of the month in PHP use carbon package

    3、输出结果

    First day of the month: 2023-02-01
    Last day of the month: 2023-02-28
  • 在Docker PHP中安装Redis扩展

    本文描述如何在一个基于Docker 镜像 php:8.2.5-fpm-bullseye 创建的容器中,安装 redis 扩展。

    检测 Redis 扩展是否安装:

    docker exec 245962d9fe58 php -m | grep -i redis

    245962d9fe58 为容器实例 ID

    安装 Redis 扩展步骤:

    进入 Docker 容器Shell:

    docker exec -it 245962d9fe58 /bin/bash

    安装扩展命令:

    pecl install redis 

    激活扩展:

    docker-php-ext-enable redis

    重启 php-fpm :

    kill -USR2 1

    检查扩展是否安装成功:

    php -m | grep -i redis

    如果出现 redis 即安装成功。

    参考:

    https://stackoverflow.com/questions/31369867/how-to-install-php-redis-extension-using-the-official-php-docker-image-approach

  • Linode UBUNTU 22.04.1 部署 Laravel Framework 9.42.0 Breeze

    操作步骤视频:

    https://www.bilibili.com/video/BV1Ev4y1d7S8/?vd_source=d997f54cc2fcf65d9d414ae1fc2125c6

    查看操作系统版本
    cat /etc/os-release

    查看内存信息
    free -m

    建议最少2GB

    更新软件包
    apt update

    安装PHP基本扩展
    php -v
    apt install php8.1-cli
    apt install php8.1-curl
    apt install php8.1-redis
    apt install php8.1-mysql
    apt install php8.1-dom

    安装依赖应用
    apt install curl
    apt install redis
    apt install mysql-server
    apt install composer

    基于 Laravel 创建项目 app 的初始代码
    composer create-project laravel/laravel app
    cd ~/app

    启动应用web服务
    php artisan serve –host 172.105.194.149 –port 80

    访问 http://172.105.194.149/

    项目脚手架搭建完毕。

    安装数据库管理工具 phpMyAdmin

    切换到网站服务根目录
    cd ~/app/publilc

    下载源码
    wget https://files.phpmyadmin.net/phpMyAdmin/5.2.0/phpMyAdmin-5.2.0-all-languages.zip

    解压
    unzip -qq phpMyAdmin-5.2.0-all-languages.zip

    更改目录名
    mv phpMyAdmin-5.2.0-all-languages pma

    cd pma

    修改配置文件
    cp config.sample.inc.php config.inc.php
    vim config.inc.php
    设置密码加密密钥 参数 blowfish_secret

    使用32位长度随机字串填充,
    将 First Server 下面的 AllowNoPassword 设置为 true,
    意思是允许空密码登录数据库
    使用命令 :wq 保存修改并退出 vim
    cd ~/app
    启动服务
    php artisan serve –host 172.105.194.149 –port 80
    访问 phpMyAdmin
    http://172.105.194.149/pma/

    添加 MySQL 新用户 feng
    自动生成密码 **************
    创建数据库 app

    修改 Laravel app MySQL 数据库配置
    cd ~/app
    vim .env

     

    部署 Laravel Breeze

    Laravel 框架初始化完成,

    如果应用需要鉴权功能,

    即基本的用户注册和登录等,

    可以使用 Laravel Breeze 扩展。

    以下是扩展安装的步骤:

    cd ~/app
    composer require laravel/breeze –dev
    php artisan breeze:install
    php artisan migrate

     

    还需要编译前端资源并启动服务,

    安装npm
    apt install npm

    安装 n
    npm install -g n

    使用 n 安装最新的nodejs
    n latest

    清除缓存

    hash -r

    查看 node 版本
    node -v

    npm install

    启动前端服务

    npm run dev — –host 172.105.194.149

    如果是生产环境

    npm run build

    Laravel Breeze 部署完成。

     

     

  • php 扩展 xml

    如果php未安装扩展xml,可能会出现如下错误。

    Composer detected issues in your platform: Your Composer dependencies require the following PHP extensions to be installed: xml

    解决办法

    apt install php7.4-xml

  • ubuntu 20.04 安装 PHP/Nginx/MySQL/Redis

    视频版:

    https://www.bilibili.com/video/BV1PK4y1n74R/

    基于Ubuntu 20.04 LTS 操作系统
    部署安装PHP
    Nginx web 服务器
    MySQL 数据库
    Redis 内存服务器

    由于服务器位于远端的机房
    所以需要远程登录服务器

    如果是Linux系统
    使用自带的terminal就可以登陆
    MacOS也有自带终端
    也可以使用 iTerm2
    Windows 可以使用的软件有很多
    例如 Windows Terminal
    共享软件 SecureCRT
    开源软件PuTTY

     

    登录系统后

    查看主机的操作系统类型
    cat /etc/os-release

    如果服务器位于国内
    建议将默认的源镜像修改为国内的地址
    https://developer.aliyun.com/mirror/ubuntu
    这样下载软件包速度会比较快

    安装 php
    apt install php

    安装 PHP进程管理器 php-fpm
    apt install php7.4-fpm

    卸载 apache2
    systemctl stop apache2.service
    apt purge apache2

    安装 nginx
    apt install nginx

    安装 MySQL
    apt install mysql-server

    安装Redis
    apt install redis-server

    安装多字节字符串扩展
    apt install php7.4-mbstring

    安装 curl 扩展
    apt install php7.4-curl

    安装 MySQL 扩展
    apt install php7.4-mysql

    安装 Redis 扩展
    apt install php7.4-redis

    安装图形库扩展
    apt install php7.4-gd

    php-imagick

    到此网站运行的基础软件都安装好了
    软件的配置也都使用了默认的配置
    但这样的配置仅用于开发测试
    用于生产环境的话要配置的细节就比较多

    修改mysql root 密码
    首先输入mysql登录mysql
    然后输入
    ALTER USER ‘root’@’localhost’ IDENTIFIED WITH mysql_native_password BY ‘abcd12345’;
    将密码修改为 abcd12345
    使用 flush privileges
    刷新权限
    至此开发环境搭建完毕

  • Ubuntu 16.04 LTS 安装php7.2

    因项目要使用到Laravel,但Laravel要求php >= 7.1.3

    我的本地系统为 Ubuntu 16.04.4 LTS ,php版本为7.0

    当前php7.2已经有稳定版本发布,所以计划直接升级到php7.2

    因php7.2版本比较新,并未收录在ubuntu 16.04.4 LTS 默认的软件包里面

    所以就需要添加PPA(Personal Package Archives)

    以下是添加和安装的步骤:

    sudo apt-get update
    
    sudo apt-get install python-software-properties
    
    sudo apt-get install software-properties-common
    
    add-apt-repository ppa:ondrej/php
    
    apt-get install -y php7.2

    参考文档

    https://tecadmin.net/install-php-7-on-ubuntu/
    https://www.liquidweb.com/kb/install-php-7-2-ubuntu-16-04/

    安装基础扩展

    apt install php7.2-fpm

    apt install php7.2-mbstring

    apt install php7.2-mysql

    安装redis扩展

    某些系统由于语言问题安装不成功的解决办法:

    locale-gen en_US.UTF-8
    export LANG=en_US.UTF-8
    export LC_ALL=en_US.UTF-8

    问题讨论:https://github.com/oerdnj/deb.sury.org/issues/56

  • PHP字符串函数substr的用法

    substr是PHP语言的一个字符串截取函数,它的作用是返回字符串的一部分。在日常开发中会经常使用到。
    它有三个参数,

    第一个参数是要处理的原始字符串;

    第二个参数是截取的起始位置,字符串中第一个字符位置是0,向后依次累加,如果从字符串结尾开始指定位置,最后一个位置是-1,如果要截取末尾的几个字符,通常设定负数比较方便;

    第三个参数是可选的,指定了要截取的长度,如果没有指定,默认截取到结尾。如果指定负数意思是从start位置开始截取,并舍弃字符串末端字符数。

    如果要处理的字符串是多字节编码,就需要知道每个字符所占的字节数,比如中文 每个汉字占3字节,在设定参数时就需要计算好,否则容易出现乱码。也可以使用mb_substr等扩展库支持的函数来处理。

  • PHP使用SPL内置迭代器递归遍历目录

    PHP开发中经常有遍历目录的需求,

    使用PHP内置标准库SPL提供的迭代器,

    可以很方便地实现。

    代码:

    <?php
    $dir = './dir';
    $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));
    foreach ( $files as $file ) {
        echo $file->__toString();
        echo chr(10);
    }

    参考:
    http://php.net/manual/en/spl.iterators.php