分类: PHP
-
box, by Hyperf
Box 致力于帮助提升 PHP 应用程序的编程体验,尤其有助于 Hyperf 应用,管理 PHP 环境和相关依赖,同时提供将 PHP 应用程序打包为二进制程序的能力,还提供反向代理服务来管理和部署 Swoole/Swow 服务。
目前还是早期实验版本,欢迎试玩 ~
使用
安装 box
Mac
wget https://github.com/hyperf/box/releases/download/v0.5.4/box_x86_64_macos -O box sudo mv ./box /usr/local/bin/box sudo chmod 755 /usr/local/bin/box // 确保 /usr/local/bin/box 在你的 $PATH 环境中,或者将 `box` 放到你想要的任意 $PATH 路径中
Linux x86_64
wget https://github.com/hyperf/box/releases/download/v0.5.4/box_x86_64_linux -O box sudo mv ./box /usr/local/bin/box sudo chmod 755 /usr/local/bin/box // 确保 /usr/local/bin/box 在你的 $PATH 环境中,或者将 `box` 放到你想要的任意 $PATH 路径中
Linux aarch64
目前我们缺少 AARCH64 Github Actions Runner,所以无法及时构建 AARCH64 版本的 bin 文件。
wget https://github.com/hyperf/box/releases/download/v0.0.3/box_php8.1_aarch64_linux -O box sudo mv ./box /usr/local/bin/box sudo chmod 755 /usr/local/bin/box // 确保 /usr/local/bin/box 在你的 $PATH 环境中,或者将 `box` 放到你想要的任意 $PATH 路径中
Windows
curl -o box.exe https://github.com/hyperf/box/releases/download/v0.5.4/box_x64_windows.exe // 将 `box.exe` 放到你想要的任意 Path 环境变量路径中,同时 Windows 版本在执行时需要在命令行中使用 `box.exe` 而不是 `box`
初始化 Github Access Token
Box 需要一个 Github 访问令牌来请求 Github API,以检索包的版本。
- 创建 Github Access Token,
workflow范围需要勾选; - 运行
box config set github.access-token <Your Token>命令来设置您的 token; - 玩得开心 ~
设置 Box Kernel
默认情况下,Box 由 Swow Kernel 提供支持,但是我们也提供了 Swoole Kernel,您可以通过
box config set kernel swoole来切换为 Swoole Kernel,但是需要注意的是,Swoole Kernel 仅支持 PHP 8.1 版本,且不支持构建二进制程序功能和 Windows 系统环境。// 设置为 Swow Kernel [默认] box config set kernel swow // 设置为 Swoole Kernel (不支持 Windows) box config set kernel swoole
命令
box get pkg@version从远程安装包,pkg是包名,version是包的版本,box get pkg表示安装最新版本的 pkg,例如, 运行box get php@8.1安装 PHP 8.1, 运行box get composer安装最新的 composer binbox build-prepare为build和build-self命令做好相关环境的准备box build-self构建boxbin 本身box build <path>将 Hyperf 应用程序构建成二进制文件box self-update将boxbin 更新至最新版本box config list输出 box 配置文件的所有内容box config get <key>从配置文件中按键检索值box config set <key> <value>通过 key 设置 value 到配置文件中box config unset <key>按 key 删除配置值box config set-php-version <version>设置 box 的当前 PHP 版本,可用值:8.0 | 8.1box config get-php-version <version>获取 box 的当前设置的 PHP 版本box reverse-proxy -u <upsteamHost:upstreamPort>启动一个反向代理 HTTP 服务器,用于将 HTTP 请求转发到指定的多个上游服务器box php <argument>通过当前 box 的 PHP 版本运行任何 PHP 命令box composer <argument>通过当前 box 的 PHP 版本运行任何 Composer 命令,composer bin 的版本取决于最后执行的get composer命令box php-cs-fixer <argument>通过当前 box 的 PHP 版本运行任何php-cs-fixer命令,composer bin 的版本取决于最后执行的get php-cs-fixer命令box cs-fix <argument>通过当前 box 的 PHP 版本运行php-cs-fixer fix命令,composer bin 的版本取决于最后执行的get php-cs-fixer命令box phpstan <argument>通过当前 box 的 PHP 版本运行任何phpstan命令,composer bin 的版本取决于最后执行的get phpstan命令,此命令仅在 box v0.3.0 及以上的版本中可用box pint <argument>通过当前 box 的 PHP 版本运行任何pint命令,composer bin 的版本取决于最后执行的get pint命令,此命令仅在 box v0.3.0 及以上的版本中可用box version输出当前 box bin 的版本号
关于 Swow-Skeleton
希望体验 Box 完整功能的朋友,需要通过 Swow Kernel 来运行,因此您需要基于 hyperf/swow-skeleton 来运行您的项目,可通过
box composer create-project hyperf/swow-skeleton:dev-master命令来创建一个基于 Hyperf 3.0 RC 版的 Swow 骨架项目。 - 创建 Github Access Token,
-
Swoole-Cli 5.0.1 使用说明
Swoole-Cli 5.0.1 使用说明

Swoole-Cli 介绍
Swoole-Cli是一个 PHP 的二进制发行版,集成了swoole、php 内核、php-cli、php-fpm以及多个常用扩展。Swoole-Cli是全部静态编译打包的,不依赖任何操作系统的so动态链接库,具备非常好的移植性,可以在任意Linux系统之间复制,下载即可使用。GitHub: https://github.com/swoole/swoole-cli
操作系统
Swoole-Cli会提供Linux、macOS、Windows(Cygwin)3种操作系统的二进制包的支持。Windows环境推荐使用WSL主要更新
PHP同步到8.1.12版本- 增加了
mongodb扩展 - 集成了
cli http server和php-fpm
下载安装
下载地址:
linux x64:http://img.faxian001.com/download/swoole-cli-v5.0.1-linux-x64.tar.xz- windows: http://img.faxian001.com/download/swoole-cli-v5.0.1-cygwin64.zip
直接下载后放置到
/usr/bin目录,并且设置为可运行,chmod +x /usr/bin/swoole-cli即可。在终端中执行:swoole-cli -v swoole-cli -mShell
替代 PHP
将
Swoole-Cli软链接到php,替代PHPln -s /usr/bin/swoole-cli /usr/bin/php php -v # 安装 composer curl -sS https://getcomposer.org/installer | phpShell
配置文件
swoole-cli默认不加载任何php.ini配置文件。可通过
-d参数来设置PHP选项或使用-c参数指定加载的php.ini配置文件。swoole-cli -d swoole.use_shortname=off bin/hyperf.php start swoole-cli -c /tmp/php.ini -vShell
启动 PHP-FPM
swoole-cli集成了PHP-FPM,可使用-P命令来启动fpm。# 查看帮助文件 swoole-cli -P -h # 运行 FPM swoole-cli -P --fpm-config /opt/php-8.1/etc/php-fpm.conf -p /opt/php-8.1/var # 关闭守护进程 swoole-cli -P --fpm-config /opt/php-8.1/etc/php-fpm.conf -p /opt/php-8.1/var -F # 使用 root 账户启动 swoole-cli -P --fpm-config /opt/php-8.1/etc/php-fpm.conf -p /opt/php-8.1/var -F -RShell
启动 CLI Server
# 使用 Laravel Artisan 工具 swoole-cli artisan serve # 启动 CLI Server swoole-cli -S 127.0.0.1:9001Shell
启动 Swoole Server
server.php
$http = new Swoole\Http\Server('127.0.0.1', 9501); $http->on('start', function ($server) { echo "Swoole http server is started at http://127.0.0.1:9501\n"; }); $http->on('request', function ($request, $response) { $response->header('Content-Type', 'text/plain'); $response->end('Hello World'); }); $http->start();PHP
执行
swoole-cli server.phpShell
扩展列表
Swoole-Cli的PHP版本和所加载的扩展是确定的,因此不需要担心缺少某些功能扩展函数。htf@htf-ThinkPad-T470p:~/workspace/cli-swoole$ ./bin/swoole-cli -m [PHP Modules] bcmath bz2 Core ctype curl date dom exif fileinfo filter gd gmp hash iconv imagick intl json libxml mbstring mongodb mysqli mysqlnd openssl pcntl pcre PDO pdo_mysql pdo_sqlite Phar posix redis Reflection session SimpleXML soap sockets sodium SPL sqlite3 standard swoole tokenizer xml xmlreader xmlwriter xsl yaml zip zlib [Zend Modules] -
Composer 国内加速,修改镜像源
如何修改镜像源
可以使用阿里巴巴提供的
Composer全量镜像 https://mirrors.aliyun.com/composer/a). 配置只在当前项目生效
composer config repo.packagist composer https://mirrors.aliyun.com/composer/ 取消当前项目配置 composer config --unset repos.packagistb). 配置全局生效
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 取消全局配置 composer config -g --unset repos.packagist -
think-swoole应用-微服务之RPC远程调用通信实战
RPC(Remote Procedure Call):远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的思想。
解决问题:
解决分布式系统中,服务之间的调用问题。
远程调用时,要能够像本地调用一样方便,让调用者感知不到远程调用的逻辑。Think-Swoole中已经实现了的基于TCP的PRC,这样我们使用传统型框架也可以做简单的分布式架构应用了。
一、配置服务端
1,修改 config/swoole.php'rpc' => [ 'server' => [ 'enable' => true, 'port' => 9000, 'services' => [ \app\rpc\service\UserService::class ], ], 'client' => [ ], ],2,新增rpc目录结构如下:

3,定义接口抽象方法<?php// +----------------------------------------------------------------------// | najing [ 通用后台管理系统 ]// +----------------------------------------------------------------------// | Copyright (c) 2020 http://www.najingquan.com ;All rights reserved.// +----------------------------------------------------------------------// | Author: 救火队队长namespace app\rpc\interfaces;interface UserInterface{ public function add($name);}
4,实现接口方法
<?php// +----------------------------------------------------------------------// | najing [ 通用后台管理系统 ]// +----------------------------------------------------------------------// | Copyright (c) 2020 http://www.najingquan.com ;All rights reserved.// +----------------------------------------------------------------------// | Author: 救火队队长namespace app\rpc\service;use app\rpc\interfaces\UserInterface;class UserService implements UserInterface{ public function add($name) { return "您要新增的用户名是:{$name}"; }}
服务端的操作就已经完成。 可以开启swoole 命令 php think swoole start
二、配置客户端
1,修改 config/swoole.php'rpc' => [ 'server' => [ 'enable' => false, 'port' => 9000, 'services' => [ ], ], 'client' => [ 'userservice'=>[ //RPC服务端的ip地址 'host' => '127.0.0.1', //RPC服务端的端口 'port' => 9000 ] ], ],2,生成RPC服务接口
php think rpc:interface
会在app目录下生成一个rpc.php的文件,它就是RPC服务接口文件
文件内容大致:<?php/** * This file is auto-generated. */declare(strict_types=1);namespace rpc\contract\userservice;interface UserInterface{ public function add($name);}return ['userservice' => ['rpc\contract\userservice\UserInterface']];注意return中就是每个服务接口的命名空间;在控制器中使用该命名空间实例对象就可以调用
3,Controller调用
<?php// +----------------------------------------------------------------------// | najing [ 通用后台管理系统 ]// +----------------------------------------------------------------------// | Copyright (c) 2020 http://www.najingquan.com ;All rights reserved.// +----------------------------------------------------------------------// | Author: 救火队队长namespace app\controller;use app\BaseController;use rpc\contract\userservice\UserInterface;class User extends BaseController{ public function add(UserInterface $user) { echo $user->add("救火队队长"); }}4,浏览器访问客户端Controller
6
收藏
点击回复 -
php替换html里面的图片相对路径地址为绝对路径
/** * 替换html里面的图片相对路径地址为绝对路径 * @param string $content 请求html内容 * @param array $prefix 绝对url地址 */ function pregReplaceImg2($content,$prefix) { $contentAlter = preg_replace_callback('/(<[img|IMG].*?src=[\'\"])([\s\S]*?)([\'\"])[\s\S]*?/i', function($match)use($prefix){ if(strstr($match[2], 'http://') == false && strstr($match[1], 'https://') == false) return $match[1].$prefix.$match[2].$match[3]; else return $match[1].$match[2].$match[3]; } , $content); return $contentAlter; }