随手记录第十一话 -- PHP + yii2 初体验

啥也不想说了,项目是半路接过来,帮接入我们服务的。

1.版本和依赖问题

多版本,Mac是默认带有php的,但是版本是个问题,可以用如下指令来选择当前的版本

brew unlink php && brew link php  //默认的版本
brew unlink php && brew link shivammathur/php/php@7.4

在项目中,尤其要特别注意PHP的版本和项目实际运行的版本

~/apple/java-work/mime/mimo-api main +4 !1 > php -v                                                                                                                                                       node system rb 2.7.6 16:31:11
PHP 7.4.33 (cli) (built: Jul 13 2023 19:26:04) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.33, Copyright (c), by Zend Technologies

框架用的是yii2,我找的文档地址是这个。

搭建一切正常,需要安装php-fmp来搭配nginx来访问到服务。

如果是纯页面访问,则直接php yii serve来启动服务

下载依赖

composer install

拿到手怎么都下载不了MongoDB的依赖,只能先排除下载

composer install --ignore-platform-req=ext-mongodb 

2. 一把是通过这种方式请求,fmp和nginx

在安装php的时候勾选php-fmp即可,也可单独安装。
首先需要启动php-fmp,它的配置文件的路径(我电脑上)/usr/local/etc/php/8.2/php-fpm.d/www.conf

; The address on which to accept FastCGI requests.
; Valid syntaxes are:
;   'ip.add.re.ss:port'    - to listen on a TCP socket to a specific IPv4 address on
;                            a specific port;
;   '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on
;                            a specific port;
;   'port'                 - to listen on a TCP socket to all addresses
;                            (IPv6 and IPv4-mapped) on a specific port;
;   '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
listen = 127.0.0.1:9000

默认占用9000端口,大概流程就是请求接口到nginx(nginx支持的路径方式),在转发到9000端口也就是fmp服务中,变为适合PHP路由请求的方式。以此来实现接口调用。

启动服务,先启动php-fmp,在启动nginx

php-fmp

需要注意的是php-fmp找php文件的默认路径为/www,所有需要和nginx下的目录对应上

docker内nginx配置

server {
    listen       80;
    server_name  localhost;
    #root   /usr/share/nginx/html;

    location / {
        client_max_body_size 10m;
        add_header "Access-Control-Allow-Origin" "*";
        index  index.php index.html index.htm default.htm;
        if (!-e $request_filename){
            #专门处理Yii2 rewrite
            rewrite ^/(.*) /index.php?r=$1 last;
        }
    }
    location ~ \.php$ {
        include fastcgi_params;
        #fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;  # 使用 PHP-FPM 监听的 socket
        fastcgi_pass 192.168.168.199:9000;
        fastcgi_index  index.php;
        #这个目录要指定到fpm下面的对应入口
        fastcgi_param SCRIPT_FILENAME /www/php-apii/web/$fastcgi_script_name;
    }
}

3.docker部署

每次启动php-fmp都需要杀掉在重新启动,找了找也有docker支持的。

3.1 php-fmp docker部署

php-fmp服务的yml文件

version: '3.7'
services:
  php01:
    image: php:7.4-fpm
    container_name: php01
    restart: always
    ports:
    - "9000:9000"
    environment:
    - TZ=Asia/Shanghai
    volumes:
    - /Users/admin/apple/java-work/php-api:/www/php-api
    - /Users/admin/apple/java-work/php-admin:/www/php-admin
    networks:
    - my-net
networks:
  my-net:
    external: true

相当于把php-api、php-admin都部署到了php-fmp服务中了,路径在/www

3.2 容器内安装插件

进入到容器内部,或者docker exec php01 /bin/bash -c 加上下面内容
mysql等直接可以使用封装好的脚本docker-php-ext-install安装的插件

docker-php-ext-install pdo_mysql
docker-php-ext-install bcmath
docker-php-ext-install sockets

redis

pecl install -o -f redis && rm -rf /tmp/pear && docker-php-ext-enable redis

mongodb

pecl install -o -f mongodb && rm -rf /tmp/pear && docker-php-ext-enable mongodb
#查看mongodb信息
php --ri mongodb

这里需要注意,mongodb在使用某些情况调用方法用到MongoDB时会需要打开ssl,还需要安装ssl依赖

#打开mongodb链接 ssl
apt-get update && \
    apt-get install -y libcurl4-openssl-dev pkg-config libssl-dev

如果项目中用到了本地缓存apcu,也需要安装查插件

pecl install -o -f apcu && rm -rf /tmp/pear && docker-php-ext-enable apcu

3.3 命令指南

#配置文件
php --ini   /usr/local/etc/php/7.4/php.ini
#扩展目录  /usr/local/lib/php/extensions/no-debug-non-zts-20190902
php-config --extension-dir
#万能指令 找不到目录的时候用,只要是在能直接执行的都能找到
which php

3.4 nginx容器

配置文件在上面已经贴过了,这里就只贴yml了

version: '2.11'
services:
  nginx01:
    image: nginx
    container_name: nginx01
    restart: always
    ports:
    - "80:80"
    environment:
    - TZ=Asia/Shanghai
    volumes:
    - ./nginx.conf:/etc/nginx/nginx.conf
    - ./logs:/var/log/nginx
    networks:
    - my-net #自己配置的网卡
networks:
  my-net:
    external: true

关于my-net,自定义的网卡,在nginx中的配置文件转发到php-fmp就可以直接填php01:9000

关于php中的定时任务,我这里推荐用操作系统的定时任务来实现,例如在liunx上

#宿主机
#查看定时任务
crontab -l
#编辑定时任务
crontab -e
#每分钟一次
* * * * * docker exec mimo-php /bin/bash -c "cd /www/-api/task && ./php_task.sh"

部署完了做接口请求就可以变成这样了

#yii服务或者apache的模式访问
http://localhost:82/index.php?r=/site/test?name=12345
#使用了nginx+php-fmp的模式下访问
http://localhost:82/site/test?name=12345

其他里面的语法已经方法和路由的定义,自行百度和看API吧,如果会JAVA这个也不是很难。

以上就是本文的全部内容了!

上一篇:随手记录第十话 – 升级SpringBoot3.0 + JDK17的踩坑记录
下一篇:随手记录第十二话 – xxx

非学无以广才,非志无以成学。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值