4
4
5
5
## php.ini 的路径是什么?
6
6
7
- 在 Linux、macOS 和 FreeBSD 上,` php.ini ` 的默认路径是 ` /usr/local/etc/php/php.ini ` 。
7
+ 在 Linux、macOS 和 FreeBSD 上,` php.ini ` 的路径是 ` /usr/local/etc/php/php.ini ` 。
8
8
在 Windows 中,路径是 ` C:\windows\php.ini ` 或 ` php.exe ` 所在的当前目录。
9
9
可以在 * nix 系统中使用手动构建选项 ` --with-config-file-path ` 来更改查找 ` php.ini ` 的目录。
10
10
11
- 此外,在 Linux、macOS 和 FreeBSD 上,` /usr/local/etc/php/conf.d ` 目录中的 ` * .ini` 文件也会被加载。
11
+ 此外,在 Linux、macOS 和 FreeBSD 上,` /usr/local/etc/php/conf.d ` 目录中的 ` .ini ` 文件也会被加载。
12
12
在 Windows 中,该路径默认为空。
13
13
可以使用手动构建选项 ` --with-config-file-scan-dir ` 更改该目录。
14
14
15
15
PHP 默认也会从 [ 其他标准位置] ( https://www.php.net/manual/zh/configuration.file.php ) 中搜索 ` php.ini ` 。
16
16
17
- ## 静态编译的 PHP 可以安装扩展吗
17
+ ## 静态编译的 PHP 可以安装扩展吗?
18
18
19
19
因为传统架构下的 PHP 安装扩展的原理是使用 ` .so ` 类型的动态链接的库方式安装新扩展,而使用本项目编译的静态链接的 PHP。但是静态链接在不同操作系统有不同的定义。
20
20
21
- 首先对于 Linux 系统来说,静态链接的二进制文件是不会链接系统的动态链接库的,纯静态链接的二进制无法加载动态库,所以无法添加新的扩展 。
22
- 同时,在纯静态模式下你也不能使用 ` ffi ` 等扩展加载外部的 ` .so ` 模块。
21
+ 首先,对于 Linux 系统,静态链接的二进制文件不会链接系统的动态链接库。纯静态链接的二进制文件( ` -all-static ` )无法加载动态库,因此无法添加新扩展 。
22
+ 同时,在纯静态模式下,你也不能使用 ` ffi ` 等扩展来加载外部 ` .so ` 模块。
23
23
24
- 你可以通过命令 ` ldd buildroot/bin/php ` 来查看你在 Linux 下构建的二进制是否为纯静态链接的 。
24
+ 你可以使用命令 ` ldd buildroot/bin/php ` 来检查你在 Linux 下构建的二进制文件是否为纯静态链接 。
25
25
26
- 如果你 [ 构建 GNU libc 兼容的 PHP] ( ../guide/build-with-glibc ) ,你可以使用 ` ffi ` 扩展加载外部的 ` .so ` 模块,并且加载具有相同 ABI 的 ` .so ` 扩展。
26
+ 如果你 [ 构建基于 GNU libc 的 PHP] ( ../guide/build-with-glibc ) ,你可以使用 ` ffi ` 扩展来加载外部 ` .so ` 模块,并加载具有相同 ABI 的 ` .so ` 扩展。
27
27
28
- 例如,你可以使用以下命令构建一个 glibc 动态链接的静态 PHP 二进制,同时支持 FFI 扩展和加载相同 PHP 版本和相同 TS 类型的 ` xdebug.so ` 扩展:
28
+ 例如,你可以使用以下命令构建一个与 glibc 动态链接的静态 PHP 二进制文件,支持 FFI 扩展并加载相同 PHP 版本和相同 TS 类型的 ` xdebug.so ` 扩展:
29
29
30
30
``` bash
31
31
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
34
34
buildroot/bin/php -d " zend_extension=/path/to/php{PHP_VER}-{ts/nts}/xdebug.so" --ri xdebug
35
35
```
36
36
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 二进制文件 :
39
39
40
40
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 ` 。
42
42
3 . ` xdebug.so ` 文件可用于版本和线程安全相同的 php。
43
43
44
- ## 可以支持 Oracle 数据库扩展吗
44
+ ## 可以支持 Oracle 数据库扩展吗?
45
45
46
46
部分依赖库闭源的扩展,如 ` oci8 ` 、` sourceguardian ` 等,它们没有提供纯静态编译的依赖库文件(` .a ` ),仅提供了动态依赖库文件(` .so ` ),
47
47
这些扩展无法使用源码的形式编译到 static-php-cli 中,所以本项目可能永远也不会支持这些扩展。不过,理论上你可以根据上面的问题在 macOS 和 Linux 下接入和使用这类扩展。
48
48
49
49
如果你对此类扩展有需求,或者大部分人都对这些闭源扩展使用有需求,
50
50
可以看看有关 [ standalone-php-cli] ( https://github.com/crazywhalecc/static-php-cli/discussions/58 ) 的讨论。欢迎留言。
51
51
52
- ## 支持 Windows 吗
52
+ ## 支持 Windows 吗?
53
53
54
- 该项目目前已支持 Windows,但支持的扩展数量较少, Windows 的支持并不完美,主要有以下几个问题 :
54
+ 该项目目前支持 Windows,但支持的扩展数量较少。 Windows 支持并不完美。主要有以下问题 :
55
55
56
- 1 . Windows 的编译流程与 * nix 不同,使用的工具链也不同,编译各个扩展的依赖库使用的编译工具也几乎完全不同 。
57
- 2 . Windows 版本的需求也会根据所有使用本项目的人的需求推进,如果有很多人需要 ,我会尽快支持相关扩展。
56
+ 1 . Windows 的编译过程与 * nix 不同,使用的工具链也不同。用于编译每个扩展依赖库的编译工具也几乎完全不同 。
57
+ 2 . Windows 版本的需求也会根据所有使用本项目的人的需求推进。如果很多人需要 ,我会尽快支持相关扩展。
58
58
59
- ## 使用 micro 可以保护我的源码吗
59
+ ## 我可以使用 micro 保护我的源代码吗?
60
60
61
- 不可以。micro.sfx 本质上是将 php 和 php 代码结合为一个文件,没有 PHP 代码编译或加密的过程。
62
- 首先 php-src 是 PHP 代码的官方解释器,而且现在市面上还没有一个能兼容主流分支的 PHP 编译器。
63
- 之前我在网上看到有一个项目是 BPC(Binary PHP Compiler?)可以把 PHP 编译为二进制,但是限制也是很多很多。
61
+ 不可以。micro.sfx 本质上是将 php 和 php 代码合并为一个文件,没有编译或加密 PHP 代码的过程。
64
62
65
- 加密保护代码的方向和编译也不是一回事,编译过后也可以通过逆向工程等方式拿到代码,真正保护还是通过加壳、加密代码等手段进行。
63
+ 首先,php-src 是 PHP 代码的官方解释器,市场上没有与主流分支兼容的 PHP 编译器。
64
+ 我在网上看到一个名为 BPC(Binary PHP Compiler?)的项目可以将 PHP 编译为二进制,但有很多限制。
66
65
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 等。
70
72
71
73
## 无法使用 ssl
72
74
73
- ** 更新:该问题已在最新版本的 static-php-cli 中修复,现在默认读取系统的证书文件。如果你仍然遇到问题,再尝试下方的解决方案 。**
75
+ ** 更新:该问题已在最新版本的 static-php-cli 中修复,现在默认读取系统的证书文件。如果你仍然遇到问题,请尝试下面的解决方案 。**
74
76
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 ` 导致的。
77
79
78
- 你可以在使用 PHP 前指定 ` php.ini ` , 并在 INI 内添加 ` openssl.cafile=/path/to/your-cert.pem ` 来解决这个问题 。
80
+ 你可以通过在使用 PHP 前指定 ` php.ini ` 并在 INI 中添加 ` openssl.cafile=/path/to/your-cert.pem ` 来解决此问题 。
79
81
80
82
对于 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 ) 。
82
84
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 ` 文件中设置。
84
86
85
- ## 为什么不支持旧版本 PHP ?
87
+ ## 为什么不支持旧版本的 PHP?
86
88
87
- 因为旧版本的 PHP 有很多问题,比如安全问题、性能问题、功能问题等 。此外,旧版本的 PHP 很多都无法与最新的依赖库兼容 ,这也是不支持旧版本 PHP 的原因之一。
89
+ 因为旧版本的 PHP 有很多问题,如安全问题、性能问题和功能问题 。此外,许多旧版本的 PHP 与最新的依赖库不兼容 ,这也是不支持旧版本 PHP 的原因之一。
88
90
89
- 你可以使用 static-php-cli 早期编译好的旧版本 ,如 PHP 8.0,但是不会明确支持早期版本 。
91
+ 你可以使用 static-php-cli 早期编译的旧版本 ,如 PHP 8.0,但不会明确支持早期版本 。
0 commit comments