Skip to content

Commit fafe7d5

Browse files
authored
Merge pull request #835 from crazywhalecc/chore/test-and-validate
Chore: PHPUnit test & docs & PHPDoc for vendor mode
1 parent 6c3ff7d commit fafe7d5

27 files changed

+2112
-186
lines changed

docs/zh/contributing/index.md

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,45 +4,48 @@
44

55
## 贡献方法
66

7-
如果你有代码或文档想要贡献,需要先了解以下内容
7+
如果你有代码或文档要贡献,以下是你需要首先了解的内容
88

99
1. 你要贡献什么类型的代码?(新扩展、修复 Bug、安全问题、项目框架优化、文档)
1010
2. 如果你贡献了新文件或新片段,你的代码是否经过 `php-cs-fixer``phpstan` 的检查?
1111
3. 在贡献代码前是否充分阅读了 [开发指南](../develop/)
1212

13-
如果你可以回答以上问题,并已经对代码做出了修改,可以及时在项目 GitHub 仓库发起 Pull Request。待代码审查完毕后,可根据建议修改代码,或直接合并到主分支。
13+
如果你能回答上述问题并对代码进行了修改,可以及时在项目 GitHub 仓库发起 Pull Request。
14+
代码审查完成后,可以根据建议修改代码,或直接合并到主分支。
1415

1516
## 贡献类型
1617

17-
本项目主要用途是编译静态链接的 PHP 二进制,基于 `symfony/console` 编写了命令行处理功能。在开发之前,如果你对它不够熟悉,
18-
可以先查看 [symfony/console 文档](https://symfony.com/doc/current/components/console.html)
18+
本项目的主要目的是编译静态链接的 PHP 二进制文件,命令行处理功能基于 `symfony/console` 编写。
19+
在开发之前,如果你对它不够熟悉,请先查看 [symfony/console 文档](https://symfony.com/doc/current/components/console.html)
1920

20-
### 安全问题
21+
### 安全更新
2122

22-
因为本项目基本上是属于本地运行的 PHP 项目,一般来说不会存在远程攻击行为。但如果你发现了此类问题,请**不要**在 GitHub 仓库提交 PR 或 Issue,
23-
你需要通过 [邮件](mailto:[email protected]) 的方式联系项目维护者(crazywhalecc)。
23+
因为本项目基本上是一个本地运行的 PHP 项目,一般来说不会有远程攻击。
24+
但如果你发现此类问题,请**不要**在 GitHub 仓库提交 PR 或 Issue,
25+
你需要通过 [邮件](mailto:[email protected]) 联系项目维护者(crazywhalecc)。
2426

2527
### 修复 Bug
2628

27-
修复 Bug 一般不涉及项目结构和框架的修改,所以如果你可以定位到错误代码并直接修复它,请直接提交 PR。
29+
修复 Bug 一般不涉及项目结构和框架的修改,所以如果你能定位到错误代码并直接修复它,请直接提交 PR。
2830

2931
### 新扩展
3032

31-
对于添加一个新扩展来说,你需要先了解一些本项目的基本结构,以及如何根据现有的逻辑添加新扩展。在本页的下一章节将会详细介绍。
33+
对于添加新扩展,你需要了解项目的一些基本结构以及如何根据现有逻辑添加新扩展。
34+
这将在本页的下一节中详细介绍。
3235
总的来说,你需要:
3336

3437
1. 评估扩展是否可以内联编译到 PHP 中。
3538
2. 评估扩展的依赖库(如果有)是否可以静态编译。
36-
3. 写出扩展的依赖库在不同平台编译命令
37-
4. 验证扩展及其依赖库能否与现有扩展和依赖库兼容
38-
5. 验证扩展在 `cli``micro``fpm``embed` 几种 SAPI 中均正常工作
39-
6. 编写文档,加入你的扩展
39+
3. 编写不同平台的库编译命令
40+
4. 验证扩展及其依赖项与现有扩展和依赖项兼容
41+
5. 验证扩展在 `cli``micro``fpm``embed` SAPIs 中正常工作
42+
6. 编写文档并添加你的扩展
4043

4144
### 项目框架优化
4245

4346
如果你已经熟悉 `symfony/console` 的工作原理,并同时要对项目的框架进行一些修改或优化,请先了解以下事情:
4447

45-
1. 加入扩展不属于项目框架优化,但如果你在加入新的扩展时发现不得不优化框架,则需先对框架本身进行修改,然后再加入扩展
46-
2. 对于一些大规模逻辑修改(例如涉及 LibraryBase、Extension 对象等的修改),建议先提交 Issue 或 Draft PR 进行讨论方案
47-
3. 项目早期为纯中文开发项目,代码中存在一部分中文的注释。国际化项目后你可以提交 PR 将这些注释翻译为英语。
48-
4. 请不要在代码中提交包含较多无用的代码片段,例如大量未被使用的变量、方法、类、重复写了很多次的代码
48+
1. 添加扩展不属于项目框架优化,但如果你在添加新扩展时发现必须优化框架,则需要先修改框架本身,然后再添加扩展
49+
2. 对于一些大规模逻辑修改(例如涉及 LibraryBase、Extension 对象等的修改),建议先提交 Issue 或 Draft PR 进行讨论
50+
3. 在项目早期,它是一个纯私有开发项目,代码中有一些中文注释。项目国际化后,你可以提交 PR 将这些注释翻译为英语。
51+
4. 请不要在代码中提交更多无用的代码片段,例如大量未使用的变量、方法、类以及多次重写的代码

docs/zh/develop/index.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
开发本项目需要安装部署 PHP 环境,以及一些 PHP 项目常用的扩展和 Composer。
44

5-
项目的开发环境和运行环境几乎完全一致你可以参照 **指南-本地构建** 部分安装系统 PHP 或使用本项目预构建的静态 PHP 作为环境这里不再赘述。
5+
项目的开发环境和运行环境几乎完全一致你可以参照 **手动构建** 部分安装系统 PHP 或使用本项目预构建的静态 PHP 作为环境这里不再赘述。
66

77
抛开用途,本项目本身其实就是一个 `php-cli` 程序,你可以将它当作一个正常的 PHP 项目进行编辑和开发,同时你需要了解不同系统的 Shell 命令行。
88

@@ -18,10 +18,10 @@
1818
curl,dom,filter,mbstring,openssl,pcntl,phar,posix,sodium,tokenizer,xml,xmlwriter
1919
```
2020

21-
static-php-cli 项目本身不需要这么多扩展,但在开发过程中,你会用到 ComposerPHPUnit 等工具,它们需要这些扩展。
21+
static-php-cli 项目本身不需要这么多扩展,但在开发过程中,你会用到 ComposerPHPUnit 等工具,它们需要这些扩展。
2222

2323
> 对于 static-php-cli 自身构建的 micro 自执行二进制,仅需要 `pcntl,posix,mbstring,tokenizer,phar`
2424
2525
## 开始开发
2626

27-
继续向下查看项目结构的文档,你可以从中了解 `static-php-cli` 是如何运作的
27+
继续向下查看项目结构文档,你可以学习 `static-php-cli` 是如何工作的

docs/zh/faq/index.md

Lines changed: 35 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -4,28 +4,28 @@
44

55
## php.ini 的路径是什么?
66

7-
在 Linux、macOS 和 FreeBSD 上,`php.ini` 的默认路径是 `/usr/local/etc/php/php.ini`
7+
在 Linux、macOS 和 FreeBSD 上,`php.ini` 的路径是 `/usr/local/etc/php/php.ini`
88
在 Windows 中,路径是 `C:\windows\php.ini``php.exe` 所在的当前目录。
99
可以在 *nix 系统中使用手动构建选项 `--with-config-file-path` 来更改查找 `php.ini` 的目录。
1010

11-
此外,在 Linux、macOS 和 FreeBSD 上,`/usr/local/etc/php/conf.d` 目录中的 `*.ini` 文件也会被加载。
11+
此外,在 Linux、macOS 和 FreeBSD 上,`/usr/local/etc/php/conf.d` 目录中的 `.ini` 文件也会被加载。
1212
在 Windows 中,该路径默认为空。
1313
可以使用手动构建选项 `--with-config-file-scan-dir` 更改该目录。
1414

1515
PHP 默认也会从 [其他标准位置](https://www.php.net/manual/zh/configuration.file.php) 中搜索 `php.ini`
1616

17-
## 静态编译的 PHP 可以安装扩展吗
17+
## 静态编译的 PHP 可以安装扩展吗
1818

1919
因为传统架构下的 PHP 安装扩展的原理是使用 `.so` 类型的动态链接的库方式安装新扩展,而使用本项目编译的静态链接的 PHP。但是静态链接在不同操作系统有不同的定义。
2020

21-
首先对于 Linux 系统来说,静态链接的二进制文件是不会链接系统的动态链接库的,纯静态链接的二进制无法加载动态库,所以无法添加新的扩展
22-
同时,在纯静态模式下你也不能使用 `ffi` 等扩展加载外部的 `.so` 模块。
21+
首先,对于 Linux 系统,静态链接的二进制文件不会链接系统的动态链接库。纯静态链接的二进制文件(`-all-static`)无法加载动态库,因此无法添加新扩展
22+
同时,在纯静态模式下,你也不能使用 `ffi` 等扩展来加载外部 `.so` 模块。
2323

24-
你可以通过命令 `ldd buildroot/bin/php` 来查看你在 Linux 下构建的二进制是否为纯静态链接的
24+
你可以使用命令 `ldd buildroot/bin/php` 来检查你在 Linux 下构建的二进制文件是否为纯静态链接
2525

26-
如果你 [构建 GNU libc 兼容的 PHP](../guide/build-with-glibc),你可以使用 `ffi` 扩展加载外部的 `.so` 模块,并且加载具有相同 ABI 的 `.so` 扩展。
26+
如果你 [构建基于 GNU libc PHP](../guide/build-with-glibc),你可以使用 `ffi` 扩展来加载外部 `.so` 模块,并加载具有相同 ABI 的 `.so` 扩展。
2727

28-
例如,你可以使用以下命令构建一个 glibc 动态链接的静态 PHP 二进制,同时支持 FFI 扩展和加载相同 PHP 版本和相同 TS 类型的 `xdebug.so` 扩展:
28+
例如,你可以使用以下命令构建一个与 glibc 动态链接的静态 PHP 二进制文件,支持 FFI 扩展并加载相同 PHP 版本和相同 TS 类型的 `xdebug.so` 扩展:
2929

3030
```bash
3131
bin/spc-gnu-docker download --for-extensions=ffi,xml --with-php=8.4
@@ -34,56 +34,58 @@ bin/spc-gnu-docker build ffi,xml --build-cli --debug
3434
buildroot/bin/php -d "zend_extension=/path/to/php{PHP_VER}-{ts/nts}/xdebug.so" --ri xdebug
3535
```
3636

37-
对于 macOS 平台来说,macOS 下的几乎所有二进制文件都无法真正纯静态链接,几乎所有二进制文件都会链接 macOS 的系统库`/usr/lib/libresolv.9.dylib``/usr/lib/libSystem.B.dylib`
38-
因此,在 macOS 上,您可以直接构建出使用静态编译的 PHP 二进制文件和动态链接的扩展
37+
对于 macOS 平台,macOS 下的几乎所有二进制文件都无法真正纯静态链接,几乎所有二进制文件都会链接 macOS 系统库`/usr/lib/libresolv.9.dylib``/usr/lib/libSystem.B.dylib`
38+
因此,在 macOS 上,你可以**直接**使用 SPC 构建具有动态链接扩展的静态编译 PHP 二进制文件
3939

4040
1. 使用 `--build-shared=XXX` 选项构建共享扩展 `xxx.so`。例如:`bin/spc build bcmath,zlib --build-shared=xdebug --build-cli`
41-
2. 您将获得 `buildroot/modules/xdebug.so``buildroot/bin/php`
41+
2. 你将获得 `buildroot/modules/xdebug.so``buildroot/bin/php`
4242
3. `xdebug.so` 文件可用于版本和线程安全相同的 php。
4343

44-
## 可以支持 Oracle 数据库扩展吗
44+
## 可以支持 Oracle 数据库扩展吗
4545

4646
部分依赖库闭源的扩展,如 `oci8``sourceguardian` 等,它们没有提供纯静态编译的依赖库文件(`.a`),仅提供了动态依赖库文件(`.so`),
4747
这些扩展无法使用源码的形式编译到 static-php-cli 中,所以本项目可能永远也不会支持这些扩展。不过,理论上你可以根据上面的问题在 macOS 和 Linux 下接入和使用这类扩展。
4848

4949
如果你对此类扩展有需求,或者大部分人都对这些闭源扩展使用有需求,
5050
可以看看有关 [standalone-php-cli](https://github.com/crazywhalecc/static-php-cli/discussions/58) 的讨论。欢迎留言。
5151

52-
## 支持 Windows 吗
52+
## 支持 Windows 吗
5353

54-
该项目目前已支持 Windows,但支持的扩展数量较少Windows 的支持并不完美,主要有以下几个问题
54+
该项目目前支持 Windows,但支持的扩展数量较少Windows 支持并不完美。主要有以下问题
5555

56-
1. Windows 的编译流程与 *nix 不同,使用的工具链也不同,编译各个扩展的依赖库使用的编译工具也几乎完全不同
57-
2. Windows 版本的需求也会根据所有使用本项目的人的需求推进,如果有很多人需要,我会尽快支持相关扩展。
56+
1. Windows 的编译过程与 *nix 不同,使用的工具链也不同。用于编译每个扩展依赖库的编译工具也几乎完全不同
57+
2. Windows 版本的需求也会根据所有使用本项目的人的需求推进。如果很多人需要,我会尽快支持相关扩展。
5858

59-
## 使用 micro 可以保护我的源码吗
59+
## 我可以使用 micro 保护我的源代码吗?
6060

61-
不可以。micro.sfx 本质上是将 php 和 php 代码结合为一个文件,没有 PHP 代码编译或加密的过程。
62-
首先 php-src 是 PHP 代码的官方解释器,而且现在市面上还没有一个能兼容主流分支的 PHP 编译器。
63-
之前我在网上看到有一个项目是 BPC(Binary PHP Compiler?)可以把 PHP 编译为二进制,但是限制也是很多很多。
61+
不可以。micro.sfx 本质上是将 php 和 php 代码合并为一个文件,没有编译或加密 PHP 代码的过程。
6462

65-
加密保护代码的方向和编译也不是一回事,编译过后也可以通过逆向工程等方式拿到代码,真正保护还是通过加壳、加密代码等手段进行。
63+
首先,php-src 是 PHP 代码的官方解释器,市场上没有与主流分支兼容的 PHP 编译器。
64+
我在网上看到一个名为 BPC(Binary PHP Compiler?)的项目可以将 PHP 编译为二进制,但有很多限制。
6665

67-
所以本项目(static-php-cli)、相关项目(lwmbs、swoole-cli)都是提供一个对 php-src 源码的便捷编译工具,
68-
本项目和相关项目引用的 phpmicro 也仅仅是 PHP 的 sapi 接口封装,而不是 PHP 代码的编译工具。
69-
PHP 代码的编译器是完全不同的项目,因此不会考虑额外的情况。如果你对加密感兴趣,可以考虑使用现有的加密技术,如 Swoole Compiler、Source Guardian 等。
66+
加密和保护代码的方向与编译不同。编译后,也可以通过逆向工程等方法获得代码。真正的保护仍然通过打包和加密代码等手段进行。
67+
68+
因此,本项目(static-php-cli)和相关项目(lwmbs、swoole-cli)都提供了 php-src 源代码的便捷编译工具。
69+
本项目和相关项目引用的 phpmicro 只是 PHP 的 sapi 接口封装,而不是 PHP 代码的编译工具。
70+
PHP 代码的编译器是一个完全不同的项目,因此不考虑额外的情况。
71+
如果你对加密感兴趣,可以考虑使用现有的加密技术,如 Swoole Compiler、Source Guardian 等。
7072

7173
## 无法使用 ssl
7274

73-
**更新:该问题已在最新版本的 static-php-cli 中修复,现在默认读取系统的证书文件。如果你仍然遇到问题,再尝试下方的解决方案**
75+
**更新:该问题已在最新版本的 static-php-cli 中修复,现在默认读取系统的证书文件。如果你仍然遇到问题,请尝试下面的解决方案**
7476

75-
使用 curl、pgsql 等 请求 HTTPS 网站或建立 SSL 连接时,可能存在 `error:80000002:system library::No such file or directory` 错误
76-
这个错误是由于静态编译的 PHP 未通过 `php.ini` 指定 `openssl.cafile` 导致的。
77+
使用 curl、pgsql 等请求 HTTPS 网站或建立 SSL 连接时,可能会出现 `error:80000002:system library::No such file or directory` 错误
78+
此错误是由于静态编译的 PHP 未通过 `php.ini` 指定 `openssl.cafile` 导致的。
7779

78-
你可以在使用 PHP 前指定 `php.ini`并在 INI 内添加 `openssl.cafile=/path/to/your-cert.pem` 来解决这个问题
80+
你可以通过在使用 PHP 前指定 `php.ini` 并在 INI 中添加 `openssl.cafile=/path/to/your-cert.pem` 来解决此问题
7981

8082
对于 Linux 系统,你可以从 curl 官方网站下载 [cacert.pem](https://curl.se/docs/caextract.html) 文件,也可以使用系统自带的证书文件。
81-
有关不同发行版的证书位置,可参考 [Go 标准库](https://go.dev/src/crypto/x509/root_linux.go)
83+
有关不同发行版的证书位置,请参考 [Golang 文档](https://go.dev/src/crypto/x509/root_linux.go)
8284

83-
> INI 配置 `openssl.cafile` 不可以使用 `ini_set()` 函数动态设置,因为 `openssl.cafile` 是一个 `PHP_INI_SYSTEM` 类型的配置,只能在 `php.ini` 文件中设置。
85+
> INI 配置 `openssl.cafile` 不能使用 `ini_set()` 函数动态设置,因为 `openssl.cafile` `PHP_INI_SYSTEM` 类型的配置,只能在 `php.ini` 文件中设置。
8486
85-
## 为什么不支持旧版本 PHP
87+
## 为什么不支持旧版本的 PHP?
8688

87-
因为旧版本的 PHP 有很多问题,比如安全问题、性能问题、功能问题等。此外,旧版本的 PHP 很多都无法与最新的依赖库兼容,这也是不支持旧版本 PHP 的原因之一。
89+
因为旧版本的 PHP 有很多问题,如安全问题、性能问题和功能问题。此外,许多旧版本的 PHP 与最新的依赖库不兼容,这也是不支持旧版本 PHP 的原因之一。
8890

89-
你可以使用 static-php-cli 早期编译好的旧版本,如 PHP 8.0,但是不会明确支持早期版本
91+
你可以使用 static-php-cli 早期编译的旧版本,如 PHP 8.0,但不会明确支持早期版本

docs/zh/guide/action-build.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ Action 构建指的是直接使用 GitHub Action 进行编译。
55
如果你不想自行编译,可以从本项目现有的 Action 下载 Artifact,也可以从自托管的服务器下载:[进入](https://dl.static-php.dev/static-php-cli/common/)
66

77
> 自托管的二进制也是由 Action 构建而来,[项目仓库地址](https://github.com/static-php/static-php-cli-hosted)
8+
> 包含的扩展有:bcmath,bz2,calendar,ctype,curl,dom,exif,fileinfo,filter,ftp,gd,gmp,iconv,xml,mbstring,mbregex,mysqlnd,openssl,pcntl,pdo,pdo_mysql,pdo_sqlite,phar,posix,redis,session,simplexml,soap,sockets,sqlite3,tokenizer,xmlwriter,xmlreader,zlib,zip
89
910
## 构建方法
1011

docs/zh/guide/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ static-php-cli 是一个用于构建静态编译的 PHP 二进制的工具,目
44

55
在指南章节中,你将了解到如何使用 static-php-cli 构建独立的 php 程序。
66

7-
- [Action 构建](./action-build)
87
- [本地构建](./manual-build)
8+
- [Action 构建](./action-build)
99
- [扩展列表](./extensions)
1010

1111
## 编译环境

0 commit comments

Comments
 (0)