From 0cc10bb6e9be7f0e0dd20521cad036f24acfe3e8 Mon Sep 17 00:00:00 2001 From: dunglas <57224+dunglas@users.noreply.github.com> Date: Wed, 4 Nov 2026 08:57:41 +0000 Subject: [PATCH] docs: update translations --- docs/cn/config.md | 92 +++++++++++++++++++++++++++----------------- docs/fr/config.md | 38 +++++++++++++----- docs/it/config.md | 58 +++++++++++++++++++--------- docs/ja/config.md | 40 ++++++++++++++----- docs/pt-br/config.md | 36 +++++++++++++---- docs/ru/config.md | 34 ++++++++++++---- docs/tr/config.md | 77 +++++++++++++++++++++++++----------- 7 files changed, 265 insertions(+), 110 deletions(-) diff --git a/docs/cn/config.md b/docs/cn/config.md index 47103e7a8a..813aab5a52 100644 --- a/docs/cn/config.md +++ b/docs/cn/config.md @@ -1,3 +1,8 @@ +--- +title: 使用 Caddyfile、php.ini 和环境变量配置 FrankenPHP +description: 通过 Caddyfile、JSON 或环境变量配置 FrankenPHP 和 Caddy,包括 PHP 运行时调优、工作模式、文件监视和模块选项。 +--- + # 配置 FrankenPHP、Caddy 以及 [Mercure](mercure.md) 和 [Vulcain](https://vulcain.rocks) 模块可以使用 [Caddy 支持的格式](https://caddyserver.com/docs/getting-started#your-first-config) 进行配置。 @@ -90,19 +95,19 @@ localhost { ```caddyfile { frankenphp { - num_threads # 设置要启动的 PHP 线程数量。默认:可用 CPU 数量的 2 倍。 - max_threads # 限制可以在运行时启动的额外 PHP 线程的数量。默认值:num_threads。可以设置为 'auto'。 - max_wait_time # 设置请求在超时之前可以等待的最大时间,直到找到一个空闲的 PHP 线程。 默认:禁用。 - max_idle_time # 设置一个自动扩展的线程在被停用之前可以空闲的最长时间。默认:5s。 - max_requests # (实验性) 设置一个 PHP 线程在重启前将处理的最大请求数,这有助于缓解内存泄漏问题。适用于常规线程和 worker 线程。默认值:0 (无限制)。 - php_ini # 设置一个 php.ini 指令。可以多次使用以设置多个指令。 + num_threads # 设置要启动的 PHP 线程数量,用于处理没有 worker 服务时的请求,worker 线程在此基础上增加。默认值:在 worker 线程分配完毕后,剩余的可用 CPU 数量的 2 倍(至少一个)。 + max_threads # 限制同时运行的 PHP 线程数量(包括 worker 线程)。默认值:启动时创建的线程数。可以设置为 'auto'。 + max_wait_time # 设置请求在超时之前可以等待空闲 PHP 线程的最长时间。默认值:禁用。 + max_idle_time # 设置一个自动缩放的线程在被停用之前可以空闲的最长时间。默认值:5s。 + max_requests # (实验性) 设置 PHP 线程在重启前处理的最大请求数,有助于缓解内存泄漏。适用于常规线程和 worker 线程。默认值:0 (无限制)。 + php_ini # 设置 php.ini 指令。可以多次使用以设置多个指令。 worker { file # 设置工作脚本的路径。 num # 设置要启动的 PHP 线程数量,默认为可用 CPU 数量的 2 倍。 env # 设置一个额外的环境变量为给定的值。可以多次指定以设置多个环境变量。 watch # 设置要监视文件更改的路径。可以为多个路径多次指定。 - name # 设置worker的名称,用于日志和指标。默认值:worker文件的绝对路径。 - max_consecutive_failures # 设置在工人被视为不健康之前的最大连续失败次数,-1意味着工人将始终重新启动。默认值:6。 + name # 设置 worker 的名称,用于日志和指标。默认值:worker 文件的绝对路径。 + max_consecutive_failures # 设置 worker 在被视为不健康之前的最大连续失败次数,-1 意味着 worker 将始终重新启动。默认值:6。 } } } @@ -146,8 +151,9 @@ other.example.com { 使用 `php_server` 指令通常是您需要的, 但是如果你需要完全控制,你可以使用更低级的 `php` 指令。 -`php` 指令将所有输入传递给 PHP,而不是先检查是否 -是一个PHP文件。在[性能页面](performance.md#try_files)中了解更多关于它的信息。 +`php` 指令将所有输入传递给 PHP,而不是先检查是否是 PHP 文件。 +在[性能页面](performance.md#try_files)中了解更多关于它的信息。 +请求路径中不包含任何 `split_path` 扩展名的请求将收到 404 响应,除非有 worker 处理它。 使用 `php_server` 指令等同于以下配置: @@ -159,7 +165,7 @@ route { not path */ } redir @canonicalPath {path}/ 308 - # 如果请求的文件不存在,则尝试 index 文件 + # 如果请求的文件不存在,则尝试索引文件 @indexFiles file { try_files {path} {path}/index.php index.php split_path .php @@ -177,29 +183,31 @@ route { ```caddyfile php_server [] { root # 将根文件夹设置为站点。默认值:`root` 指令。 - split_path # 设置用于将 URI 分割成两部分的子字符串。第一个匹配的子字符串将用来将 "路径信息" 与路径分开。第一部分后缀为匹配的子字符串,并将被视为实际资源(CGI 脚本)名称。第二部分将被设置为脚本使用的 PATH_INFO。默认值:`.php`。 + split_path # 设置用于将 URI 分割成两部分的子字符串。第一个匹配的子字符串将用来将 "路径信息" 与路径分开。第一部分后缀为匹配的子字符串,并将被视为实际资源(CGI 脚本)名称。第二部分将被设置为脚本使用的 PATH_INFO。默认值:`.php` resolve_root_symlink false # 禁用通过评估符号链接(如果存在)将 `root` 目录解析为其实际值(默认启用)。 + name # 为此服务器设置名称,用于分配 worker、指标和日志。默认值:封闭路由的第一个主机匹配器,或第一个监听地址。 env # 设置一个额外的环境变量为给定的值。可以多次指定以设置多个环境变量。 file_server off # 禁用内置的 file_server 指令。 - worker { # 为此服务器创建特定的worker。可以多次指定以创建多个workers。 + request_body_timeout # 设置请求体读取的空闲超时时间:失速(慢速 POST)客户端将被切断,而任何大小的稳定上传都能成功。默认值:60s。设置为 0 以禁用。 + worker { # 为此服务器创建特定的 worker。可以多次指定以创建多个 worker。 file # 设置工作脚本的路径,可以相对于 php_server 根目录 num # 设置要启动的 PHP 线程数,默认为可用 CPU 数量的 2 倍 - name # 为worker设置名称,用于日志和指标。默认值:worker文件的绝对路径。定义在 php_server 块中时,始终以 m# 开头。 + name # 为 worker 设置名称,用于日志和指标。默认值:worker 文件的绝对路径。如果名称已被使用,则附加一个数字。 watch # 设置要监视文件更改的路径。可以为多个路径多次指定。 - env # 设置一个额外的环境变量为给定值。可以多次指定以设置多个环境变量。此工作进程的环境变量也从 php_server 父进程继承,但可以在此处覆盖。 - match # 将worker匹配到路径模式。覆盖 try_files,并且只能在 php_server 指令中使用。 + env # 设置一个额外的环境变量为给定值。可以多次指定以设置多个环境变量。此 worker 的环境变量也从 php_server 父进程继承,但可以在此处覆盖。 + match # 将 worker 匹配到路径模式。覆盖 try_files 且只能在 php_server 指令中使用。 } worker # 也可以像在全局 frankenphp 块中那样使用简短形式。 } ``` -### 监控文件变化 +### 监视文件更改 由于 workers 只会启动您的应用程序一次并将其保留在内存中, 因此对您的 PHP 文件的任何更改不会立即反映出来。 Workers 可以通过 `watch` 指令在文件更改时重新启动。 -这对开发环境很有用。 +这对于开发环境很有用。 ```caddyfile { @@ -212,10 +220,10 @@ Workers 可以通过 `watch` 指令在文件更改时重新启动。 } ``` -此功能通常与[热重载](hot-reload.md)结合使用。 +此功能通常与[热重载](hot-reload.md#热重载)结合使用。 如果没有指定 `watch` 目录,它将回退到 `./**/*.{env,php,twig,yaml,yml}`, -这将监视启动 FrankenPHP 进程的目录及其子目录中的所有 `.env`、`.php`、`.twig`、`.yaml` 和 `.yml` 文件。 +这将监视 FrankenPHP 进程启动目录及其子目录中的所有 `.env`、`.php`、`.twig`、`.yaml` 和 `.yml` 文件。 你也可以通过 [shell 文件名模式](https://pkg.go.dev/path/filepath#Match) 指定一个或多个目录: ```caddyfile @@ -224,26 +232,26 @@ Workers 可以通过 `watch` 指令在文件更改时重新启动。 worker { file /path/to/app/public/worker.php watch /path/to/app # 监视 /path/to/app 所有子目录中的所有文件 - watch /path/to/app/*.php # 监视位于/path/to/app中的以.php结尾的文件 + watch /path/to/app/*.php # 监视位于 /path/to/app 中以 .php 结尾的文件 watch /path/to/app/**/*.php # 监视 /path/to/app 及子目录中的 PHP 文件 - watch /path/to/app/**/*.{php,twig} # 在/path/to/app及其子目录中监视PHP和Twig文件 + watch /path/to/app/**/*.{php,twig} # 在 /path/to/app 及其子目录中监视 PHP 和 Twig 文件 } } } ``` - `**` 模式表示递归监视 -- 目录也可以是相对的(相对于FrankenPHP进程启动的位置) -- 如果您定义了多个workers,当文件发生更改时,将重新启动所有workers。 -- 小心查看在运行时创建的文件(如日志),因为它们可能导致不必要的工作进程重启。 +- 目录也可以是相对的(相对于 FrankenPHP 进程启动的位置) +- 如果您定义了多个 workers,当文件发生更改时,所有 workers 都将重新启动。 +- 小心监视在运行时创建的文件(如日志),因为它们可能导致不必要的工作进程重启。 文件监视器基于[e-dant/watcher](https://github.com/e-dant/watcher)。 ## 将 worker 匹配到一条路径 -在传统的PHP应用程序中,脚本总是放在公共目录中。 -这对于工作脚本也是如此,这些脚本被视为任何其他PHP脚本。 -如果您想将工作脚本放在公共目录外,可以通过 `match` 指令来实现。 +在传统的 PHP 应用程序中,脚本总是放在公共目录中。 +这对于 worker 脚本也是如此,这些脚本被视为任何其他 PHP 脚本。 +如果您想将 worker 脚本放在公共目录外,可以通过 `match` 指令来实现。 `match` 指令是 `try_files` 的一种优化替代方案,仅在 `php_server` 和 `php` 内部可用。 以下示例将始终在公共目录中提供文件(如果存在),否则会将请求转发给与路径模式匹配的 worker。 @@ -282,14 +290,14 @@ FrankenPHP 可以在 PHP 线程处理完给定数量的请求后自动重启它 可以使用以下环境变量在不修改 `Caddyfile` 的情况下注入 Caddy 指令: -- `SERVER_NAME`: 更改[监听的地址](https://caddyserver.com/docs/caddyfile/concepts#addresses),提供的宿主名也将用于生成的TLS证书。 -- `SERVER_ROOT`: 更改网站的根目录,默认为 `public/` +- `SERVER_NAME`: 更改[监听的地址](https://caddyserver.com/docs/caddyfile/concepts#addresses),提供的宿主名也将用于生成的 TLS 证书。 +- `SERVER_ROOT`: 更改网站的根目录,默认为 `public/`。 - `CADDY_GLOBAL_OPTIONS`: 注入[全局选项](https://caddyserver.com/docs/caddyfile/options) - `FRANKENPHP_CONFIG`: 在 `frankenphp` 指令下注入配置 至于 FPM 和 CLI SAPIs,环境变量默认在 `$_SERVER` 超全局中暴露。 -`variables_order` PHP 指令中 `S` 的值始终等于 `ES`,无论 `E` 在该指令中的其他位置如何。 +[`variables_order` PHP 指令](https://www.php.net/manual/ini.core.php#ini.variables-order)中 `S` 的值始终等于 `ES`,无论 `E` 在该指令中的其他位置如何。 ## PHP 配置 @@ -319,11 +327,11 @@ FrankenPHP 可以在 PHP 线程处理完给定数量的请求后自动重启它 或者,你可以使用 [Caddy 文档](https://caddyserver.com/docs/automatic-https#activation) 中描述的所有其他方法。 -如果你想将 HTTPS 与 `127.0.0.1` IP 地址而不是 `localhost` 主机名一起使用,请阅读[已知问题](known-issues.md#using-https127001-with-docker)部分。 +如果你想将 HTTPS 与 `127.0.0.1` IP 地址而不是 `localhost` 主机名一起使用,请阅读[已知问题](known-issues.md#使用-docker-和-https127001)部分。 ### 全双工 (HTTP/1) -在使用 HTTP/1.x 时,可能希望启用全双工模式,以便在整个请求体被读取之前允许写入响应。(例如:[Mercure](mercure.md)、WebSocket、Server-Sent Events 等) +在使用 HTTP/1.x 时,可能希望启用全双工模式,以便在整个请求体被读取之前允许写入响应。(例如:[Mercure](mercure.md)、WebSocket、Server-Sent Events 等)。 这是一个可选配置,需要添加到 `Caddyfile` 中的全局选项中: @@ -348,9 +356,23 @@ CADDY_GLOBAL_OPTIONS="servers { 您可以在[Caddy文档](https://caddyserver.com/docs/caddyfile/options#enable-full-duplex)中找到有关此设置的更多信息。 +### 请求体大小限制 + +为了限制请求体的大小,请使用 [`request_body`](https://caddyserver.com/docs/caddyfile/directives/request_body) 指令: + +```caddyfile +request_body { + max_size 10MB +} +``` + +请求体过大将收到 `413 Request Entity Too Large` 响应。 +如果 PHP 在脚本启动前读取请求体(如带有 `Content-Type` 的 `POST` 请求,例如表单和文件上传),则脚本不会运行。 +如果脚本通过 `php://input` 或 `request_parse_body()` 自己读取请求体,一旦达到限制,读取将抛出 `FrankenPHP\RequestBodyTooLargeException` 异常,因此截断的请求体永远不会被误认为是完整的。 + ## 启用调试模式 -使用Docker镜像时,将`CADDY_GLOBAL_OPTIONS`环境变量设置为`debug`以启用调试模式: +使用 Docker 镜像时,将 `CADDY_GLOBAL_OPTIONS` 环境变量设置为 `debug` 以启用调试模式: ```console docker run -v $PWD:/app/public \ @@ -431,5 +453,3 @@ Add-Content -Path $PROFILE -Value '. (Join-Path (Split-Path $PROFILE) "frankenph ``` 您需要启动一个新的 shell 会话才能使此设置生效。 - -您需要启动一个新的 shell 会话才能使此设置生效。 diff --git a/docs/fr/config.md b/docs/fr/config.md index 15da16bba0..98f2c8619b 100644 --- a/docs/fr/config.md +++ b/docs/fr/config.md @@ -1,6 +1,11 @@ +--- +title: Configurer FrankenPHP avec Caddyfile, php.ini et variables d'environnement +description: Configurez FrankenPHP et Caddy via Caddyfile, JSON ou des variables d'environnement, y compris le réglage du runtime PHP, le mode worker, la surveillance des fichiers et les options des modules. +--- + # Configuration -FrankenPHP, Caddy ainsi que les modules [Mercure](mercure.md) et [Vulcain](https://vulcain.rocks) peuvent être configurés à l'aide [des formats pris en charge par Caddy](https://caddyserver.com/docs/getting-started#your-first-config). +FrankenPHP, Caddy, ainsi que les modules [Mercure](mercure.md) et [Vulcain](https://vulcain.rocks) peuvent être configurés à l'aide [des formats pris en charge par Caddy](https://caddyserver.com/docs/getting-started#your-first-config). Le format le plus courant est le `Caddyfile`, un format texte simple et facilement lisible par les humains. Par défaut, FrankenPHP recherchera un `Caddyfile` dans le répertoire courant. @@ -92,8 +97,8 @@ Vous pouvez également configurer explicitement FrankenPHP en utilisant l'[optio ```caddyfile { frankenphp { - num_threads # Définit le nombre de threads PHP à démarrer. Par défaut : 2x le nombre de CPUs disponibles. - max_threads # Limite le nombre de threads PHP supplémentaires qui peuvent être démarrés au moment de l'exécution. Valeur par défaut : num_threads. Peut être mis à 'auto'. + num_threads # Définit le nombre de threads PHP à démarrer pour les requêtes non gérées par un worker. Les threads worker s'ajoutent à ce nombre. Par défaut : ce qu'il reste de 2x le nombre de CPUs disponibles une fois que les workers ont leurs threads, un au minimum. + max_threads # Limite le nombre de threads PHP pouvant s'exécuter simultanément, workers inclus. Par défaut : les threads démarrés au démarrage. Peut être défini sur 'auto'. max_wait_time # Définit le temps maximum pendant lequel une requête peut attendre un thread PHP libre avant d'être interrompue. Valeur par défaut : désactivé. max_idle_time # Définit le temps maximum pendant lequel un thread auto-dimensionné peut être inactif avant d'être désactivé. Par défaut : 5s. max_requests # (expérimental) Définit le nombre maximum de requêtes qu'un thread PHP traitera avant d'être redémarré, utile pour atténuer les fuites de mémoire. S'applique aux threads réguliers et aux threads worker. Par défaut : 0 (illimité). @@ -150,6 +155,7 @@ L'utilisation de la directive `php_server` est généralement ce dont vous avez mais si vous avez besoin d'un contrôle total, vous pouvez utiliser la directive de niveau inférieur `php`. La directive `php` transmet toutes les entrées à PHP, au lieu de vérifier d'abord si c'est un fichier PHP ou pas. En savoir plus à ce sujet dans la [documentation liée aux performances](performance.md#try_files). +Une requête dont le chemin ne contient aucune des extensions `split_path` reçoit un 404, à moins qu'un worker ne la gère. Utiliser la directive `php_server` est équivalent à cette configuration : @@ -179,14 +185,16 @@ Les directives `php_server` et `php` disposent des options suivantes : ```caddyfile php_server [] { root # Définit le dossier racine du site. Par défaut : la directive `root`. - split_path # Définit les sous-chaînes pour diviser l'URI en deux parties. La première sous-chaîne correspondante sera utilisée pour séparer le "path info" du chemin. La première partie est suffixée avec la sous-chaîne correspondante et sera considérée comme le nom réel de la ressource (script CGI). La seconde partie sera définie comme PATH_INFO pour utilisation par le script. Par défaut : `.php` + split_path # Définit les sous-chaînes pour diviser l'URI en deux parties. La première sous-chaîne correspondante qui termine un segment de chemin sera utilisée pour séparer les "informations de chemin" du chemin. La première partie est suffixée avec la sous-chaîne correspondante et sera considérée comme le nom réel de la ressource (script CGI). La seconde partie sera définie comme PATH_INFO pour utilisation par le script. Par défaut : `.php` resolve_root_symlink false # Désactive la résolution du répertoire `root` vers sa valeur réelle en évaluant un lien symbolique, s'il existe (activé par défaut). + name # Définit le nom de ce serveur, utilisé pour attribuer les workers, les métriques et les logs. Par défaut : le premier matcher d'hôte de la route englobante, ou la première adresse d'écoute. env # Définit une variable d'environnement supplémentaire avec la valeur donnée. Peut être spécifié plusieurs fois pour plusieurs variables d'environnement. file_server off # Désactive la directive file_server intégrée. + request_body_timeout # Définit un délai d'attente d'inactivité pour la lecture du corps de la requête : un client bloqué (POST lent) est coupé tandis qu'un téléchargement stable de toute taille réussit. Par défaut : 60s. Mettez à 0 pour désactiver. worker { # Crée un worker spécifique à ce serveur. Peut être spécifié plusieurs fois pour plusieurs workers. file # Définit le chemin vers le script worker, peut être relatif à la racine du php_server num # Définit le nombre de threads PHP à démarrer, par défaut 2x le nombre de CPUs disponibles - name # Définit le nom du worker, utilisé dans les journaux et les métriques. Par défaut : chemin absolu du fichier du worker. Commence toujours par m# lorsqu'il est défini dans un bloc php_server. + name # Définit le nom du worker, utilisé dans les journaux et les métriques. Par défaut : chemin absolu du fichier du worker. Postfixé par un nombre si le nom est déjà utilisé. watch # Définit le chemin d'accès à surveiller pour les modifications de fichiers. Peut être spécifié plusieurs fois pour plusieurs chemins. env # Définit une variable d'environnement supplémentaire avec la valeur donnée. Peut être spécifié plusieurs fois pour plusieurs variables d'environnement. Les variables d'environnement pour ce worker sont également héritées du parent php_server, mais peuvent être écrasées ici. match # fait correspondre le worker à un modèle de chemin. Écrase try_files et ne peut être utilisé que dans la directive php_server. @@ -242,7 +250,7 @@ où le processus FrankenPHP a été lancé. Vous pouvez également spécifier un La surveillance des fichiers est basée sur [e-dant/watcher](https://github.com/e-dant/watcher). -## Faire correspondre le worker à un chemin +### Faire correspondre le worker à un chemin Dans les applications PHP traditionnelles, les scripts sont toujours placés dans le répertoire public. C'est également vrai pour les scripts worker, qui sont traités comme n'importe quel autre script PHP. Si vous souhaitez plutôt placer le script worker en dehors du répertoire public, vous pouvez le faire via la directive `match`. @@ -262,7 +270,7 @@ et transmettra sinon la requête au worker correspondant au modèle de chemin. } ``` -## Redémarrage des threads après un certain nombre de requêtes (expérimental) +### Redémarrage des threads après un certain nombre de requêtes (expérimental) FrankenPHP peut redémarrer automatiquement les threads PHP après qu'ils aient géré un certain nombre de requêtes. Lorsqu'un thread atteint la limite, il est entièrement redémarré, @@ -328,7 +336,7 @@ Si vous souhaitez utiliser HTTPS avec l'adresse IP `127.0.0.1` au lieu du nom d' ### Full duplex (HTTP/1) Lors de l'utilisation de HTTP/1.x, il peut être souhaitable d'activer le mode full-duplex pour permettre l'écriture d'une réponse avant que le corps entier -n'ait été lu. (par exemple : [Mercure](mercure.md), WebSocket, Server-Sent Events, etc.) +n'ait été lu (par exemple : [Mercure](mercure.md), WebSocket, Server-Sent Events, etc.). Il s'agit d'une configuration facultative qui doit être ajoutée aux options globales dans le `Caddyfile` : @@ -353,6 +361,18 @@ CADDY_GLOBAL_OPTIONS="servers { Vous trouverez plus d'informations sur ce paramètre dans la [documentation Caddy](https://caddyserver.com/docs/caddyfile/options#enable-full-duplex). +### Limite de taille du corps de requête + +Pour limiter la taille des corps de requête, utilisez la directive [`request_body`](https://caddyserver.com/docs/caddyfile/directives/request_body) : + +```caddyfile +request_body { + max_size 10MB +} +``` + +Les requêtes avec un corps plus volumineux reçoivent une réponse `413 Request Entity Too Large`. Si PHP lit le corps avant le démarrage du script (requêtes `POST` avec un `Content-Type`, comme les formulaires et les téléchargements de fichiers), le script ne s'exécute pas. Si le script lit le corps lui-même, via `php://input` ou `request_parse_body()`, la lecture lève une `FrankenPHP\RequestBodyTooLargeException` une fois la limite atteinte, de sorte qu'un corps tronqué n'est jamais confondu avec un corps complet. + ## Activer le mode debug Lors de l'utilisation de l'image Docker, définissez la variable d'environnement `CADDY_GLOBAL_OPTIONS` sur `debug` pour activer le mode debug : @@ -436,5 +456,3 @@ Add-Content -Path $PROFILE -Value '. (Join-Path (Split-Path $PROFILE) "frankenph ``` Vous devrez démarrer un nouveau shell pour que cette configuration prenne effet. - -Vous devrez démarrer un nouveau shell pour que cette configuration prenne effet. diff --git a/docs/it/config.md b/docs/it/config.md index f04d13fe6b..a933ffd2c0 100644 --- a/docs/it/config.md +++ b/docs/it/config.md @@ -1,8 +1,13 @@ +--- +title: Configurare FrankenPHP con Caddyfile, php.ini e variabili d'ambiente +description: Configura FrankenPHP e Caddy tramite Caddyfile, JSON o variabili d'ambiente, inclusa la messa a punto del runtime PHP, la modalità worker, il monitoraggio dei file e le opzioni dei moduli. +--- + # Configurazione -FrankenPHP, Caddy e i moduli [Mercure](mercure.md) e [Vulcain](https://vulcain.rocks) possono essere configurati utilizzando [i formati supportati da Caddy](https://caddyserver.com/docs/getting-started#your-first-config). +FrankenPHP, Caddy, così come i moduli [Mercure](mercure.md) e [Vulcain](https://vulcain.rocks), possono essere configurati utilizzando [i formati supportati da Caddy](https://caddyserver.com/docs/getting-started#your-first-config). -Il formato più comune è `Caddyfile`, che è un formato di testo semplice e leggibile. +Il formato più comune è il `Caddyfile`, che è un formato di testo semplice e leggibile. Per impostazione predefinita, FrankenPHP cercherà un `Caddyfile` nella cartella corrente. È possibile specificare un percorso personalizzato con l'opzione `-c` o `--config`. @@ -75,7 +80,7 @@ PHP: ## Configurazione Caddyfile -`php_server` o `php` [direttive HTTP](https://caddyserver.com/docs/caddyfile/concepts#directives) possono essere utilizzate all'interno dei blocchi del sito per servire l'app PHP. +Le [direttive HTTP](https://caddyserver.com/docs/caddyfile/concepts#directives) `php_server` o `php` possono essere utilizzate all'interno dei blocchi del sito per servire l'app PHP. Esempio minimo: @@ -93,8 +98,8 @@ Puoi anche configurare esplicitamente FrankenPHP utilizzando l'[opzione globale] ```caddyfile { frankenphp { - num_threads # Imposta il numero di thread PHP da avviare. Predefinito: 2x il numero di CPU disponibili. - max_threads # Limita il numero di thread PHP aggiuntivi avviabili a runtime. Predefinito: num_threads. Può essere impostato su 'auto'. + num_threads # Imposta il numero di thread PHP da avviare per le richieste non gestite dai worker; i thread worker si aggiungono a questi. Predefinito: quello che rimane di 2x il numero di CPU disponibili dopo che i worker hanno i loro thread, almeno uno. + max_threads # Limita il numero massimo di thread PHP che possono essere eseguiti contemporaneamente, inclusi i worker. Predefinito: i thread avviati all'avvio. Può essere impostato su 'auto'. max_wait_time # Imposta il tempo massimo di attesa di una richiesta per un thread PHP libero prima del timeout. Predefinito: disabilitato. max_idle_time # Imposta il tempo massimo di inattività di un thread autoscalato prima della disattivazione. Predefinito: 5s. max_requests # (sperimentale) Imposta il numero massimo di richieste gestite da un thread PHP prima del riavvio, utile per mitigare memory leak. Si applica ai thread regolari e worker. Predefinito: 0 (illimitato). @@ -151,6 +156,7 @@ L'uso della direttiva `php_server` è generalmente ciò che serve, ma se si ha bisogno del controllo completo, si può utilizzare la direttiva `php` di livello inferiore. La direttiva `php` passa tutti gli input a PHP, invece di verificare prima se sia un file PHP o meno. Per ulteriori informazioni, consulta la [pagina sulle prestazioni](performance.md#try_files). +Una richiesta il cui percorso non contiene alcuna delle estensioni `split_path` riceve un 404, a meno che non sia gestita da un worker. L'utilizzo della direttiva `php_server` equivale a questa configurazione: @@ -180,16 +186,18 @@ Le direttive `php_server` e `php` hanno le seguenti opzioni: ```caddyfile php_server [] { root # Imposta la cartella root del sito. Predefinito: direttiva `root`. - split_path # Imposta le sottostringhe per dividere l'URI in due parti. La prima sottostringa corrispondente viene usata per separare la "path info" dal percorso. La prima parte viene suffissata con la sottostringa corrispondente ed è considerata il nome effettivo della risorsa (script CGI). La seconda parte viene impostata in PATH_INFO per lo script. Predefinito: `.php` + split_path # Imposta le sottostringhe per dividere l'URI in due parti. La prima sottostringa corrispondente che termina un segmento di percorso verrà usata per separare la "path info" dal percorso. La prima parte viene suffissata con la sottostringa corrispondente e sarà assunta come nome effettivo della risorsa (script CGI). La seconda parte verrà impostata in PATH_INFO per l'utilizzo dello script. Predefinito: `.php` resolve_root_symlink false # Disabilita la risoluzione della directory `root` al suo valore reale tramite link simbolico, se presente (abilitato per impostazione predefinita). - env # Imposta una variabile di ambiente aggiuntiva al valore specificato. Può essere indicata più volte. + name # Imposta il nome per questo server, usato per attribuire worker, metriche e log. Predefinito: il primo matcher host della route contenitrice, o il primo indirizzo del listener. + env # Imposta una variabile di ambiente aggiuntiva al valore specificato. Può essere indicata più volte per più variabili di ambiente. file_server off # Disabilita la direttiva file_server integrata. + request_body_timeout # Imposta un timeout di inattività sulle letture del body delle richieste: un client bloccato (POST lento) viene interrotto mentre un upload stabile di qualsiasi dimensione ha successo. Predefinito: 60s. Imposta a 0 per disabilitare. worker { # Crea un worker specifico per questo server. Può essere indicato più volte per più worker. file # Imposta il percorso dello script worker; può essere relativo alla root di php_server. num # Imposta il numero di thread PHP da avviare, predefinito: 2x il numero di CPU disponibili. - name # Imposta il nome del worker, usato nei log e nelle metriche. Predefinito: percorso assoluto del file worker. Quando è definito in un blocco php_server inizia sempre con m#. - watch # Imposta il percorso da osservare per le modifiche ai file. Può essere indicato più volte. - env # Imposta una variabile di ambiente aggiuntiva al valore specificato. Può essere indicata più volte. Le variabili per questo worker sono ereditate anche dal parent php_server, ma possono essere sovrascritte qui. + name # Imposta il nome del worker, usato nei log e nelle metriche. Predefinito: percorso assoluto del file worker. Postfisso con un numero se il nome è già in uso. + watch # Imposta il percorso da osservare per le modifiche ai file. Può essere indicato più volte per più percorsi. + env # Imposta una variabile di ambiente aggiuntiva al valore specificato. Può essere indicata più volte per più variabili di ambiente. Le variabili di ambiente per questo worker sono ereditate anche dal parent php_server, ma possono essere sovrascritte qui. match # Associa il worker a un pattern di percorso. Sovrascrive try_files e può essere usato solo nella direttiva php_server. } worker # È possibile usare anche la forma breve, come nel blocco globale frankenphp. @@ -215,11 +223,11 @@ Ciò è utile per gli ambienti di sviluppo. } ``` -Questa funzione viene spesso utilizzata in combinazione con [ricaricamento a caldo](hot-reload.md). +Questa funzione viene spesso utilizzata in combinazione con il [ricaricamento a caldo](hot-reload.md). -Se la cartella `watch` non è specificata, tornerà a `./**/*.{env,php,twig,yaml,yml}`, +Se la cartella `watch` non è specificata, ricadrà su `./**/*.{env,php,twig,yaml,yml}`, che controlla tutti i file `.env`, `.php`, `.twig`, `.yaml` e `.yml` nella cartella e nelle sottocartelle -dove è stato avviato il processo FrankenPHP. Puoi invece anche specificare una o più cartelle tramite a +dove è stato avviato il processo FrankenPHP. Puoi invece anche specificare una o più cartelle tramite un [modello nome file shell](https://pkg.go.dev/path/filepath#Match): ```caddyfile @@ -239,7 +247,7 @@ dove è stato avviato il processo FrankenPHP. Puoi invece anche specificare una - Il modello `**` indica la visione ricorsiva - Le cartelle possono anche essere relative (a dove viene avviato il processo FrankenPHP) - Se sono definiti più worker, tutti verranno riavviati quando un file cambia -- Fare attenzione a guardare i file creati in fase di esecuzione (come i log) poiché potrebbero causare riavvii indesiderati del worker. +- Prestate attenzione a monitorare i file creati in fase di esecuzione (come i log) poiché potrebbero causare riavvii indesiderati del worker. Il file watcher è basato su [e-dant/watcher](https://github.com/e-dant/watcher). @@ -270,7 +278,7 @@ altrimenti inoltrerà la richiesta al worker che corrisponde al modello di perco FrankenPHP può riavviare automaticamente i thread PHP dopo aver gestito un determinato numero di richieste. Quando un thread raggiunge il limite, viene riavviato completamente, -ripulire tutta la memoria e lo stato. Altri thread continuano a servire le richieste durante il riavvio. +ripulendo tutta la memoria e lo stato. Altri thread continuano a servire le richieste durante il riavvio. Se noti che la memoria aumenta nel tempo, la soluzione ideale è segnalare la perdita all'estensione responsabile o al manutentore della libreria. @@ -332,8 +340,8 @@ Se si vuole utilizzare HTTPS con l'indirizzo IP `127.0.0.1` invece del nome host ### Duplex completo (HTTP/1) -Quando si utilizza HTTP/1.x, potrebbe essere opportuno abilitare la modalità full-duplex per consentire la scrittura di una risposta prima che l'intero body -sia stato letto. (ad esempio: [Mercure](mercure.md), WebSocket, eventi inviati dal server, ecc.) +Quando si utilizza HTTP/1.x, potrebbe essere opportuno abilitare la modalità full-duplex per consentire la scrittura di una risposta prima che l'intero body +sia stato letto (ad esempio: [Mercure](mercure.md), WebSocket, eventi inviati dal server, ecc.). Questa è una configurazione opt-in che deve essere aggiunta alle opzioni globali in `Caddyfile`: @@ -358,6 +366,20 @@ CADDY_GLOBAL_OPTIONS="servers { Puoi trovare ulteriori informazioni su questa impostazione nella [documentazione Caddy](https://caddyserver.com/docs/caddyfile/options#enable-full-duplex). +### Limite dimensione body richiesta + +Per limitare la dimensione dei body delle richieste, usa la direttiva [`request_body`](https://caddyserver.com/docs/caddyfile/directives/request_body): + +```caddyfile +request_body { + max_size 10MB +} +``` + +Le richieste con un body più grande ricevono una risposta `413 Request Entity Too Large`. +Se PHP legge il body prima che lo script inizi (richieste `POST` con un `Content-Type`, come form e upload di file), lo script non viene eseguito. +Se lo script legge il body direttamente, tramite `php://input` o `request_parse_body()`, la lettura genera una `FrankenPHP\RequestBodyTooLargeException` una volta raggiunto il limite, in modo che un body troncato non venga mai scambiato per uno completo. + ## Abilita la modalità debug Quando si utilizza l'immagine Docker, impostare la variabile di ambiente `CADDY_GLOBAL_OPTIONS` su `debug` per abilitare la modalità debug: @@ -397,7 +419,7 @@ frankenphp completion bash > $(brew --prefix)/share/bash-completion/completions/ ### Zsh -Se il completamento della shell non è già abilitato nell'ambiente, andrà abilitato. È possibile eseguire quanto segue una volta: +Se il completamento della shell non è già abilitato nell'ambiente, sarà necessario abilitarlo. È possibile eseguire quanto segue una volta: ```console echo "autoload -U compinit; compinit" >> ~/.zshrc diff --git a/docs/ja/config.md b/docs/ja/config.md index ce596b5984..5343bcf41b 100644 --- a/docs/ja/config.md +++ b/docs/ja/config.md @@ -1,3 +1,8 @@ +--- +title: Caddyfile、php.ini、環境変数によるFrankenPHPの設定 +description: Caddyfile、JSON、または環境変数を使用してFrankenPHPとCaddyを設定します。これには、PHPランタイムチューニング、ワーカーモード、ファイル監視、モジュールオプションが含まれます。 +--- + # 設定 FrankenPHP、Caddy、そして[Mercure](mercure.md)や[Vulcain](https://vulcain.rocks)モジュールは、[Caddyでサポートされる形式](https://caddyserver.com/docs/getting-started#your-first-config)を使用して設定できます。 @@ -40,10 +45,10 @@ PHP: ```dockerfile FROM dunglas/frankenphp -# Production: +# 本番環境用: RUN cp $PHP_INI_DIR/php.ini-production $PHP_INI_DIR/php.ini -# Or development: +# または開発環境用: RUN cp $PHP_INI_DIR/php.ini-development $PHP_INI_DIR/php.ini ``` @@ -67,7 +72,7 @@ FrankenPHP: PHP: -- `php.ini`: `frankenphp run`または`frankenphp php-server`を実行したディレクトリ内、なければ`/etc/frankenphp/php.ini`を参照 +- `php.ini`: `frankenphp run`または`frankenphp php-server`が実行されるディレクトリ、次に`/etc/frankenphp/php.ini` - 追加の設定ファイル: `/etc/frankenphp/php.d/*.ini` - PHP拡張モジュール: ロードできません、バイナリ自体にバンドルする必要があります - [PHPソース](https://github.com/php/php-src/)で提供される`php.ini-production`または`php.ini-development`のいずれかをコピーしてください。 @@ -92,8 +97,8 @@ FrankenPHPは、`frankenphp`の[グローバルオプション](https://caddyser ```caddyfile { frankenphp { - num_threads # 開始するPHPスレッド数を設定します。デフォルト: 利用可能なCPU数の2倍。 - max_threads # 実行時に追加で開始できるPHPスレッドの最大数を制限します。デフォルト: num_threads。 'auto'を設定可能。 + num_threads # ワーカーが処理しないリクエストに対して開始するPHPスレッド数を設定します。ワーカーのスレッドはこれに追加されます。デフォルト: ワーカーがスレッドを確保した後に残る利用可能なCPU数の2倍(最低1つ)。 + max_threads # ワーカーを含む、同時に実行できるPHPスレッドの最大数を制限します。デフォルト: 起動時に開始されたスレッド数。'auto'に設定可能。 max_wait_time # リクエストがタイムアウトする前にPHPのスレッドが空くのを待つ最大時間を設定します。デフォルト: 無効。 max_idle_time # 自動スケーリングされたスレッドが非アクティブ化されるまでにアイドル状態である最大時間を設定します。デフォルト: 5秒。 max_requests # (実験的) PHPスレッドが再起動されるまでに処理するリクエストの最大数を設定します。メモリリークの軽減に役立ちます。通常スレッドとワーカースレッドの両方に適用されます。デフォルト: 0 (無制限)。 @@ -150,6 +155,7 @@ other.example.com { より細かい制御が必要な場合は、より低レベルの`php`ディレクティブを使用できます。 `php`ディレクティブは、対象がPHPファイルかどうかを確認せず、すべての入力をPHPに渡します。 詳しくは[パフォーマンスページ](performance.md#try_files)をお読みください。 +パスに`split_path`拡張子が含まれないリクエストは、ワーカーが処理しない限り404となります。 `php_server`ディレクティブの使用は、以下の設定と同等です: @@ -181,12 +187,14 @@ php_server [] { root # サイトのルートフォルダを設定します。デフォルト: `root`ディレクティブ。 split_path # URIを2つの部分に分割するための部分文字列を設定します。最初にマッチする部分文字列がURIから「パス情報」を分割するために使用されます。最初の部分はマッチする部分文字列で接尾辞が付けられ、実際のリソース(CGIスクリプト)名とみなされます。2番目の部分はスクリプトが使用する PATH_INFO に設定されます。デフォルト: `.php` resolve_root_symlink false # シンボリックリンクが存在する場合`root`ディレクトリをシンボリックリンクの評価によって実際の値に解決することを無効にする(デフォルトで有効)。 + name # このサーバーの名前を設定します。ワーカー、メトリクス、ログの属性に使用されます。デフォルト: 囲むルートの最初のホストマッチャー、または最初のリスナーアドレス。 env # 追加の環境変数を指定された値に設定する。複数の環境変数を指定する場合は、複数回指定することができます。 file_server off # 組み込みのfile_serverディレクティブを無効にします。 + request_body_timeout # リクエストボディの読み込みに対するアイドルタイムアウトを設定します。 stalled (遅い POST) クライアントは切断されますが、安定したアップロードはサイズに関わらず成功します。デフォルト: 60秒。無効にするには 0 に設定します。 worker { # このサーバー固有のワーカーを作成します。複数のワーカーに対して複数回指定できます。 file # ワーカースクリプトへのパスを設定します。php_serverのルートからの相対パスとなります。 num # 起動するPHPスレッド数を設定します。デフォルトは利用可能なCPU数の2倍です。 - name # ログとメトリクスで使用されるワーカーの名前を設定します。デフォルト: ワーカーファイルの絶対パス。php_server ブロックで定義されている場合は、常にm#で始まります。 + name # ログとメトリクスで使用されるワーカーの名前を設定します。デフォルト: ワーカーファイルの絶対パス。名前が既に使用されている場合は、番号が末尾に付加されます。 watch # ファイルの変更を監視するパスを設定する。複数のパスに対して複数回指定することができる。 env # 追加の環境変数を指定された値に設定する。複数の環境変数を指定する場合は、複数回指定することができます。このワーカーの環境変数もphp_serverの親から継承されますが、 ここで上書きすることもできます。 match # ワーカーをパスパターンにマッチさせます。try_filesを上書きし、php_serverディレクティブでのみ使用できます。 @@ -305,7 +313,7 @@ FPM や CLI SAPI と同様に、環境変数はデフォルトで`$_SERVER`ス frankenphp { php_ini memory_limit 256M - # or + # または php_ini { memory_limit 256M @@ -352,6 +360,20 @@ CADDY_GLOBAL_OPTIONS="servers { この設定の詳細については、[Caddyドキュメント](https://caddyserver.com/docs/caddyfile/options#enable-full-duplex)をご覧ください。 +### リクエストボディサイズ制限 + +リクエストボディのサイズを制限するには、[`request_body`ディレクティブ](https://caddyserver.com/docs/caddyfile/directives/request_body)を使用します。 + +```caddyfile +request_body { + max_size 10MB +} +``` + +より大きなボディを持つリクエストは、`413 Request Entity Too Large`レスポンスを受け取ります。 +スクリプトが開始する前にPHPがボディを読み取る場合(フォームやファイルアップロードなどの`Content-Type`を持つ`POST`リクエスト)、スクリプトは実行されません。 +スクリプトが`php://input`または`request_parse_body()`を通じてボディ自体を読み取る場合、制限に達すると読み取りは`FrankenPHP\RequestBodyTooLargeException`をスローするため、切り詰められたボディが完全なものと誤解されることはありません。 + ## デバッグモードの有効化 Dockerイメージを使用する場合、`CADDY_GLOBAL_OPTIONS`環境変数に`debug`を設定するとデバッグモードが有効になります: @@ -363,7 +385,7 @@ docker run -v $PWD:/app/public \ dunglas/frankenphp ``` -## Shell completion +## シェル補完 FrankenPHPはBash、Zsh、Fish、およびPowerShell用のシェル補完機能を内蔵しています。これにより、すべてのコマンド(`php-server`、`php-cli`、`extension-init`などのカスタムコマンドを含む)とそのフラグのオートコンプリートが可能になります。 @@ -435,5 +457,3 @@ Add-Content -Path $PROFILE -Value '. (Join-Path (Split-Path $PROFILE) "frankenph ``` この設定を有効にするには、新しいシェルを起動する必要があります。 - -この設定を有効にするには、新しいシェルを起動する必要があります。 diff --git a/docs/pt-br/config.md b/docs/pt-br/config.md index 42569eac07..f3da3b639c 100644 --- a/docs/pt-br/config.md +++ b/docs/pt-br/config.md @@ -1,3 +1,8 @@ +--- +title: Configurando FrankenPHP com Caddyfile, php.ini e variáveis de ambiente +description: Configure FrankenPHP e Caddy via Caddyfile, JSON ou variáveis de ambiente, incluindo ajustes de tempo de execução do PHP, modo worker, monitoramento de arquivos e opções de módulo. +--- + # Configuração FrankenPHP, Caddy, bem como os módulos [Mercure](mercure.md) e [Vulcain](https://vulcain.rocks), podem ser configurados usando [os formatos suportados pelo Caddy](https://caddyserver.com/docs/getting-started#your-first-config). @@ -68,7 +73,7 @@ FrankenPHP: PHP: -- `php.ini`: O diretório no qual `frankenphp run` ou `frankenphp php-server` é executado, e então `/etc/frankenphp/php.ini` +- `php.ini`: O diretório onde `frankenphp run` ou `frankenphp php-server` é executado, e então `/etc/frankenphp/php.ini` - arquivos de configuração adicionais: `/etc/frankenphp/php.d/*.ini` - extensões PHP: não podem ser carregadas, inclua-as no próprio binário - copie um dos arquivos `php.ini-production` ou `php.ini-development` fornecidos [nas fontes do PHP](https://github.com/php/php-src/). @@ -93,8 +98,8 @@ Você também pode configurar explicitamente o FrankenPHP usando a [opção glob ```caddyfile { frankenphp { - num_threads # Define o número de threads PHP a serem iniciadas. Padrão: 2x o número de CPUs disponíveis. - max_threads # Limita o número de threads PHP adicionais que podem ser iniciadas em tempo de execução. Padrão: num_threads. Pode ser definido como 'auto'. + num_threads # Define o número de threads PHP a serem iniciadas para requisições que nenhum worker atende, com as threads de worker sendo adicionadas a isso. Padrão: o que resta de 2x o número de CPUs disponíveis depois que os workers tiverem suas threads, no mínimo uma. + max_threads # Limita quantas threads PHP podem ser executadas simultaneamente, incluindo as threads de worker. Padrão: as threads iniciadas na inicialização. Pode ser definido como 'auto'. max_wait_time # Define o tempo máximo que uma requisição pode esperar por uma thread PHP livre antes de atingir o tempo limite. Padrão: desabilitado. max_idle_time # Define o tempo máximo que uma thread autoescalada pode ficar ociosa antes de ser desativada. Padrão: 5s. max_requests # (experimental) Define o número máximo de requisições que uma thread PHP irá processar antes de ser reiniciada, útil para mitigar vazamentos de memória. Aplica-se a threads regulares e de worker. Padrão: 0 (ilimitado). @@ -151,6 +156,7 @@ Usar a diretiva `php_server` é geralmente o que você precisa, mas se precisar de controle total, você pode usar a diretiva `php` de mais baixo nível. A diretiva `php` passa toda a entrada para o PHP, em vez de primeiro verificar se é um arquivo PHP ou não. Leia mais sobre isso na [página de desempenho](performance.md#try_files). +Uma requisição cujo caminho não contém nenhuma das extensões `split_path` recebe um 404, a menos que um worker a manipule. Usar a diretiva `php_server` é equivalente a esta configuração: @@ -180,14 +186,16 @@ As diretivas `php_server` e `php` têm as seguintes opções: ```caddyfile php_server [] { root # Define a pasta raiz para o site. Padrão: diretiva `root`. - split_path # Define as substrings para dividir o URI em duas partes. A primeira substring correspondente será usada para separar as "informações de caminho" do caminho. A primeira parte é sufixada com a substring correspondente e será assumida como o nome real do recurso (script CGI). A segunda parte será definida como PATH_INFO para o script usar. Padrão: `.php` + split_path # Define as substrings para dividir o URI em duas partes. A primeira substring correspondente que termina um segmento de caminho será usada para dividir as "informações de caminho" do caminho. A primeira parte é sufixada com a substring correspondente e será assumida como o nome real do recurso (script CGI). A segunda parte será definida como PATH_INFO para o script usar. Padrão: `.php` resolve_root_symlink false # Desabilita a resolução do diretório `root` para seu valor real avaliando um link simbólico, se houver (habilitado por padrão). + name # Define o nome para este servidor, usado para atribuir workers, métricas e logs. Padrão: o primeiro host matcher da rota envolvente, ou o primeiro endereço de escuta. env # Define uma variável de ambiente extra para o valor fornecido. Pode ser especificada mais de uma vez para múltiplas variáveis de ambiente. file_server off # Desabilita a diretiva integrada file_server. + request_body_timeout # Define um tempo limite de inatividade nas leituras do corpo da requisição: um cliente paralisado (POST lento) é desconectado enquanto um upload constante de qualquer tamanho é bem-sucedido. Padrão: 60s. Defina como 0 para desabilitar. worker { # Cria um worker específico para este servidor. Pode ser especificada mais de uma vez para múltiplos workers. file # Define o caminho para o script do worker, pode ser relativo à raiz do php_server num # Define o número de threads PHP a serem iniciadas, o padrão é 2x o número de CPUs disponíveis. - name # Define o nome para o worker, usado em logs e métricas. Padrão: caminho absoluto do arquivo do worker. Sempre começa com m# quando definido em um bloco php_server. + name # Define o nome para o worker, usado em logs e métricas. Padrão: caminho absoluto do arquivo do worker. Sufixado com um número se o nome já estiver em uso. watch # Define o caminho para monitorar alterações em arquivos. Pode ser especificada mais de uma vez para múltiplos caminhos. env # Define uma variável de ambiente extra para o valor fornecido. Pode ser especificada mais de uma vez para múltiplas variáveis de ambiente. As variáveis de ambiente para este worker também são herdadas do pai do php_server, mas podem ser sobrescritas aqui. match # Corresponde o worker a um padrão de caminho. Sobrescreve try_files e só pode ser usada na diretiva php_server. @@ -247,7 +255,7 @@ O monitor de arquivos é baseado em [e-dant/watcher](https://github.com/e-dant/w Em aplicações PHP tradicionais, scripts são sempre colocados no diretório público. Isso também é verdade para worker scripts, que são tratados como qualquer outro script PHP. -Se você quiser, em vez disso, colocar o worker script fora do diretório público, pode fazê-lo via a diretiva `match`. +Se você quiser, em vez disso, colocar o script do worker fora do diretório público, pode fazê-lo via a diretiva `match`. A diretiva `match` é uma alternativa otimizada para `try_files`, disponível apenas dentro de `php_server` e `php`. O exemplo a seguir sempre servirá um arquivo no diretório público, se presente, @@ -333,7 +341,7 @@ Se você quiser usar HTTPS com o endereço IP `127.0.0.1` em vez do nome de host ### Full duplex (HTTP/1) Ao usar HTTP/1.x, pode ser desejável habilitar o modo full-duplex para permitir a gravação de uma resposta antes que o corpo inteiro -tenha sido lido. (por exemplo: [Mercure](mercure.md), WebSocket, Server-Sent Events, etc.) +tenha sido lido (por exemplo: [Mercure](mercure.md), WebSocket, Server-Sent Events, etc.). Esta é uma configuração opcional que precisa ser adicionada às opções globais no `Caddyfile`: @@ -358,6 +366,20 @@ CADDY_GLOBAL_OPTIONS="servers { Você pode encontrar mais informações sobre esta configuração na [documentação do Caddy](https://caddyserver.com/docs/caddyfile/options#enable-full-duplex). +## Limite de tamanho do corpo da requisição + +Para limitar o tamanho dos corpos de requisição, use a diretiva [`request_body`](https://caddyserver.com/docs/caddyfile/directives/request_body): + +```caddyfile +request_body { + max_size 10MB +} +``` + +Requisições com um corpo maior recebem uma resposta `413 Request Entity Too Large`. +Se o PHP lê o corpo antes do script iniciar (requisições `POST` com um `Content-Type`, como formulários e uploads de arquivos), o script não é executado. +Se o script lê o corpo diretamente, através de `php://input` ou `request_parse_body()`, a leitura lança uma `FrankenPHP\RequestBodyTooLargeException` assim que o limite é atingido, garantindo que um corpo truncado nunca seja confundido com um completo. + ## Habilitar o modo de depuração Ao usar a imagem Docker, defina a variável de ambiente `CADDY_GLOBAL_OPTIONS` como `debug` para habilitar o modo de depuração: diff --git a/docs/ru/config.md b/docs/ru/config.md index 1abb372ca8..31b65d4d75 100644 --- a/docs/ru/config.md +++ b/docs/ru/config.md @@ -1,3 +1,8 @@ +--- +title: Настройка FrankenPHP с Caddyfile, php.ini и переменными окружения +description: Настройте FrankenPHP и Caddy через Caddyfile, JSON или переменные окружения, включая настройку среды выполнения PHP, режим worker, отслеживание файлов и опции модулей. +--- + # Конфигурация FrankenPHP, Caddy, а также модули [Mercure](mercure.md) и [Vulcain](https://vulcain.rocks) могут быть настроены с использованием [форматов, поддерживаемых Caddy](https://caddyserver.com/docs/getting-started#your-first-config). @@ -92,8 +97,8 @@ localhost { ```caddyfile { frankenphp { - num_threads # Устанавливает количество запускаемых потоков PHP. По умолчанию: 2x от числа доступных CPU. - max_threads # Ограничивает количество дополнительных потоков PHP, которые могут быть запущены во время выполнения. По умолчанию: num_threads. Может быть установлено в 'auto'. + num_threads # Устанавливает количество потоков PHP для обработки запросов, не обслуживаемых воркерами; потоки воркеров добавляются сверх этого. По умолчанию: остаток от 2x количества доступных CPU после того, как воркеры получат свои потоки, но не менее одного. + max_threads # Ограничивает общее количество одновременно запущенных потоков PHP, включая потоки воркеров. По умолчанию: количество потоков, запущенных при загрузке. Может быть установлено в 'auto'. max_wait_time # Устанавливает максимальное время, в течение которого запрос может ожидать свободный поток PHP до истечения таймаута. По умолчанию: отключено. max_idle_time # Устанавливает максимальное время бездействия автоматически масштабируемого потока до его деактивации. По умолчанию: 5s. max_requests # (экспериментально) Устанавливает максимальное количество запросов, которое PHP-поток обработает до перезапуска, полезно для смягчения утечек памяти. Применяется как к обычным, так и к worker-потокам. По умолчанию: 0 (без ограничений). @@ -150,6 +155,7 @@ other.example.com { но если требуется полный контроль, вы можете использовать более низкоуровневую директиву `php`. Директива `php` передает все входные данные PHP, не проверяя предварительно, является ли это PHP-файлом или нет. Подробнее об этом читайте на [странице производительности](performance.md#try_files). +Запрос, путь которого не содержит ни одного из расширений `split_path`, получает 404, если только его не обрабатывает воркер. Использование директивы `php_server` эквивалентно следующей конфигурации: @@ -179,14 +185,16 @@ route { ```caddyfile php_server [] { root # Устанавливает корневую папку для сайта. По умолчанию: директива `root`. - split_path # Устанавливает подстроки для разделения URI на две части. Первая совпадающая подстрока будет использована для разделения "path info" от пути. Первая часть будет дополнена совпадающей подстрокой и будет считаться фактическим именем ресурса (CGI-скрипта). Вторая часть будет установлена как PATH_INFO для использования скриптом. По умолчанию: `.php`. + split_path # Устанавливает подстроки для разделения URI на две части. Первая совпадающая подстрока, которая заканчивает сегмент пути, будет использована для разделения "path info" от пути. Первая часть дополняется совпадающей подстрокой и считается фактическим именем ресурса (CGI-скрипта). Вторая часть будет установлена как PATH_INFO для использования скриптом. По умолчанию: `.php`. resolve_root_symlink false # Отключает разрешение директории `root` до ее фактического значения путем оценки символической ссылки, если таковая существует (включено по умолчанию). + name # Устанавливает имя для этого сервера, используемое для атрибуции воркеров, метрик и логов. По умолчанию: первый хост-матчер объемлющего маршрута или первый адрес прослушивателя. env # Устанавливает дополнительную переменную окружения с заданным значением. Может быть указано несколько раз для нескольких переменных окружения. file_server off # Отключает встроенную директиву file_server. + request_body_timeout # Устанавливает тайм-аут простоя при чтении тела запроса: зависший (медленный POST) клиент отключается, в то время как стабильная загрузка любого размера проходит успешно. По умолчанию: 60с. Установите 0, чтобы отключить. worker { # Создает worker, специфичный для этого сервера. Может быть указано несколько раз для нескольких workers. file # Устанавливает путь к worker-скрипту, может быть относительным к корню php_server - num # Устанавливает количество запускаемых потоков PHP, по умолчанию 2x от числа доступных - name # Устанавливает имя для worker, используемое в логах и метриках. По умолчанию: абсолютный путь к файлу worker. Всегда начинается с m# при определении в блоке php_server. + num # Устанавливает количество запускаемых потоков PHP, по умолчанию 2x от числа доступных CPU + name # Устанавливает имя для воркера, используемое в логах и метриках. По умолчанию: абсолютный путь к файлу воркера. Добавляется суффикс с числом, если имя уже используется. watch # Устанавливает путь для отслеживания изменений файлов. Может быть указано несколько раз для нескольких путей. env # Устанавливает дополнительную переменную окружения с заданным значением. Может быть указано несколько раз для нескольких переменных окружения. Переменные окружения для этого worker также наследуются от родительского php_server, но могут быть переопределены здесь. match # сопоставляет worker с шаблоном пути. Переопределяет try_files и может использоваться только в директиве php_server. @@ -350,6 +358,20 @@ CADDY_GLOBAL_OPTIONS="servers { Дополнительную информацию об этой настройке можно найти в [документации Caddy](https://caddyserver.com/docs/caddyfile/options#enable-full-duplex). +### Ограничение размера тела запроса + +Для ограничения размера тела запросов используйте директиву [`request_body`](https://caddyserver.com/docs/caddyfile/directives/request_body): + +```caddyfile +request_body { + max_size 10MB +} +``` + +Запросы с большим телом получают ответ `413 Request Entity Too Large`. +Если PHP считывает тело до запуска скрипта (для `POST`-запросов с `Content-Type`, таких как формы и загрузка файлов), скрипт не выполняется. +Если скрипт считывает тело сам, через `php://input` или `request_parse_body()`, чтение вызывает `FrankenPHP\RequestBodyTooLargeException` при достижении лимита, поэтому усеченное тело никогда не будет ошибочно принято за полное. + ## Включение режима отладки При использовании Docker-образа установите переменную окружения `CADDY_GLOBAL_OPTIONS` в `debug`, чтобы включить режим отладки: @@ -433,5 +455,3 @@ Add-Content -Path $PROFILE -Value '. (Join-Path (Split-Path $PROFILE) "frankenph ``` Вам потребуется запустить новую оболочку, чтобы эти настройки вступили в силу. - -Вам потребуется запустить новую оболочку, чтобы эти настройки вступили в силу. diff --git a/docs/tr/config.md b/docs/tr/config.md index ca16f996d1..82c718924d 100644 --- a/docs/tr/config.md +++ b/docs/tr/config.md @@ -1,8 +1,13 @@ -# Konfigürasyon +--- +title: FrankenPHP'yi Caddyfile, php.ini ve ortam değişkenleriyle yapılandırma +description: FrankenPHP ve Caddy'yi Caddyfile, JSON veya ortam değişkenleri aracılığıyla yapılandırın; buna PHP çalışma zamanı ayarları, worker modu, dosya izleme ve modül seçenekleri dahildir. +--- -FrankenPHP, Caddy'nin yanı sıra [Mercure](mercure.md) ve [Vulcain](https://vulcain.rocks) modülleri [Caddy tarafından desteklenen formatlar](https://caddyserver.com/docs/getting-started#your-first-config) kullanılarak yapılandırılabilir. +# Yapılandırma -En yaygın format, basit, insan tarafından okunabilir bir metin formatı olan `Caddyfile`'dır. Varsayılan olarak, FrankenPHP mevcut dizinde bir `Caddyfile` arar. Özel bir yol belirtmek için `-c` veya `--config` seçeneğini kullanabilirsiniz. +FrankenPHP, Caddy'nin yanı sıra [Mercure](mercure.md) ve [Vulcain](https://vulcain.rocks) modülleri, [Caddy tarafından desteklenen formatlar](https://caddyserver.com/docs/getting-started#your-first-config) kullanılarak yapılandırılabilir. + +En yaygın format, basit, insan tarafından okunabilir bir metin formatı olan `Caddyfile`'dır. Varsayılan olarak, FrankenPHP mevcut dizinde bir `Caddyfile` arayacaktır. Özel bir yol belirtmek için `-c` veya `--config` seçeneğini kullanabilirsiniz. Bir PHP uygulamasını sunmak için minimal bir `Caddyfile` aşağıda gösterilmiştir: @@ -38,10 +43,10 @@ PHP: ```dockerfile FROM dunglas/frankenphp -# Production: +# Üretim için: RUN cp $PHP_INI_DIR/php.ini-production $PHP_INI_DIR/php.ini -# Veya development: +# Veya geliştirme için: RUN cp $PHP_INI_DIR/php.ini-development $PHP_INI_DIR/php.ini ``` @@ -70,7 +75,7 @@ PHP: - PHP uzantıları: yüklenemez, bunları doğrudan ikili dosyaya dahil edin - [PHP kaynak kodu](https://github.com/php/php-src/) ile birlikte verilen `php.ini-production` veya `php.ini-development` dosyalarından birini kopyalayın. -## Caddyfile konfigürasyonu +## Caddyfile yapılandırması PHP uygulamanızı sunmak için site blokları içinde `php_server` veya `php` [HTTP yönergeleri](https://caddyserver.com/docs/caddyfile/concepts#directives) kullanılabilir. @@ -90,17 +95,18 @@ Ayrıca, FrankenPHP'yi [global seçenek](https://caddyserver.com/docs/caddyfile/ ```caddyfile { frankenphp { - num_threads # Başlatılacak PHP iş parçacığı sayısını ayarlar. Varsayılan: Mevcut CPU'ların 2 katı. - max_threads # Çalışma zamanında başlatılabilecek ek PHP iş parçacığı sayısını sınırlar. Varsayılan: num_threads. 'auto' olarak ayarlanabilir. - max_wait_time # Bir isteğin boş bir PHP iş parçacığı bekleme süresinin zaman aşımına uğramadan önceki maksimum süresini ayarlar. Varsayılan: devre dışı. + num_threads # Worker'ların kendi iş parçacıklarına sahip olduktan sonra, geriye kalan mevcut CPU sayısının 2 katından kalan kadar, en az bir tane olacak şekilde, worker'ın hizmet vermediği istekler için başlatılacak PHP iş parçacığı sayısını ayarlar. Varsayılan: mevcut CPU'ların 2 katının worker'lar tarafından kullanılan kısmı çıkarıldıktan sonra kalan, en az 1. + max_threads # Worker'lar dahil olmak üzere aynı anda kaç PHP iş parçacığının çalışabileceğini sınırlar. Varsayılan: önyüklemede başlatılan iş parçacıkları. 'auto' olarak ayarlanabilir. + max_wait_time # Bir isteğin, zaman aşımına uğramadan önce boş bir PHP iş parçacığı bekleme süresinin maksimum süresini ayarlar. Varsayılan: devre dışı. max_idle_time # Otomatik ölçeklenen bir iş parçacığının devre dışı bırakılmadan önce ne kadar süre boş kalabileceğini ayarlar. Varsayılan: 5s. + max_requests # (deneysel) Bir PHP iş parçacığının yeniden başlatılmadan önce işleyeceği maksimum istek sayısını ayarlar, bellek sızıntılarını azaltmak için kullanışlıdır. Hem düzenli hem de worker iş parçacıkları için geçerlidir. Varsayılan: 0 (sınırsız). php_ini # Bir php.ini yönergesi ayarlar. Birden fazla yönerge ayarlamak için birden fazla kez kullanılabilir. worker { - file # Çalışan komut dosyasının yolunu ayarlar. + file # Worker komut dosyasının yolunu ayarlar. num # Başlatılacak PHP iş parçacığı sayısını ayarlar, varsayılan değer mevcut CPU'ların 2 katıdır. env # Ek bir ortam değişkenini verilen değere ayarlar. Birden fazla ortam değişkeni için birden fazla kez belirtilebilir. watch # Dosya değişikliklerini izlemek için yolu ayarlar. Birden fazla yol için birden fazla kez belirtilebilir. - name # İşçinin adını ayarlar, günlüklerde ve metriklerde kullanılır. Varsayılan: işçi dosyasının mutlak yolu. + name # İşçinin adını ayarlar, günlüklerde ve metriklerde kullanılır. Varsayılan: worker dosyasının mutlak yolu max_consecutive_failures # İşçinin sağlıksız kabul edilmeden önceki maksimum ardışık hata sayısını ayarlar, -1 işçinin her zaman yeniden başlayacağı anlamına gelir. Varsayılan: 6. } } @@ -146,6 +152,7 @@ other.example.com { Genellikle ihtiyacınız olan şey `php_server` yönergesini kullanmaktır, ancak tam kontrole ihtiyacınız varsa, daha düşük seviyeli `php` yönergesini kullanabilirsiniz. `php` yönergesi, önce bir PHP dosyası olup olmadığını kontrol etmek yerine tüm girdiyi PHP'ye iletir. Daha fazla bilgiyi [performans sayfasında](performance.md#try_files) okuyun. +Yolunda `split_path` uzantılarından hiçbiri bulunmayan bir istek, bir worker tarafından işlenmediği sürece 404 alır. `php_server` yönergesini kullanmak bu yapılandırmayla aynıdır: @@ -175,17 +182,19 @@ route { ```caddyfile php_server [] { root # Sitenin kök klasörünü ayarlar. Varsayılan: `root` yönergesi. - split_path # URI'yi iki parçaya bölmek için alt dizgeleri ayarlar. İlk eşleşen alt dizge "yol bilgisini" yoldan ayırmak için kullanılır. İlk parça eşleşen alt dizeyle sonlandırılır ve gerçek kaynak (CGI betiği) adı olarak kabul edilir. İkinci parça betiğin kullanması için PATH_INFO olarak ayarlanacaktır. Varsayılan: `.php` + split_path # URI'yi iki parçaya bölmek için alt dizgeleri ayarlar. Bir yol segmentini sonlandıran ilk eşleşen alt dize, "yol bilgisini" yoldan ayırmak için kullanılır. İlk parça eşleşen alt dizeyle sonlandırılır ve gerçek kaynak (CGI betiği) adı olarak kabul edilir. İkinci parça betiğin kullanması için PATH_INFO olarak ayarlanacaktır. Varsayılan: `.php` resolve_root_symlink false # Varsa, sembolik bir bağlantıyı değerlendirerek `root` dizininin gerçek değerine çözümlenmesini devre dışı bırakır (varsayılan olarak etkindir). + name # Bu sunucu için günlüklerde ve metriklerde kullanılan bir ad ayarlar. Varsayılan: çevreleyen rotanın ilk ana bilgisayar eşleştiricisi veya ilk dinleyici adresi. env # Ek bir ortam değişkenini verilen değere ayarlar. Birden fazla ortam değişkeni için birden fazla kez belirtilebilir. file_server off # Yerleşik file_server yönergesini devre dışı bırakır. + request_body_timeout # İstek gövdesi okumalarında bir boşta kalma zaman aşımı ayarlar: tıkanmış (yavaş POST) bir istemci bağlantısı kesilirken, herhangi bir boyutta sürekli bir yükleme başarılı olur. Varsayılan: 60s. Devre dışı bırakmak için 0 olarak ayarlayın. worker { # Bu sunucuya özgü bir worker oluşturur. Birden fazla worker için birden fazla kez belirtilebilir. file # Worker betiğinin yolunu ayarlar, php_server köküne göre göreceli olabilir num # Başlatılacak PHP iş parçacığı sayısını ayarlar, varsayılan değer mevcut CPU'ların 2 katıdır. - name # Worker için günlüklerde ve metriklerde kullanılan bir ad ayarlar. Varsayılan: worker dosyasının mutlak yolu. Bir php_server bloğunda tanımlandığında her zaman m# ile başlar. + name # Worker için günlüklerde ve metriklerde kullanılan bir ad ayarlar. Varsayılan: worker dosyasının mutlak yolu. Ad zaten kullanılıyorsa bir numara ile son eklenir. watch # Dosya değişikliklerini izlemek için yolu ayarlar. Birden fazla yol için birden fazla kez belirtilebilir. env # Ek bir ortam değişkenini verilen değere ayarlar. Birden fazla ortam değişkeni için birden fazla kez belirtilebilir. Bu worker için ortam değişkenleri ayrıca php_server üst öğesinden devralınır, ancak burada geçersiz kılınabilir. - match # İşçiyi bir yol desenine eşleştirir. try_files'ı geçersiz kılar ve yalnızca php_server yönergesinde kullanılabilir. + match # Worker'ı bir yol desenine eşleştirir. try_files'ı geçersiz kılar ve yalnızca php_server yönergesinde kullanılabilir. } worker # Global frankenphp bloğundaki gibi kısa formu da kullanabilirsiniz. } @@ -235,9 +244,9 @@ Dosya izleyici [e-dant/watcher](https://github.com/e-dant/watcher) üzerine kuru ## İşçiyi yola eşleştirme -Geleneksel PHP uygulamalarında, betikler her zaman public dizininde bulunur. Bu, diğer tüm PHP betikleri gibi ele alınan işçi betikleri için de geçerlidir. İşçi betiğini public dizininin dışına koymak isterseniz, bunu `match` yönergesi aracılığıyla yapabilirsiniz. +Geleneksel PHP uygulamalarında, betikler her zaman public dizininde bulunur. Bu, diğer tüm PHP betikleri gibi ele alınan worker betikleri için de geçerlidir. Worker betiğini public dizininin dışına koymak isterseniz, bunu `match` yönergesi aracılığıyla yapabilirsiniz. -`match` yönergesi, yalnızca `php_server` ve `php` içinde bulunan `try_files`'a optimize edilmiş bir alternatiftir. Aşağıdaki örnek, varsa her zaman public dizinindeki bir dosyayı sunacak, aksi takdirde isteği yol desenine uyan işçiye iletecektir. +`match` yönergesi, yalnızca `php_server` ve `php` içinde bulunan `try_files`'a optimize edilmiş bir alternatiftir. Aşağıdaki örnek, varsa her zaman public dizinindeki bir dosyayı sunacak, aksi takdirde isteği yol desenine uyan worker'a iletecektir. ```caddyfile { @@ -252,6 +261,20 @@ Geleneksel PHP uygulamalarında, betikler her zaman public dizininde bulunur. Bu } ``` +## İstek sayısından sonra iş parçacıklarını yeniden başlatma (deneysel) + +FrankenPHP, PHP iş parçacıklarını belirli bir sayıda isteği işledikten sonra otomatik olarak yeniden başlatabilir. Bir iş parçacığı sınıra ulaştığında, tüm belleği ve durumu temizleyerek tamamen yeniden başlatılır. Yeniden başlatma sırasında diğer iş parçacıkları istekleri sunmaya devam eder. + +Zamanla belleğin arttığını fark ederseniz, ideal çözüm sızıntıyı ilgili uzantı veya kütüphane yöneticisine bildirmektir. Ancak çözüm, kontrol edemediğiniz bir üçüncü tarafa bağlıysa, `max_requests` üretim için pragmatik ve umarız geçici bir geçici çözüm sunar: + +```caddyfile +{ + frankenphp { + max_requests 500 + } +} +``` + ## Ortam değişkenleri Aşağıdaki ortam değişkenleri `Caddyfile` içinde değişiklik yapmadan Caddy yönergelerini entegre etmek için kullanılabilir: @@ -265,7 +288,7 @@ FPM ve CLI SAPI'lerinde olduğu gibi, ortam değişkenleri varsayılan olarak `$ [`variables_order`'a ait PHP yönergesinin](https://www.php.net/manual/ini.core.php#ini.variables-order) `S` değeri bu yönergede `E`'nin başka bir yere yerleştirilmesinden bağımsız olarak her zaman `ES` ile eş değerdir. -## PHP konfigürasyonu +## PHP yapılandırması Ek olarak [PHP yapılandırma dosyalarını](https://www.php.net/manual/configuration.file.php#configuration.file.scan) yüklemek için, `PHP_INI_SCAN_DIR` ortam değişkeni kullanılabilir. @@ -298,7 +321,7 @@ Eğer `localhost` ana bilgisayar adı yerine `127.0.0.1` IP adresiyle HTTPS kull ### Tam çift yönlü (HTTP/1) -HTTP/1.x kullanırken, tüm gövde okunmadan önce bir yanıt yazmaya izin vermek için tam çift yönlü modun etkinleştirilmesi istenebilir. (örneğin: [Mercure](mercure.md), WebSocket, Sunucu Tarafından Gönderilen Olaylar vb.) +HTTP/1.x kullanırken, tüm gövde okunmadan önce bir yanıt yazmaya izin vermek için tam çift yönlü modun etkinleştirilmesi istenebilir (örneğin: [Mercure](mercure.md), WebSocket, Sunucu Tarafından Gönderilen Olaylar vb.). Bu, `Caddyfile`'daki global seçeneklere eklenmesi gereken isteğe bağlı bir yapılandırmadır: @@ -323,6 +346,18 @@ CADDY_GLOBAL_OPTIONS="servers { Bu ayar hakkında daha fazla bilgiyi [Caddy belgelerinde](https://caddyserver.com/docs/caddyfile/options#enable-full-duplex) bulabilirsiniz. +### İstek gövdesi boyut sınırı + +İstek gövdelerinin boyutunu sınırlamak için [`request_body`](https://caddyserver.com/docs/caddyfile/directives/request_body) yönergesini kullanın: + +```caddyfile +request_body { + max_size 10MB +} +``` + +Daha büyük gövdeye sahip istekler `413 Request Entity Too Large` yanıtı alır. PHP, komut dosyası başlamadan önce gövdeyi okursa (formlar ve dosya yüklemeleri gibi `Content-Type` içeren `POST` istekleri), komut dosyası çalışmaz. Komut dosyası gövdeyi `php://input` veya `request_parse_body()` aracılığıyla kendisi okursa, sınıra ulaşıldığında okuma bir `FrankenPHP\RequestBodyTooLargeException` hatası fırlatır, böylece kesilen bir gövde asla tam olarak algılanmaz. + ## Hata ayıklama modunu etkinleştirin Docker imajını kullanırken, hata ayıklama modunu etkinleştirmek için `CADDY_GLOBAL_OPTIONS` ortam değişkenini `debug` olarak ayarlayın: @@ -334,9 +369,9 @@ docker run -v $PWD:/app/public \ dunglas/frankenphp ``` -## Shell completion +## Kabuk tamamlama -FrankenPHP, Bash, Zsh, Fish ve PowerShell için yerleşik kabuk tamamlama desteği sağlar. Bu, tüm komutlar ( `php-server`, `php-cli` ve `extension-init` gibi özel komutlar dahil) ve bunların bayrakları için otomatik tamamlama sağlar. +FrankenPHP, Bash, Zsh, Fish ve PowerShell için yerleşik kabuk tamamlama desteği sağlar. Bu, tüm komutlar (`php-server`, `php-cli` ve `extension-init` gibi özel komutlar dahil) ve bunların bayrakları için otomatik tamamlama sağlar. ### Bash @@ -406,5 +441,3 @@ Add-Content -Path $PROFILE -Value '. (Join-Path (Split-Path $PROFILE) "frankenph ``` Bu kurulumun etkili olması için yeni bir kabuk başlatmanız gerekecektir. - -Bu kurulumun etkili olması için yeni bir kabuk başlatmanız gerekecektir.