Skip to content

Commit

Permalink
docs: Chinese translation (#597)
Browse files Browse the repository at this point in the history
* docs: translated in Chinese

* fix: readme md links and duplicate images

* docs: lint and remove outdated parts

---------

Co-authored-by: Pierre Clavequin <[email protected]>
Co-authored-by: ginifizz <[email protected]>
Co-authored-by: Kévin Dunglas <[email protected]>
  • Loading branch information
4 people authored Feb 28, 2024
1 parent b71dae9 commit 2c6e201
Show file tree
Hide file tree
Showing 13 changed files with 1,196 additions and 0 deletions.
77 changes: 77 additions & 0 deletions docs/cn/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
# FrankenPHP: 适用于 PHP 的现代应用服务器

<h1 align="center"><a href="https://frankenphp.dev"><img src="frankenphp.png" alt="FrankenPHP" width="600"></a></h1>

FrankenPHP 是建立在 [Caddy](https://caddyserver.com/) Web 服务器之上的现代 PHP 应用程序服务器。

FrankenPHP 凭借其令人惊叹的功能为您的 PHP 应用程序提供了超能力:[早期提示](early-hints.md)[worker 模式](worker.md)[实时功能](mercure.md)、自动 HTTPS、HTTP/2 和 HTTP/3 支持......

FrankenPHP 可与任何 PHP 应用程序一起使用,并且由于提供了与 worker 模式的集成,使您的 Symfony 和 Laravel 项目比以往任何时候都更快。

FrankenPHP 也可以用作独立的 Go 库,将 PHP 嵌入到任何使用 net/http 的应用程序中。

[**了解更多** *frankenphp.dev*](https://frankenphp.dev/cn) 以及在以下地址中:

<a href="https://dunglas.dev/2022/10/frankenphp-the-modern-php-app-server-written-in-go/"><img src="https://dunglas.dev/wp-content/uploads/2022/10/frankenphp.png" alt="Slides" width="600"></a>

## 开始

### Docker

```console
docker run -v $PWD:/app/public \
-p 80:80 -p 443:443 -p 443:443/udp \
dunglas/frankenphp
```

访问 `https://localhost`, 并享受吧!

> [!提示]
>
> 不要尝试使用 `https://127.0.0.1`。使用 `localhost` 并接受自签名证书。
> 使用 [`SERVER_NAME` 环境变量](config.md#环境变量) 更改要使用的域。
### 独立二进制

如果您不想使用 Docker,我们为 Linux 和 macOS 提供独立的 FrankenPHP 二进制文件
包含 [PHP 8.3](https://www.php.net/releases/8.3/en.php) 和最流行的 PHP 扩展:[下载 FrankenPHP](https://github.com/dunglas/frankenphp/releases)

若要启动当前目录的内容,请运行:

```console
./frankenphp php-server
```

您还可以使用以下命令运行命令行脚本:

```console
./frankenphp php-cli /path/to/your/script.php
```

## 文档

* [worker 模式](worker.md)
* [早期提示支持(103 HTTP status code)](early-hints.md)
* [实时功能](mercure.md)
* [配置](config.md)
* [Docker 镜像](docker.md)
* [在生产环境中部署](production.md)
* [创建独立、可自行执行的 PHP 应用程序](embed.md)
* [创建静态二进制文件](static.md)
* [从源代码编译](compile.md)
* [Laravel 集成](laravel.md)
* [已知问题](known-issues.md)
* [演示应用程序 (Symfony) 和基准测试](https://github.com/dunglas/frankenphp-demo)
* [Go 库文档](https://pkg.go.dev/github.com/dunglas/frankenphp)
* [贡献和调试](https://frankenphp.dev/docs/contributing/)

## 示例和框架

* [Symfony](https://github.com/dunglas/symfony-docker)
* [API Platform](https://api-platform.com/docs/distribution/)
* [Laravel](laravel.md)
* [Sulu](https://sulu.io/blog/running-sulu-with-frankenphp)
* [WordPress](https://github.com/dunglas/frankenphp-wordpress)
* [Drupal](https://github.com/dunglas/frankenphp-drupal)
* [Joomla](https://github.com/alexandreelise/frankenphp-joomla)
* [TYPO3](https://github.com/ochorocho/franken-typo3)
104 changes: 104 additions & 0 deletions docs/cn/compile.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
# 从源代码编译

本文档解释了如何创建一个 FrankenPHP 构建,它将 PHP 加载为一个动态库。
这是推荐的方法。

或者,[创建静态构建](static.md)也是可能的。

## 安装 PHP

FrankenPHP 与 PHP 8.2 及更高版本兼容。

首先,[获取PHP的源代码](https://www.php.net/downloads.php)并提取它们:

```console
tar xf php-*
cd php-*/
```

然后,为您的平台配置 PHP:

### Linux

```console
./configure \
--enable-embed \
--enable-zts \
--disable-zend-signals \
--enable-zend-max-execution-timers
```

最后,编译并安装 PHP:

```console
make -j$(nproc)
sudo make install
```

### Mac

使用 [Homebrew](https://brew.sh/) 包管理器安装
`libiconv`, `bison`, `re2c``pkg-config`

```console
brew install libiconv bison re2c pkg-config
echo 'export PATH="/opt/homebrew/opt/bison/bin:$PATH"' >> ~/.zshrc
```

然后运行配置脚本:

```console
./configure \
--enable-embed=static \
--enable-zts \
--disable-zend-signals \
--disable-opcache-jit \
--enable-static \
--enable-shared=no \
--with-iconv=/opt/homebrew/opt/libiconv/
```

这些标志是必需的,但您可以添加其他标志(例如额外的扩展)
如果需要。

最后,编译并安装 PHP:

```console
make -j$(sysctl -n hw.logicalcpu)
sudo make install
```

## 编译 Go 应用

您现在可以使用 Go 库并编译我们的 Caddy 构建:

```console
curl -L https://github.com/dunglas/frankenphp/archive/refs/heads/main.tar.gz | tar x
cd frankenphp-main/caddy/frankenphp
CGO_CFLAGS=$(php-config --includes) CGO_LDFLAGS="$(php-config --ldflags) $(php-config --libs)" go build
```

### 使用 xcaddy

或者,使用 [xcaddy](https://github.com/caddyserver/xcaddy)[自定义 Caddy 模块](https://caddyserver.com/docs/modules/) 编译 FrankenPHP:

```console
CGO_ENABLED=1 \
XCADDY_GO_BUILD_FLAGS="-ldflags '-w -s'" \
xcaddy build \
--output frankenphp \
--with github.com/dunglas/frankenphp/caddy \
--with github.com/dunglas/mercure/caddy \
--with github.com/dunglas/vulcain/caddy
# Add extra Caddy modules here
```

> [!提示]
>
> 如果您使用的是 musl libc(Alpine Linux 上的默认值)和 Symfony,
> 您可能需要增加默认堆栈大小。
> 否则,您可能会收到如下错误 `PHP Fatal error: Maximum call stack size of 83360 bytes reached during compilation. Try splitting expression`
>
> 为此,请将 `XCADDY_GO_BUILD_FLAGS` 环境变量更改为类似
> `XCADDY_GO_BUILD_FLAGS=$'-ldflags "-w -s -extldflags \'-Wl,-z,stack-size=0x80000\'"'`
> (根据您的应用需求更改堆栈大小的值)。
154 changes: 154 additions & 0 deletions docs/cn/config.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
# 配置

FrankenPHP,Caddy 以及 Mercure 和 Vulcain 模块可以使用 [Caddy 支持的格式](https://caddyserver.com/docs/getting-started#your-first-config) 进行配置。

在 Docker 镜像中,`Caddyfile` 位于 `/etc/caddy/Caddyfile`

您也可以像往常一样使用 `php.ini` 配置 PHP。

在 Docker 镜像中,`php.ini` 文件不存在,您可以手动创建它或 `复制`

```dockerfile
FROM dunglas/frankenphp

# 开发:
RUN cp $PHP_INI_DIR/php.ini-development $PHP_INI_DIR/php.ini

# 还是生产:
RUN cp $PHP_INI_DIR/php.ini-production $PHP_INI_DIR/php.ini
```

## Caddyfile 配置

要注册 FrankenPHP 执行器,必须设置 `frankenphp` [全局选项](https://caddyserver.com/docs/caddyfile/concepts#global-options),然后可以在站点块中使用 `php_server``php` [HTTP 指令](https://caddyserver.com/docs/caddyfile/concepts#directives)来为您的 PHP 应用程序提供服务。

极小示例:

```caddyfile
{
# 启用 FrankenPHP
frankenphp
# 配置何时必须执行指令
order php_server before file_server
}
localhost {
# 启用压缩(可选)
encode zstd br gzip
# 执行当前目录中的 PHP 文件并提供资产
php_server
}
```

或者,可以在全局选项下指定要创建的线程数和要从服务器启动的 [worker scripts](worker.md)

```caddyfile
{
frankenphp {
num_threads <num_threads> # 设置要启动的 PHP 线程数。默认值:可用 CPU 数量的 2 倍。
worker {
file <path> # 设置 worker 脚本的路径。
num <num> # 设置要启动的 PHP 线程数,默认为可用 CPU 数的 2 倍。
env <key> <value> # 将额外的环境变量设置为给定值。可以为多个环境变量多次指定。
}
}
}
# ...
```

或者,您可以使用 `worker` 选项的一行缩写形式:

```caddyfile
{
frankenphp {
worker <file> <num>
}
}
# ...
```

如果在同一服务器上提供多个应用,还可以定义多个 worker:

```caddyfile
{
frankenphp {
worker /path/to/app/public/index.php <num>
worker /path/to/other/public/index.php <num>
}
}
app.example.com {
root * /path/to/app/public
php_server
}
other.example.com {
root * /path/to/other/public
php_server
}
...
```

使用 `php_server` 指令通常是您需要的,
但是,如果您需要完全控制,则可以使用较低级别的 `php` 指令:

使用 `php_server` 指令等效于以下配置:

```caddyfile
route {
# 为目录请求添加尾部斜杠
@canonicalPath {
file {path}/index.php
not path */
}
redir @canonicalPath {path}/ 308
# 如果请求的文件不存在,请尝试 index 文件
@indexFiles file {
try_files {path} {path}/index.php index.php
split_path .php
}
rewrite @indexFiles {http.matchers.file.relative}
# FrankenPHP!
@phpFiles path *.php
php @phpFiles
file_server
}
```

`php_server``php` 指令具有以下选项:

```caddyfile
php_server [<matcher>] {
root <directory> # 设置站点的根文件夹。默认值:`root` 指令。
split_path <delim...> # 设置用于将 URI 拆分为两部分的子字符串。第一个匹配的子字符串将用于从路径中拆分“路径信息”。第一个部分以匹配的子字符串为后缀,并将假定为实际资源(CGI 脚本)名称。第二部分将设置为PATH_INFO,供 脚本使用。默认值:`.php`
resolve_root_symlink # 允许通过计算符号链接(如果存在)将 `根` 目录解析为其实际值。
env <key> <value> # 将额外的环境变量设置为给定值。可以为多个环境变量多次指定。
}
```

## 环境变量

以下环境变量可用于在 `Caddyfile` 中注入 Caddy 指令,而无需对其进行修改:

* `SERVER_NAME`: 更改 [要监听的地址](https://caddyserver.com/docs/caddyfile/concepts#addresses),提供的主机名也将用于生成的 TLS 证书
* `CADDY_GLOBAL_OPTIONS`: 注入 [全局选项](https://caddyserver.com/docs/caddyfile/options)
* `FRANKENPHP_CONFIG`: 在 `frankenphp` 指令下注入配置

## PHP 配置

要加载[其他PHP配置文件](https://www.php.net/manual/en/configuration.file.php#configuration.file.scan)
可以使用 `PHP_INI_SCAN_DIR` 环境变量。
设置后,PHP 将加载给定目录中存在 `.ini` 扩展名的所有文件。

## 启用调试模式

使用 Docker 镜像时,将 `CADDY_GLOBAL_OPTIONS` 环境变量设置为 `debug` 以启用调试模式:

```console
docker run -v $PWD:/app/public \
-e CADDY_GLOBAL_OPTIONS=debug \
-p 80:80 -p 443:443 -p 443:443/udp \
dunglas/frankenphp
```
Loading

0 comments on commit 2c6e201

Please sign in to comment.