H5 部署与路由: - manifest.json: router.base 改为 "/" 适配 public/ 根目录部署 - nginx-crmeb.conf: 恢复与 feature/fsgx 一致的原始配置 - App.vue: PC端重定向路径改为动态推导,修复死循环加载问题 - static/html/pc.html: 动态推导 H5 根路径,适配本地/云端两种部署 H5登录: - pages/users/login/index.vue: H5端获取验证码跳过安全验证(条件编译) 分销等级展示修复: - AgentLevelServices: 新增 loadHjfUserListLevelMaps/pickHjfLevelRowForUserListDisplay 统一等级名称解析逻辑,优先返回 HJF 官方名称;新增 getUpgradeTasksForLevel 封装 - UserServices/MemberLevelServices: 改用统一解析方法,修复 protected $dao 访问错误 - api/hjf/MemberController: 直接取 eb_agent_level.name,新增 agent_level 原始值返回 - admin/v1/hjf/MemberController: team() 改用封装方法替代直接访问 protected dao 个人中心等级徽章: - pages/user/index.vue + member/index.vue: memberInfo 沿链路透传 - member/template1.vue: UID右侧显示HjfMemberBadge,直接读 userInfo.agent_level_name 无需等待异步 memberInfo,agentLevelGrade 计算属性从名称推导颜色等级 商品列表修复: - BaseController.php/Common.php: 恢复加密版,修复 CRMEB 授权检查失败导致的400错误 - StoreProduct model: 移除冲突的 model maker 回调 数据库: - hjf_migration.sql: 完善会员等级体系迁移脚本 - eb_agent_level.sql: 新增等级初始数据脚本 Made-with: Cursor
178 lines
6.0 KiB
Markdown
178 lines
6.0 KiB
Markdown
# PHP 设置说明(CRMEB Pro v3.5)
|
||
|
||
本文档按 [CRMEB 官方:4.PHP设置](https://doc.crmeb.com/pro_s/prov35/31312) 整理,并补充本地/macOS 开发说明。
|
||
|
||
## 步骤总结
|
||
|
||
| 步骤 | 内容 |
|
||
|------|------|
|
||
| 一 | 安装 PHP 扩展:**fileinfo**、**redis**、**Swoole4** |
|
||
| 二 | 删除禁用函数中的 **proc_open** |
|
||
| 三 | 配置修改:脚本内存限制 **300M 及以上** |
|
||
| 四 | 非企业版:添加 `extension = swoole_loader80.so` 并重载配置;**企业版无需此步** |
|
||
|
||
---
|
||
|
||
## 步骤详解
|
||
|
||
### 1. 安装扩展:fileinfo、redis、Swoole4
|
||
|
||
- **宝塔**:软件商城 → PHP 设置 → 安装扩展 → 勾选 fileinfo、redis、Swoole4 → 安装。
|
||
- **macOS (Homebrew)**:
|
||
```bash
|
||
# PHP 已安装前提下,扩展通常随 PHP 一起或可单独安装
|
||
pecl install redis
|
||
pecl install swoole
|
||
```
|
||
若使用 `brew install php`,fileinfo 多已内置;需确认 `php.ini` 中已启用:
|
||
```ini
|
||
extension=fileinfo
|
||
extension=redis
|
||
extension=swoole
|
||
```
|
||
|
||
### 2. 删除禁用函数 proc_open
|
||
|
||
- **宝塔**:PHP 设置 → 禁用函数 → 找到 `proc_open` → 删除 → 保存。
|
||
- **本地 php.ini**:打开 `php.ini`,在 `disable_functions` 中移除 `proc_open`(若存在)。
|
||
- 查找 php.ini 路径:`php --ini` 或 `php -i | grep "Loaded Configuration"`。
|
||
|
||
### 3. 脚本内存限制 300M 及以上
|
||
|
||
- **宝塔**:PHP 设置 → 配置修改 → 搜索 `memory_limit` → 改为 `300M` 或更高 → 保存。
|
||
- **本地 php.ini**:
|
||
```ini
|
||
memory_limit = 300M
|
||
```
|
||
|
||
### 4. Swoole Loader(非企业版)
|
||
|
||
- **宝塔**:
|
||
1. 将项目内 `help/swoole-loader/` 下对应 PHP 版本的 `.so` 文件复制到 PHP 扩展目录(如 `/www/server/php/80/lib/php/extensions/...`)。
|
||
2. PHP 设置 → 配置文件 → 在文件末尾添加:
|
||
```ini
|
||
extension = swoole_loader80.so
|
||
```
|
||
(文件名按实际版本,如 80 即 PHP 8.0)
|
||
3. 服务 → 重载配置 / 重启 PHP。
|
||
|
||
- **企业版**:无需配置 swoole_loader,使用开源 Swoole 扩展即可。本项目已做兼容,可仅安装开源 `swoole` 扩展。
|
||
|
||
---
|
||
|
||
## 长期固定使用 PHP 8.0(推荐)
|
||
|
||
CRMEB Pro v3.5 官方以 **PHP 8.0** 为基准;与 **Swoole Loader**、扩展版本一一对应,建议本机 CLI 与文档统一为 **8.0**,避免混用 8.1 导致 Loader/扩展不匹配。
|
||
|
||
### 1. 安装并链接 Homebrew `php@8.0`
|
||
|
||
```bash
|
||
brew install php@8.0
|
||
```
|
||
|
||
**Intel Mac(前缀一般为 `/usr/local`)** — 让终端默认 `php` 指向 8.0:
|
||
|
||
```bash
|
||
brew unlink php@8.1 2>/dev/null || true
|
||
brew link php@8.0 --force --overwrite
|
||
```
|
||
|
||
若不想改全局 link,只在当前用户把 8.0 放在 PATH 最前(写入 `~/.zshrc` 后 `source ~/.zshrc`):
|
||
|
||
```bash
|
||
# Intel
|
||
export PATH="/usr/local/opt/php@8.0/bin:/usr/local/opt/php@8.0/sbin:$PATH"
|
||
```
|
||
|
||
**Apple Silicon(前缀一般为 `/opt/homebrew`)**:
|
||
|
||
```bash
|
||
export PATH="/opt/homebrew/opt/php@8.0/bin:/opt/homebrew/opt/php@8.0/sbin:$PATH"
|
||
```
|
||
|
||
### 2. 验证
|
||
|
||
```bash
|
||
# `which php` 应指向 php@8.0,例如:
|
||
# Intel: /usr/local/opt/php@8.0/bin/php
|
||
# Apple 硅: /opt/homebrew/opt/php@8.0/bin/php
|
||
which php
|
||
php -v # 应显示 PHP 8.0.x
|
||
php -m | grep -E 'swoole|swoole_loader'
|
||
```
|
||
|
||
- **swoole**、**swoole_loader**(非企业版)均应出现;Loader 只需在 **PHP 8.0** 的 `php.ini` / `conf.d` 里配置 **一处**,避免重复加载告警。
|
||
|
||
### 3. 启动 API
|
||
|
||
始终在**项目根目录**执行:
|
||
|
||
```bash
|
||
cd /path/to/pro_v3.5.1
|
||
# 建议写死 8.0 路径,避免 PATH 里仍是 8.1:
|
||
/usr/local/opt/php@8.0/bin/php -d memory_limit=300M think swoole
|
||
# Apple 硅用:/opt/homebrew/opt/php@8.0/bin/php ...
|
||
```
|
||
|
||
或使用 `./help/start-api.sh`(**仅**使用上述 php@8.0 路径或环境变量 `CRMEB_PHP_BIN`,不再回退到任意 `php`)。
|
||
|
||
---
|
||
|
||
## 验证与本地启动
|
||
|
||
### 一键检查(项目根目录执行)
|
||
|
||
```bash
|
||
cd /path/to/pro_v3.5.1
|
||
php -v
|
||
php -m | grep -E "fileinfo|redis|swoole" # 应看到三行
|
||
php -r "echo 'memory_limit='.ini_get('memory_limit').PHP_EOL;"
|
||
php -r "echo in_array('proc_open', array_map('trim', explode(',', ini_get('disable_functions')))) ? 'proc_open 仍被禁用' : 'proc_open 已可用'; echo PHP_EOL;"
|
||
```
|
||
|
||
- **memory_limit** 若小于 300M,请修改 `php.ini` 中 `memory_limit = 300M`,或使用下方启动脚本(脚本会临时指定 300M)。
|
||
- **proc_open** 若被禁用,请在 `php.ini` 的 `disable_functions` 中删掉 `proc_open`。
|
||
|
||
### 启动 API 服务(推荐)
|
||
|
||
内存不足 300M 时,建议用 `-d memory_limit=300M` 启动:
|
||
|
||
```bash
|
||
cd /path/to/pro_v3.5.1
|
||
php -d memory_limit=300M think swoole
|
||
```
|
||
|
||
或使用项目自带脚本(同上效果):
|
||
|
||
```bash
|
||
./help/start-api.sh
|
||
```
|
||
|
||
成功时终端会看到 `Starting swoole server...`,API 监听在 **http://127.0.0.1:20199**。
|
||
|
||
### 若仍报「Swoole Loader ext not installed」
|
||
|
||
部分 CRMEB 加密组件会检查商业扩展 **swoole_loader**。需安装本项目自带的 Loader 后再启动:
|
||
|
||
1. **查看 PHP 扩展目录**:`php -i | grep "extension_dir"`。
|
||
2. **复制对应 .so**(二选一):
|
||
- **Mac Intel**:`help/swoole_loader_mac/swoole_loader_80_nts.so`
|
||
- **Mac M1/M2**:`help/swoole_loader_mac_m1/swoole_loader_80_nts_arm64.so`
|
||
- **Linux**:`help/swoole_loader/swoole_loader80.so`(按版本选 80/81 等)
|
||
3. 在 **php.ini** 末尾添加(文件名与复制的 so 一致):
|
||
```ini
|
||
extension = swoole_loader_80_nts.so
|
||
```
|
||
Mac M1 用:`extension = swoole_loader_80_nts_arm64.so`
|
||
4. 重载配置:`brew services restart php` 或重启 PHP-FPM/Web 服务;CLI 直接新开终端再执行 `./help/start-api.sh`。
|
||
|
||
**本机已复制 .so**:若已把 `help/swoole_loader_mac/swoole_loader_80_nts.so` 复制到扩展目录,只需在 `php.ini` 或 `conf.d/` 中加入一行(可参考 `help/swoole-loader-local.ini`)后重载 PHP。
|
||
5. 或使用 **CRMEB 企业版**(通常无需 swoole_loader)。
|
||
|
||
---
|
||
|
||
## 参考
|
||
|
||
- [4.PHP设置 - CRMEB 文档](https://doc.crmeb.com/pro_s/prov35/31312)
|
||
- 项目根目录 `README.md` 中的「环境配置」章节
|