From 88fbbd9eac5cca80f015639498bf0e62797c1b71 Mon Sep 17 00:00:00 2001 From: Alexandre Daubois Date: Mon, 20 Jul 2026 11:05:36 +0200 Subject: [PATCH] docs: remove title case --- CONTRIBUTING.md | 34 ++++++++-------- README.md | 20 ++++----- SECURITY.md | 8 ++-- docs/cn/embed.md | 2 +- docs/cn/extension-workers.md | 6 +-- docs/cn/performance.md | 2 +- docs/cn/static.md | 2 +- docs/cn/worker.md | 8 ++-- docs/es/README.md | 2 +- docs/es/extension-workers.md | 2 +- docs/extension-workers.md | 2 +- docs/extensions.md | 10 ++--- docs/fr/config.md | 6 +-- docs/fr/extension-workers.md | 2 +- docs/fr/hot-reload.md | 2 +- docs/it/README.md | 2 +- docs/it/static.md | 2 +- docs/ja/config.md | 2 +- docs/ja/extensions.md | 4 +- docs/ja/performance.md | 2 +- docs/migrate.md | 2 +- docs/production.md | 2 +- docs/pt-br/config.md | 6 +-- docs/pt-br/docker.md | 6 +-- docs/pt-br/extension-workers.md | 22 +++++----- docs/pt-br/hot-reload.md | 10 ++--- docs/pt-br/performance.md | 4 +- docs/pt-br/production.md | 2 +- docs/pt-br/worker.md | 12 +++--- docs/ru/README.md | 2 +- docs/ru/config.md | 2 +- docs/ru/extension-workers.md | 10 ++--- docs/ru/extensions.md | 62 ++++++++++++++-------------- docs/ru/hot-reload.md | 2 +- docs/tr/CONTRIBUTING.md | 16 ++++---- docs/tr/README.md | 12 +++--- docs/tr/compile.md | 6 +-- docs/tr/config.md | 16 ++++---- docs/tr/docker.md | 22 +++++----- docs/tr/embed.md | 14 +++---- docs/tr/extension-workers.md | 24 +++++------ docs/tr/extensions.md | 72 ++++++++++++++++----------------- docs/tr/github-actions.md | 8 ++-- docs/tr/hot-reload.md | 10 ++--- docs/tr/known-issues.md | 12 +++--- docs/tr/laravel.md | 8 ++-- docs/tr/mercure.md | 2 +- docs/tr/performance.md | 14 +++---- docs/tr/production.md | 14 +++---- docs/tr/static.md | 10 ++--- docs/tr/worker.md | 18 ++++----- 51 files changed, 271 insertions(+), 271 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0a0cf26a1b..555333767a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -32,14 +32,14 @@ If your Docker version is lower than 23.0, the build will fail due to dockerigno [Follow the instructions to compile from sources](https://frankenphp.dev/docs/compile/) and pass the `--debug` configuration flag. -## Running the Test Suite +## Running the test suite ```console export CGO_CFLAGS=-O0 -g $(php-config --includes) CGO_LDFLAGS="$(php-config --ldflags) $(php-config --libs)" go test -race -v ./... ``` -## Caddy Module +## Caddy module Build Caddy with the FrankenPHP Caddy module: @@ -65,7 +65,7 @@ The server is listening on `127.0.0.1:80`: curl -vk http://127.0.0.1/phpinfo.php ``` -## Minimal Test Server +## Minimal test server Build the minimal test server: @@ -88,7 +88,7 @@ The server is listening on `127.0.0.1:8080`: curl -v http://127.0.0.1:8080/phpinfo.php ``` -## Windows Development +## Windows development 1. Configure Git to always use `lf` line endings @@ -155,7 +155,7 @@ curl -v http://127.0.0.1:8080/phpinfo.php cd ../.. ``` -## Building Docker Images Locally +## Building Docker images locally Print Bake plan: @@ -181,7 +181,7 @@ Build FrankenPHP images from scratch for arm64 & amd64 and push to Docker Hub: docker buildx bake -f docker-bake.hcl --pull --no-cache --push ``` -## Debugging Segmentation Faults With Static Builds +## Debugging segmentation faults with static builds 1. Download the debug version of the FrankenPHP binary from GitHub or create your custom static build including debug symbols: @@ -207,7 +207,7 @@ docker buildx bake -f docker-bake.hcl --pull --no-cache --push 7. Type `bt` in the GDB shell 8. Copy the output -## Debugging Segmentation Faults in GitHub Actions +## Debugging segmentation faults in GitHub Actions 1. Open `.github/workflows/tests.yml` 2. Enable PHP debug symbols @@ -251,7 +251,7 @@ docker buildx bake -f docker-bake.hcl --pull --no-cache --push 9. When the bug is fixed, revert all these changes -## Development Environment Setup (WSL/Unix) +## Development environment setup (WSL/Unix) ### Initial setup @@ -263,7 +263,7 @@ The steps assume the following environment: - PHP built at: `/usr/local/bin/php` - FrankenPHP source cloned to `~/frankenphp` -### CLion Setup for CGO glue/PHP Source Development +### CLion setup for CGO glue/PHP source development 1. Install CLion (on your host OS) @@ -317,7 +317,7 @@ The steps assume the following environment: --- -### GoLand Setup for FrankenPHP Development +### GoLand setup for FrankenPHP development Use GoLand for primary Go development, but the debugger cannot debug C code. @@ -335,7 +335,7 @@ Use GoLand for primary Go development, but the debugger cannot debug C code. --- -### Go Configuration +### Go configuration - Select Go Build - Name `frankenphp` @@ -357,7 +357,7 @@ Now you can place breakpoints in C, C++ and Go files. --- -### GoLand Setup on Windows +### GoLand setup on Windows 1. Follow the [Windows Development section](#windows-development) @@ -385,13 +385,13 @@ Now you can place breakpoints in C, C++ and Go files. --- -### Debugging and Integration Notes +### Debugging and integration notes - Use CLion for debugging PHP internals and `cgo` glue code - Use GoLand for primary Go development and debugging - FrankenPHP can be added as a run configuration in CLion for unified C/Go debugging if needed, but syntax highlighting won't work in Go files -## Misc Dev Resources +## Misc dev resources - [PHP embedding in uWSGI](https://github.com/unbit/uwsgi/blob/master/plugins/php/php_plugin.c) - [PHP embedding in NGINX Unit](https://github.com/nginx/unit/blob/master/src/nxt_php_sapi.c) @@ -402,19 +402,19 @@ Now you can place breakpoints in C, C++ and Go files. - [What the heck is TSRMLS_CC, anyway?](http://blog.golemon.com/2006/06/what-heck-is-tsrmlscc-anyway.html) - [SDL bindings](https://pkg.go.dev/github.com/veandco/go-sdl2@v0.4.21/sdl#Main) -## Docker-Related Resources +## Docker-related resources - [Bake file definition](https://docs.docker.com/build/customize/bake/file-definition/) - [`docker buildx build`](https://docs.docker.com/engine/reference/commandline/buildx_build/) -## Useful Command +## Useful command ```console apk add strace util-linux gdb strace -e 'trace=!futex,epoll_ctl,epoll_pwait,tgkill,rt_sigreturn' -p 1 ``` -## Translating the Documentation +## Translating the documentation To translate the documentation and the site into a new language, follow these steps: diff --git a/README.md b/README.md index f6307ab194..2e82f4f110 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# FrankenPHP: Modern App Server for PHP +# FrankenPHP: modern app server for PHP

FrankenPHP

@@ -14,9 +14,9 @@ FrankenPHP can also be used as a standalone Go library to embed PHP in any app u Slides -## Getting Started +## Getting started -### Install Script +### Install script On Linux and macOS, copy this line into your terminal to automatically install an appropriate version for your platform: @@ -31,7 +31,7 @@ On Windows, run this in PowerShell: irm https://frankenphp.dev/install.ps1 | iex ``` -### Standalone Binary +### Standalone binary We provide FrankenPHP binaries for Linux, macOS and Windows containing [PHP 8.5](https://www.php.net/releases/8.5/). @@ -42,7 +42,7 @@ Windows archives contain the official PHP binary for Windows. [Download FrankenPHP](https://github.com/php/frankenphp/releases) -### rpm Packages +### rpm packages Our maintainers offer rpm packages for all systems using `dnf`. To install, run: @@ -61,7 +61,7 @@ sudo dnf install pie-zts sudo pie-zts install asgrim/example-pie-extension ``` -### deb Packages +### deb packages Our maintainers offer deb packages for all systems using `apt`. To install, run: @@ -82,7 +82,7 @@ sudo apt install pie-zts sudo pie-zts install asgrim/example-pie-extension ``` -### apk Packages +### apk packages Our maintainers offer apk packages for all systems using `apk`. To install, run: @@ -160,9 +160,9 @@ Go to `https://localhost`, and enjoy! - [Real-time](https://frankenphp.dev/docs/mercure/) - [Logging](https://frankenphp.dev/docs/logging/) - [Hot reloading](https://frankenphp.dev/docs/hot-reload/) -- [Efficiently Serving Large Static Files](https://frankenphp.dev/docs/x-sendfile/) +- [Efficiently serving large static files](https://frankenphp.dev/docs/x-sendfile/) - [Configuration](https://frankenphp.dev/docs/config/) -- [Writing PHP Extensions in Go](https://frankenphp.dev/docs/extensions/) +- [Writing PHP extensions in Go](https://frankenphp.dev/docs/extensions/) - [Docker images](https://frankenphp.dev/docs/docker/) - [Deploy in production](https://frankenphp.dev/docs/production/) - [Performance optimization](https://frankenphp.dev/docs/performance/) @@ -179,7 +179,7 @@ Go to `https://localhost`, and enjoy! - [Contributing and debugging](https://frankenphp.dev/docs/contributing/) - [Internals (architecture overview)](docs/internals.md) -## Examples and Skeletons +## Examples and skeletons - [Symfony](https://frankenphp.dev/docs/symfony/) - [API Platform](https://api-platform.com/docs/symfony) diff --git a/SECURITY.md b/SECURITY.md index 4be17fda3e..f36718b723 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,19 +1,19 @@ -# Security Policy +# Security policy -## Supported Versions +## Supported versions Only the latest version is supported. Please ensure that you're always using the latest release. Binaries and Docker images are rebuilt nightly using the latest versions of dependencies. -## Security Model +## Security model FrankenPHP embeds the PHP interpreter into a Go and Caddy server, so its trust boundaries span Go, C, and PHP. Before auditing the project or reporting an issue, read the [security model documentation](docs/security.md), which describes what is trusted, what is not, and which attack surfaces belong to FrankenPHP itself. -## Reporting a Vulnerability +## Reporting a vulnerability If you believe you have discovered a security issue directly affecting FrankenPHP, please do **NOT** report it publicly. diff --git a/docs/cn/embed.md b/docs/cn/embed.md index 06f0478f74..86b345cb2f 100644 --- a/docs/cn/embed.md +++ b/docs/cn/embed.md @@ -125,7 +125,7 @@ EMBED=/path/to/your/app ./build-static.sh ./my-app php-cli bin/console ``` -## PHP Extensions +## PHP extensions 默认情况下,脚本将构建您项目的 `composer.json` 文件中所需的扩展(如果有的话)。 如果 `composer.json` 文件不存在,将构建默认扩展,如 [静态构建条目](static.md) 中所述。 diff --git a/docs/cn/extension-workers.md b/docs/cn/extension-workers.md index 98cef730ef..4a852ae4f3 100644 --- a/docs/cn/extension-workers.md +++ b/docs/cn/extension-workers.md @@ -1,8 +1,8 @@ -# 扩展 Worker +# 扩展 worker 扩展 Worker 使您的 [FrankenPHP 扩展](https://frankenphp.dev/docs/extensions/) 能够管理专用的 PHP 线程池,用于执行后台任务、处理异步事件或实现自定义协议。适用于队列系统、事件监听器、调度器等。 -## 注册 Worker +## 注册 worker ### 静态注册 @@ -41,7 +41,7 @@ func init() { 如果您 [在没有 Caddy 的标准 Go 应用程序中嵌入 FrankenPHP](https://pkg.go.dev/github.com/dunglas/frankenphp#example-ServeHTTP),您可以在初始化选项时使用 `frankenphp.WithExtensionWorkers` 注册扩展 worker。 -## 与 Worker 交互 +## 与 worker 交互 一旦 worker 池激活,您就可以向其分派任务。这可以在 [导出到 PHP 的原生函数](https://frankenphp.dev/docs/extensions/#writing-the-extension) 中完成,也可以从任何 Go 逻辑中完成,例如 cron 调度器、事件监听器 (MQTT、Kafka) 或任何其他 goroutine。 diff --git a/docs/cn/performance.md b/docs/cn/performance.md index e5bb224a13..8ad8f2e28c 100644 --- a/docs/cn/performance.md +++ b/docs/cn/performance.md @@ -3,7 +3,7 @@ 默认情况下,FrankenPHP 尝试在性能和易用性之间提供良好的折衷。 但是,通过使用适当的配置,可以大幅提高性能。 -## 线程和 Worker 数量 +## 线程和 worker 数量 默认情况下,FrankenPHP 启动的线程和 worker(在 worker 模式下)数量是可用 CPU 核心数的 2 倍。 diff --git a/docs/cn/static.md b/docs/cn/static.md index 8d38bf8d0b..b1a9ebfea6 100644 --- a/docs/cn/static.md +++ b/docs/cn/static.md @@ -91,7 +91,7 @@ docker buildx bake \ 参见:[自定义构建](#自定义构建) -### GitHub Token +### GitHub token 如果遇到了 GitHub API 速率限制,请在 `GITHUB_TOKEN` 的环境变量中设置 GitHub Personal Access Token: diff --git a/docs/cn/worker.md b/docs/cn/worker.md index f98dc13024..e1a2129f7f 100644 --- a/docs/cn/worker.md +++ b/docs/cn/worker.md @@ -1,9 +1,9 @@ -# 使用 FrankenPHP Workers +# 使用 FrankenPHP workers 启动一次应用程序并将其保存在内存中。 FrankenPHP 将在几毫秒内处理传入请求。 -## 启动 Worker 脚本 +## 启动 worker 脚本 ### Docker @@ -129,14 +129,14 @@ docker run \ dunglas/frankenphp ``` -### 在处理一定数量的请求后重启 Worker +### 在处理一定数量的请求后重启 worker 由于 PHP 最初不是为长时间运行的进程而设计的,仍有许多库和传统代码会泄漏内存。 在 worker 模式下使用此类代码的一个解决方法是在处理一定数量的请求后重启 worker 脚本: 前面的 worker 代码片段允许通过设置名为 `MAX_REQUESTS` 的环境变量来配置要处理的最大请求数。 -### 手动重启 Workers +### 手动重启 workers 虽然可以在[文件更改时重启 workers](config.md#watching-for-file-changes),但也可以通过 [Caddy admin API](https://caddyserver.com/docs/api) 优雅地重启所有 workers。如果在你的 [Caddyfile](config.md#caddyfile-config) 中启用了 admin,你可以通过简单的 POST 请求 ping 重启端点,如下所示: diff --git a/docs/es/README.md b/docs/es/README.md index 633ebd4fe2..99231568d7 100644 --- a/docs/es/README.md +++ b/docs/es/README.md @@ -14,7 +14,7 @@ Descubre más detalles sobre este servidor de aplicaciones en la grabación de e Diapositivas -## Para Comenzar +## Para comenzar En Windows, usa [WSL](https://learn.microsoft.com/es-es/windows/wsl/) para ejecutar FrankenPHP. diff --git a/docs/es/extension-workers.md b/docs/es/extension-workers.md index 5fbac4c5cf..9a40d49902 100644 --- a/docs/es/extension-workers.md +++ b/docs/es/extension-workers.md @@ -1,4 +1,4 @@ -# Extension Workers +# Extension workers Los Extension Workers permiten que tu [extensión FrankenPHP](https://frankenphp.dev/docs/extensions/) gestione un pool dedicado de hilos PHP para ejecutar tareas en segundo plano, manejar eventos asíncronos o implementar protocolos personalizados. Útil para sistemas de colas, listeners de eventos, programadores, etc. diff --git a/docs/extension-workers.md b/docs/extension-workers.md index 370be23a41..44ed025213 100644 --- a/docs/extension-workers.md +++ b/docs/extension-workers.md @@ -143,7 +143,7 @@ while (frankenphp_handle_request($handler)) { FrankenPHP provides hooks to execute Go code at specific points in the lifecycle. -| Hook Type | Option Name | Signature | Context & Use Case | +| Hook type | Option name | Signature | Context & use case | | :--------- | :--------------------------- | :------------------- | :--------------------------------------------------------------------- | | **Server** | `WithWorkerOnServerStartup` | `func()` | Global setup. Run **Once**. Example: Connect to NATS/Redis. | | **Server** | `WithWorkerOnServerShutdown` | `func()` | Global cleanup. Run **Once**. Example: Close shared connections. | diff --git a/docs/extensions.md b/docs/extensions.md index 74244a2a18..b08f730520 100644 --- a/docs/extensions.md +++ b/docs/extensions.md @@ -151,7 +151,7 @@ Once you've integrated your extension into FrankenPHP as demonstrated in the pre While some variable types have the same memory representation between C/PHP and Go, some types require more logic to be directly used. This is probably the hardest part when it comes to writing extensions because it requires understanding the internals of the Zend Engine and how variables are stored internally in PHP. This table summarizes what you need to know: -| PHP type | Go type | Direct conversion | C to Go helper | Go to C helper | Class Methods Support | +| PHP type | Go type | Direct conversion | C to Go helper | Go to C helper | Class methods support | | ------------------ | ----------------------------- | ----------------- | --------------------------------- | ---------------------------------- | --------------------- | | `int` | `int64` | ✅ | - | - | ✅ | | `?int` | `*int64` | ✅ | - | - | ✅ | @@ -175,7 +175,7 @@ This table summarizes what you need to know: If you refer to the code snippet of the previous section, you can see that helpers are used to convert the first parameter and the return value. The second and third parameters of our `repeat_this()` function don't need to be converted, as the memory representation of the underlying types is the same for both C and Go. -#### Working with Arrays +#### Working with arrays FrankenPHP provides native support for PHP arrays through `frankenphp.AssociativeArray` or direct conversion to a map or slice. @@ -269,7 +269,7 @@ func process_data_packed(arr *C.zend_array) unsafe.Pointer { - **Nested Arrays** - Arrays can be nested and will convert all supported types automatically (`int64`, `float64`, `string`, `bool`, `nil`, `AssociativeArray`, `map[string]any`, `[]any`) - **Objects are not supported** - Currently, only scalar types and arrays can be used as values. Providing an object will result in a `null` value in the PHP array. -##### Available methods: Packed and Associative +##### Available methods: packed and associative - `frankenphp.PHPAssociativeArray(arr frankenphp.AssociativeArray) unsafe.Pointer` - Convert to an ordered PHP array with key-value pairs - `frankenphp.PHPMap(arr map[string]any) unsafe.Pointer` - Convert a map to an unordered PHP array with key-value pairs @@ -599,7 +599,7 @@ func (sp *StringProcessorStruct) Process(input *C.zend_string, mode int64) unsaf The generator supports organizing your PHP extension's functions, classes, and constants under a namespace using the `//export_php:namespace` directive. This helps avoid naming conflicts and provides better organization for your extension's API. -#### Declaring a Namespace +#### Declaring a namespace Use the `//export_php:namespace` directive at the top of your Go file to place all exported symbols under a specific namespace: @@ -696,7 +696,7 @@ The `frankenphp.RegisterExtension()` function simplifies the extension registrat In this example, our new function will trigger a goroutine that logs a message in Caddy's logs. -#### Define the PHP Function +#### Define the PHP function To allow PHP to call our function, we need to define a corresponding PHP function. For this, we will create a stub file, for example, `extension.stub.php`, which will contain the following code: diff --git a/docs/fr/config.md b/docs/fr/config.md index 467f87b527..15da16bba0 100644 --- a/docs/fr/config.md +++ b/docs/fr/config.md @@ -262,7 +262,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é, @@ -325,7 +325,7 @@ Alternativement, vous pouvez utiliser toutes les autres méthodes décrites dans Si vous souhaitez utiliser HTTPS avec l'adresse IP `127.0.0.1` au lieu du nom d'hôte `localhost`, veuillez lire la section [problèmes connus](known-issues.md#using-https127001-with-docker). -### Full Duplex (HTTP/1) +### 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.) @@ -364,7 +364,7 @@ docker run -v $PWD:/app/public \ dunglas/frankenphp ``` -## Autocomplétion Shell +## Autocomplétion shell FrankenPHP fournit un support d'autocomplétion intégré pour Bash, Zsh, Fish et PowerShell. Cela permet l'autocomplétion de toutes les commandes (y compris les commandes personnalisées comme `php-server`, `php-cli` et `extension-init`) ainsi que leurs options. diff --git a/docs/fr/extension-workers.md b/docs/fr/extension-workers.md index 660b25d6fd..9dcc0ea1b6 100644 --- a/docs/fr/extension-workers.md +++ b/docs/fr/extension-workers.md @@ -135,7 +135,7 @@ while (frankenphp_handle_request($handler)) { FrankenPHP fournit des hooks pour exécuter du code Go à des points spécifiques du cycle de vie. -| Type de Hook | Nom de l'Option | Signature | Contexte et Cas d'Utilisation | +| Type de hook | Nom de l'option | Signature | Contexte et cas d'utilisation | | :----------- | :--------------------------- | :------------------- | :------------------------------------------------------------------------------------ | | **Serveur** | `WithWorkerOnServerStartup` | `func()` | Configuration globale. Exécuté **Une fois**. Exemple : Connexion à NATS/Redis. | | **Serveur** | `WithWorkerOnServerShutdown` | `func()` | Nettoyage global. Exécuté **Une fois**. Exemple : Fermeture des connexions partagées. | diff --git a/docs/fr/hot-reload.md b/docs/fr/hot-reload.md index 5ace2e6e83..ae8ad1f00b 100644 --- a/docs/fr/hot-reload.md +++ b/docs/fr/hot-reload.md @@ -1,4 +1,4 @@ -# Hot Reload +# Hot reload FrankenPHP inclut une fonctionnalité de **hot reload** intégrée, conçue pour améliorer considérablement l'expérience développeur. diff --git a/docs/it/README.md b/docs/it/README.md index b06b51b61d..f14aa41bb9 100644 --- a/docs/it/README.md +++ b/docs/it/README.md @@ -1,4 +1,4 @@ -# FrankenPHP: App Server moderno per PHP +# FrankenPHP: app server moderno per PHP

FrankenPHP

diff --git a/docs/it/static.md b/docs/it/static.md index 5f590dfc44..88471688e3 100644 --- a/docs/it/static.md +++ b/docs/it/static.md @@ -18,7 +18,7 @@ FrankenPHP supporta anche [l'incorporamento dell'app PHP nel file binario static Forniamo immagini Docker per creare binari Linux statici: -### Build basata su Musl, completamente statica +### Build basata su musl, completamente statica Per un file binario completamente statico che viene eseguito su qualsiasi distribuzione Linux senza dipendenze, ma non supporta il caricamento dinamico delle estensioni: diff --git a/docs/ja/config.md b/docs/ja/config.md index 52b92fe26d..ce596b5984 100644 --- a/docs/ja/config.md +++ b/docs/ja/config.md @@ -363,7 +363,7 @@ docker run -v $PWD:/app/public \ dunglas/frankenphp ``` -## Shell Completion +## Shell completion FrankenPHPはBash、Zsh、Fish、およびPowerShell用のシェル補完機能を内蔵しています。これにより、すべてのコマンド(`php-server`、`php-cli`、`extension-init`などのカスタムコマンドを含む)とそのフラグのオートコンプリートが可能になります。 diff --git a/docs/ja/extensions.md b/docs/ja/extensions.md index 7356e5076e..1dd221ac4e 100644 --- a/docs/ja/extensions.md +++ b/docs/ja/extensions.md @@ -203,7 +203,7 @@ func process_data_packed(arr *C.zend_array) unsafe.Pointer { - **ネストされた配列** - 配列はネストでき、サポートされているすべての型(`int64`、`float64`、`string`、`bool`、`nil`、`AssociativeArray`、`map[string]any`、`[]any`)を自動的に変換します - **オブジェクトはサポートされていません** - 現在、スカラー型と配列のみが値として使用できます。オブジェクトを提供すると、PHP配列では`null`値になります。 -##### 利用可能なメソッド:PackedとAssociative +##### 利用可能なメソッド:packedとassociative - `frankenphp.PHPAssociativeArray(arr frankenphp.AssociativeArray) unsafe.Pointer` - キーと値のペアを持つ順序付けられたPHP配列に変換 - `frankenphp.PHPMap(arr map[string]any) unsafe.Pointer` - マップを順序なしのキーと値のペアを持つPHP配列に変換 @@ -806,7 +806,7 @@ static const zend_function_entry ext_functions[] = { この出力から、`go_upper`関数が`string`型の引数を1つ受け取り、`string`型の戻り値を返すことが定義されているのがわかります。 -#### GoとPHP/C間の型変換(Type Juggling) +#### GoとPHP/C間の型変換(type juggling) Go関数はPHPの文字列を引数として直接受け取ることはできません。そのためPHPの文字列をGoの文字列へ変換する必要があります。幸いなことに、FrankenPHPは、ジェネレーターアプローチで見たものと同様に、PHP文字列とGo文字列間の変換を処理するヘルパー関数を提供しています。 diff --git a/docs/ja/performance.md b/docs/ja/performance.md index df8f56bdab..cdd1782d9f 100644 --- a/docs/ja/performance.md +++ b/docs/ja/performance.md @@ -47,7 +47,7 @@ PHPは、従来のGNUライブラリの代わりにこの代替Cライブラリ より軽量で安全なコンテナのためには、Alpineよりも[強化されたDebianイメージ](docker.md#hardening-images)を検討することをお勧めします。 -## Go Runtime設定 +## Go runtime設定 FrankenPHPはGoで書かれています。 diff --git a/docs/migrate.md b/docs/migrate.md index 29a44f5688..668da2be54 100644 --- a/docs/migrate.md +++ b/docs/migrate.md @@ -146,7 +146,7 @@ volumes: caddy_config: ``` -If you need additional PHP extensions, see [Building Custom Docker Image](docker.md#how-to-install-more-php-extensions). +If you need additional PHP extensions, see [Building custom Docker image](docker.md#how-to-install-more-php-extensions). For framework-specific Docker setups, see [Symfony Docker](https://github.com/dunglas/symfony-docker) and [running Laravel with the FrankenPHP Docker image](laravel.md#running-laravel-with-the-frankenphp-docker-image). diff --git a/docs/production.md b/docs/production.md index 06ef60c513..1f9a16af26 100644 --- a/docs/production.md +++ b/docs/production.md @@ -35,7 +35,7 @@ COPY . /app/public #COPY . /app ``` -Refer to "[Building Custom Docker Image](docker.md)" for more details and options, +Refer to "[Building custom Docker image](docker.md)" for more details and options, and to learn how to customize the configuration, install PHP extensions and Caddy modules. If your project uses Composer, diff --git a/docs/pt-br/config.md b/docs/pt-br/config.md index 6d0fe633e8..42569eac07 100644 --- a/docs/pt-br/config.md +++ b/docs/pt-br/config.md @@ -266,7 +266,7 @@ e, caso contrário, encaminhará a requisição para o worker que corresponde ao } ``` -## Reiniciando Threads Após Um Número de Requisições (Experimental) +## Reiniciando threads após um número de requisições (experimental) FrankenPHP pode reiniciar automaticamente as threads PHP depois que elas tiverem manipulado um determinado número de requisições. Quando uma thread atinge o limite, ela é totalmente reiniciada, @@ -330,7 +330,7 @@ Alternativamente, você pode usar todos os outros métodos descritos na [documen Se você quiser usar HTTPS com o endereço IP `127.0.0.1` em vez do nome de host `localhost`, por favor, leia a seção de [problemas conhecidos](known-issues.md#using-https127001-with-docker). -### Full Duplex (HTTP/1) +### 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.) @@ -369,7 +369,7 @@ docker run -v $PWD:/app/public \ dunglas/frankenphp ``` -## Autocompletar do Shell +## Autocompletar do shell FrankenPHP oferece suporte integrado de autocompletar do shell para Bash, Zsh, Fish e PowerShell. Isso permite o preenchimento automático para todos os comandos (incluindo comandos personalizados como `php-server`, `php-cli` e `extension-init`) e suas flags. diff --git a/docs/pt-br/docker.md b/docs/pt-br/docker.md index 6c5b9bd1b4..1d23ce9ce3 100644 --- a/docs/pt-br/docker.md +++ b/docs/pt-br/docker.md @@ -1,4 +1,4 @@ -# Construindo Imagens Docker Personalizadas +# Construindo imagens Docker personalizadas [As imagens Docker do FrankenPHP](https://hub.docker.com/r/dunglas/frankenphp) são baseadas em [imagens oficiais do PHP](https://hub.docker.com/_/php/). Variantes do Debian e do Alpine Linux são fornecidas para arquiteturas populares. @@ -206,7 +206,7 @@ As imagens Docker são construídas: - quando uma nova release é marcada (tagueada) - diariamente às 4h UTC, se novas versões das imagens oficiais do PHP estiverem disponíveis -## Endurecendo Imagens +## Endurecendo imagens Para reduzir ainda mais a superfície de ataque e o tamanho das suas imagens Docker do FrankenPHP, também é possível construí-las sobre uma [imagem Google distroless](https://github.com/GoogleContainerTools/distroless) ou @@ -280,7 +280,7 @@ WORKDIR /app ENTRYPOINT ["/usr/local/bin/frankenphp", "run", "-c", "/etc/caddy/Caddyfile"] ``` -## Versões de Desenvolvimento +## Versões de desenvolvimento As versões de desenvolvimento estão disponíveis no repositório Docker [`dunglas/frankenphp-dev`](https://hub.docker.com/repository/docker/dunglas/frankenphp-dev). Uma nova construção é acionada sempre que um commit é enviado para o branch principal do repositório do GitHub. diff --git a/docs/pt-br/extension-workers.md b/docs/pt-br/extension-workers.md index e2577311ac..3cd644c095 100644 --- a/docs/pt-br/extension-workers.md +++ b/docs/pt-br/extension-workers.md @@ -1,10 +1,10 @@ -# Workers de Extensão +# Workers de extensão Os Workers de Extensão permitem que sua [extensão FrankenPHP](https://frankenphp.dev/docs/extensions/) gerencie um pool dedicado de threads PHP para executar tarefas em segundo plano, lidar com eventos assíncronos ou implementar protocolos personalizados. Útil para sistemas de fila, listeners de eventos, agendadores, etc. -## Registrando o Worker +## Registrando o worker -### Registro Estático +### Registro estático Se você não precisa que o worker seja configurável pelo usuário (caminho de script fixo, número de threads fixo), você pode simplesmente registrar o worker na função `init()`. @@ -33,23 +33,23 @@ func init() { } ``` -### Em um Módulo Caddy (Configurável pelo usuário) +### Em um módulo Caddy (configurável pelo usuário) Se você planeja compartilhar sua extensão (como uma fila genérica ou um listener de eventos), você deve encapsulá-la em um módulo Caddy. Isso permite que os usuários configurem o caminho do script e a contagem de threads através do seu `Caddyfile`. Isso exige a implementação da interface `caddy.Provisioner` e a análise do Caddyfile ([veja um exemplo](https://github.com/dunglas/frankenphp-queue/blob/989120d394d66dd6c8e2101cac73dd622fade334/caddy.go)). -### Em uma Aplicação Go Pura (Incorporação) +### Em uma aplicação Go pura (incorporação) Se você está [incorporando o FrankenPHP em uma aplicação Go padrão sem caddy](https://pkg.go.dev/github.com/dunglas/frankenphp#example-ServeHTTP), você pode registrar workers de extensão usando `frankenphp.WithExtensionWorkers` ao inicializar as opções. -## Interagindo com Workers +## Interagindo com workers Assim que o pool de workers estiver ativo, você pode despachar tarefas para ele. Isso pode ser feito dentro de [funções nativas exportadas para PHP](https://frankenphp.dev/docs/extensions/#writing-the-extension), ou de qualquer lógica Go, como um agendador cron, um listener de eventos (MQTT, Kafka), ou qualquer outra goroutine. -### Modo Headless: `SendMessage` +### Modo headless: `SendMessage` Use `SendMessage` para passar dados brutos diretamente para o seu script worker. Isso é ideal para filas ou comandos simples. -#### Exemplo: Uma Extensão de Fila Assíncrona +#### Exemplo: uma extensão de fila assíncrona ```go // #include @@ -109,7 +109,7 @@ func my_worker_http_request(path *C.zend_string) unsafe.Pointer { } ``` -## Script do Worker +## Script do worker O script PHP do worker é executado em um loop e pode lidar tanto com mensagens brutas quanto com requisições HTTP. @@ -131,11 +131,11 @@ while (frankenphp_handle_request($handler)) { } ``` -## Hooks de Ciclo de Vida +## Hooks de ciclo de vida FrankenPHP oferece hooks para executar código Go em pontos específicos do ciclo de vida. -| Tipo de Hook | Nome da Opção | Assinatura | Contexto e Caso de Uso | +| Tipo de hook | Nome da opção | Assinatura | Contexto e caso de uso | | :----------- | :--------------------------- | :------------------- | :------------------------------------------------------------------------------- | | **Servidor** | `WithWorkerOnServerStartup` | `func()` | Configuração global. Executado **Uma Vez**. Exemplo: Conectar ao NATS/Redis. | | **Servidor** | `WithWorkerOnServerShutdown` | `func()` | Limpeza global. Executado **Uma Vez**. Exemplo: Fechar conexões compartilhadas. | diff --git a/docs/pt-br/hot-reload.md b/docs/pt-br/hot-reload.md index f94c1ac4db..f21917ad84 100644 --- a/docs/pt-br/hot-reload.md +++ b/docs/pt-br/hot-reload.md @@ -1,4 +1,4 @@ -# Recarregamento Instantâneo +# Recarregamento instantâneo FrankenPHP inclui um recurso de **recarregamento instantâneo** embutido, projetado para melhorar drasticamente a experiência do desenvolvedor. @@ -76,7 +76,7 @@ php_server { } ``` -## Integração no Lado do Cliente +## Integração no lado do cliente Enquanto o servidor detecta as alterações, o navegador precisa se inscrever nesses eventos para atualizar a página. O FrankenPHP expõe a URL do Hub Mercure a ser usada para se inscrever em alterações de arquivo através da variável de ambiente `$_SERVER['FRANKENPHP_HOT_RELOAD']`. @@ -99,7 +99,7 @@ Está disponível como um pacote [npm](https://www.npmjs.com/package/frankenphp- Alternativamente, você pode implementar sua própria lógica do lado do cliente inscrevendo-se diretamente no hub Mercure usando a classe nativa `EventSource` do JavaScript. -### Preservando Nós DOM Existentes +### Preservando nós DOM existentes Em casos raros, como ao usar ferramentas de desenvolvimento [como a barra de depuração da web do Symfony](https://github.com/symfony/symfony/pull/62970), você pode querer preservar nós DOM específicos. Para fazer isso, adicione o atributo `data-frankenphp-hot-reload-preserve` ao elemento HTML relevante: @@ -108,7 +108,7 @@ Para fazer isso, adicione o atributo `data-frankenphp-hot-reload-preserve` ao el
``` -## Modo Worker +## Modo worker Se você estiver executando sua aplicação em [Modo Worker](https://frankenphp.dev/docs/worker/), seu script de aplicação permanece na memória. Isso significa que as alterações no seu código PHP não serão refletidas imediatamente, mesmo que o navegador recarregue. @@ -135,7 +135,7 @@ php_server { } ``` -## Como Funciona +## Como funciona 1. **Monitoramento**: O FrankenPHP monitora o sistema de arquivos em busca de modificações usando a biblioteca [`e-dant/watcher`](https://github.com/e-dant/watcher) por baixo dos panos (contribuímos com o binding Go). 2. **Reiniciar (Modo Worker)**: se `watch` estiver habilitado na configuração do worker, o worker PHP é reiniciado para carregar o novo código. diff --git a/docs/pt-br/performance.md b/docs/pt-br/performance.md index a272d38987..6c2338e768 100644 --- a/docs/pt-br/performance.md +++ b/docs/pt-br/performance.md @@ -5,7 +5,7 @@ facilidade de uso. No entanto, é possível melhorar substancialmente o desempenho usando uma configuração apropriada. -## Número de Threads e Workers +## Número de threads e workers Por padrão, o FrankenPHP inicia 2 vezes mais threads e workers (no modo worker) do que o número de núcleos de CPU disponíveis. @@ -221,7 +221,7 @@ Para mais detalhes, leia [a entrada dedicada na documentação do Symfony](https://symfony.com/doc/current/performance.html) (a maioria das dicas é útil mesmo se você não usa o Symfony). -## Dividindo o Pool de Threads +## Dividindo o pool de threads É comum que aplicações interajam com serviços externos lentos, como uma API que tende a ser instável sob alta carga ou que consistentemente leva mais de 10 segundos para responder. diff --git a/docs/pt-br/production.md b/docs/pt-br/production.md index 7029f1bf8d..6d9932bc55 100644 --- a/docs/pt-br/production.md +++ b/docs/pt-br/production.md @@ -162,7 +162,7 @@ Acesse `https://seu-nome-de-dominio.example.com` e divirta-se! > correta para cada implantação ou reconstrua seu projeto com a opção > `--no-cache` para evitar problemas de cache. -## Executando por Trás de um Proxy Reverso +## Executando por trás de um proxy reverso Se o FrankenPHP estiver sendo executado por trás de um proxy reverso ou um balanceador de carga (por exemplo, Nginx, AWS ELB, Google Cloud LB), você deve configurar a [opção global `trusted_proxies`](https://caddyserver.com/docs/caddyfile/options#trusted-proxies) no seu Caddyfile diff --git a/docs/pt-br/worker.md b/docs/pt-br/worker.md index 079667343f..3756da3803 100644 --- a/docs/pt-br/worker.md +++ b/docs/pt-br/worker.md @@ -1,9 +1,9 @@ -# Usando Workers do FrankenPHP +# Usando workers do FrankenPHP Inicialize sua aplicação uma vez e mantenha-a na memória. O FrankenPHP processará as requisições recebidas em poucos milissegundos. -## Iniciando Worker Scripts +## Iniciando worker scripts ### Docker @@ -129,14 +129,14 @@ docker run \ dunglas/frankenphp ``` -### Reiniciar o Worker Após um Certo Número de Requisições +### Reiniciar o worker após um certo número de requisições Como o PHP não foi originalmente projetado para processos de longa duração, ainda existem muitas bibliotecas e códigos legados que vazam memória. Uma solução alternativa para usar esse tipo de código no modo worker é reiniciar o worker script após processar um certo número de requisições: O trecho de código de worker anterior permite configurar um número máximo de requisições a serem processadas, definindo uma variável de ambiente chamada `MAX_REQUESTS`. -### Reiniciar os Workers Manualmente +### Reiniciar os workers manualmente Embora seja possível reiniciar os workers [em alterações de arquivo](config.md#watching-for-file-changes), também é possível reiniciar todos os workers graciosamente por meio da [API de administração do Caddy](https://caddyserver.com/docs/api). Se o administrador estiver habilitado no seu [Caddyfile](config.md#caddyfile-config), você pode acionar o endpoint de reinicialização com uma simples requisição POST como esta: @@ -144,7 +144,7 @@ Embora seja possível reiniciar os workers [em alterações de arquivo](config.m curl -X POST http://localhost:2019/frankenphp/workers/restart ``` -### Falhas de Worker +### Falhas de worker Se um worker script travar com um código de saída diferente de zero, o FrankenPHP o reiniciará com uma estratégia de backoff exponencial. Se o worker script permanecer ativo por mais tempo do que o último backoff × 2, ele não irá penalizar o worker script e reiniciá-lo novamente. @@ -161,7 +161,7 @@ frankenphp { } ``` -## Comportamento das Superglobais +## Comportamento das superglobais As [superglobais do PHP](https://www.php.net/manual/language.variables.superglobals.php) (`$_SERVER`, `$_ENV`, `$_GET`...) se comportam da seguinte maneira: diff --git a/docs/ru/README.md b/docs/ru/README.md index 4f2639098d..57932fd503 100644 --- a/docs/ru/README.md +++ b/docs/ru/README.md @@ -1,4 +1,4 @@ -# FrankenPHP: Современный сервер приложений для PHP +# FrankenPHP: современный сервер приложений для PHP

FrankenPHP

diff --git a/docs/ru/config.md b/docs/ru/config.md index f2feb60489..1abb372ca8 100644 --- a/docs/ru/config.md +++ b/docs/ru/config.md @@ -242,7 +242,7 @@ php_server [] { Механизм отслеживания файлов основан на [e-dant/watcher](https://github.com/e-dant/watcher). -## Сопоставление Worker с путем +## Сопоставление worker с путем В традиционных PHP-приложениях скрипты всегда размещаются в публичной директории. Это также верно для worker-скриптов, которые обрабатываются как любые другие PHP-скрипты. diff --git a/docs/ru/extension-workers.md b/docs/ru/extension-workers.md index 5ee8b5d148..4e4dc440cc 100644 --- a/docs/ru/extension-workers.md +++ b/docs/ru/extension-workers.md @@ -1,8 +1,8 @@ -# Расширение Workers +# Расширение workers Расширение Workers позволяет вашему [расширению FrankenPHP](https://frankenphp.dev/docs/extensions/) управлять выделенным пулом PHP-потоков для выполнения фоновых задач, обработки асинхронных событий или реализации пользовательских протоколов. Полезно для систем очередей, слушателей событий, планировщиков и т. д. -## Регистрация Worker-а +## Регистрация worker-а ### Статическая регистрация @@ -41,7 +41,7 @@ func init() { Если вы [встраиваете FrankenPHP в стандартное Go-приложение без Caddy](https://pkg.go.dev/github.com/dunglas/frankenphp#example-ServeHTTP), вы можете зарегистрировать Worker-ы расширения, используя `frankenphp.WithExtensionWorkers` при инициализации опций. -## Взаимодействие с Worker-ами +## Взаимодействие с worker-ами Как только пул Worker-ов активен, вы можете отправлять ему задачи. Это можно сделать внутри [нативных функций, экспортированных в PHP](https://frankenphp.dev/docs/extensions/#writing-the-extension), или из любой Go-логики, такой как планировщик cron, слушатель событий (MQTT, Kafka) или любая другая горутина. @@ -49,7 +49,7 @@ func init() { Используйте `SendMessage` для прямой передачи необработанных данных вашему скрипту Worker-а. Это идеально подходит для очередей или простых команд. -#### Пример: Расширение асинхронной очереди +#### Пример: расширение асинхронной очереди ```go // #include @@ -109,7 +109,7 @@ func my_worker_http_request(path *C.zend_string) unsafe.Pointer { } ``` -## Скрипт Worker-а +## Скрипт worker-а PHP-скрипт Worker-а выполняется в цикле и может обрабатывать как необработанные сообщения, так и HTTP-запросы. diff --git a/docs/ru/extensions.md b/docs/ru/extensions.md index 1ac13dd224..a8c39b1146 100644 --- a/docs/ru/extensions.md +++ b/docs/ru/extensions.md @@ -6,7 +6,7 @@ Благодаря модулям Caddy, вы можете писать PHP-расширения на Go и очень быстро интегрировать их в FrankenPHP. -## Два Подхода +## Два подхода FrankenPHP предоставляет два способа создания PHP-расширений на Go: @@ -15,7 +15,7 @@ FrankenPHP предоставляет два способа создания PHP Мы начнем с подхода с генератором, так как это самый простой способ начать, а затем покажем ручную реализацию для тех, кому нужен полный контроль. -## Использование Генератора Расширений +## Использование генератора расширений FrankenPHP поставляется с инструментом, который позволяет **создавать PHP-расширение**, используя только Go. **Нет необходимости писать C-код** или напрямую использовать CGO: FrankenPHP также включает **публичный API типов**, чтобы помочь вам писать расширения на Go, не беспокоясь о **жонглировании типами между PHP/C и Go**. @@ -24,11 +24,11 @@ FrankenPHP поставляется с инструментом, который Имейте в виду, что этот инструмент **не является полноценным генератором расширений**. Он предназначен для помощи в написании простых расширений на Go, но не предоставляет самых продвинутых функций PHP-расширений. Если вам нужно написать более **сложное и оптимизированное** расширение, возможно, вам придется написать некоторый C-код или напрямую использовать CGO. -### Предварительные Условия +### Предварительные условия Как также описано в разделе о ручной реализации ниже, вам необходимо [получить исходный код PHP](https://www.php.net/downloads.php) и создать новый модуль Go. -#### Создайте Новый Модуль и Получите Исходный Код PHP +#### Создайте новый модуль и получите исходный код PHP Первый шаг к написанию PHP-расширения на Go — это создание нового модуля Go. Вы можете использовать следующую команду для этого: @@ -42,7 +42,7 @@ go mod init example.com/example tar xf php-* ``` -### Написание Расширения +### Написание расширения Теперь все настроено для написания вашей нативной функции на Go. Создайте новый файл с именем `stringext.go`. Наша первая функция будет принимать строку в качестве аргумента, количество раз для ее повторения, булево значение для указания, нужно ли переворачивать строку, и возвращать результирующую строку. Это должно выглядеть так: @@ -82,7 +82,7 @@ func repeat_this(s *C.zend_string, count int64, reverse bool) unsafe.Pointer { В то время как первый пункт говорит сам за себя, второй может быть сложнее для понимания. Давайте подробнее рассмотрим жонглирование типами далее в этом руководстве. -### Генерация Расширения +### Генерация расширения Здесь происходит волшебство, и ваше расширение теперь может быть сгенерировано. Вы можете запустить генератор следующей командой: @@ -106,7 +106,7 @@ GEN_STUB_SCRIPT=php-src/build/gen_stub.php frankenphp extension-init my_extensio > [!IMPORTANT] > **Ваш исходный файл (`my_extension.go`) никогда не изменяется.** Генератор создает отдельный файл `_generated.go`, содержащий обертки CGO, которые вызывают ваши исходные функции. Это означает, что вы можете безопасно управлять версиями вашего исходного файла, не беспокоясь о том, что сгенерированный код загрязняет его. -### Интеграция Сгенерированного Расширения в FrankenPHP +### Интеграция сгенерированного расширения в FrankenPHP Наше расширение теперь готово к компиляции и интеграции в FrankenPHP. Для этого обратитесь к [документации по компиляции](compile.md) FrankenPHP, чтобы узнать, как компилировать FrankenPHP. Добавьте модуль с помощью флага `--with`, указывая путь к вашему модулю: @@ -122,7 +122,7 @@ xcaddy build \ Обратите внимание, что вы указываете на поддиректорию `/build`, которая была создана на этапе генерации. Однако это не является обязательным: вы также можете скопировать сгенерированные файлы в директорию вашего модуля и указать на нее напрямую. -### Тестирование Сгенерированного Расширения +### Тестирование сгенерированного расширения Вы можете создать PHP-файл для тестирования созданных вами функций и классов. Например, создайте файл `index.php` со следующим содержимым: @@ -140,7 +140,7 @@ echo $processor->process('Hello World', StringProcessor::MODE_UPPERCASE); // "H После того как вы интегрировали ваше расширение в FrankenPHP, как показано в предыдущем разделе, вы можете запустить этот тестовый файл, используя `./frankenphp php-server`, и вы должны увидеть, как ваше расширение работает. -### Жонглирование Типами +### Жонглирование типами В то время как некоторые типы переменных имеют одно и то же представление в памяти между C/PHP и Go, некоторые типы требуют большей логики для прямого использования. Это, возможно, самая сложная часть при написании расширений, потому что она требует понимания внутренних механизмов Zend Engine и того, как переменные хранятся внутри PHP. Эта таблица суммирует то, что вам нужно знать: @@ -169,7 +169,7 @@ echo $processor->process('Hello World', StringProcessor::MODE_UPPERCASE); // "H Если вы обратитесь к фрагменту кода из предыдущего раздела, вы увидите, что для преобразования первого параметра и возвращаемого значения используются вспомогательные функции. Второй и третий параметры нашей функции `repeat_this()` не требуют преобразования, так как представление в памяти базовых типов одинаково как для C, так и для Go. -#### Работа с Массивами +#### Работа с массивами FrankenPHP предоставляет нативную поддержку PHP-массивов через `frankenphp.AssociativeArray` или прямое преобразование в карту или срез. @@ -262,7 +262,7 @@ func process_data_packed(arr *C.zend_array) unsafe.Pointer { - **Вложенные массивы** — Массивы могут быть вложенными и будут автоматически преобразовывать все поддерживаемые типы (`int64`, `float64`, `string`, `bool`, `nil`, `AssociativeArray`, `map[string]any`, `[]any`) - **Объекты не поддерживаются** — В настоящее время в качестве значений могут использоваться только скалярные типы и массивы. Предоставление объекта приведет к значению `null` в PHP-массиве. -##### Доступные методы: Packed и Associative +##### Доступные методы: packed и associative - `frankenphp.PHPAssociativeArray(arr frankenphp.AssociativeArray) unsafe.Pointer` — Преобразует в упорядоченный PHP-массив с парами ключ-значение - `frankenphp.PHPMap(arr map[string]any) unsafe.Pointer` — Преобразует карту в неупорядоченный PHP-массив с парами ключ-значение @@ -272,7 +272,7 @@ func process_data_packed(arr *C.zend_array) unsafe.Pointer { - `frankenphp.GoPackedArray(arr unsafe.Pointer) []any` — Преобразует PHP-массив в Go-срез - `frankenphp.IsPacked(zval *C.zend_array) bool` — Проверяет, является ли PHP-массив упакованным (только индексированным) или ассоциативным (пары ключ-значение) -### Работа с Вызываемыми Объектами +### Работа с вызываемыми объектами FrankenPHP предоставляет способ работы с PHP-вызываемыми объектами с помощью вспомогательной функции `frankenphp.CallPHPCallable`. Это позволяет вызывать PHP-функции или методы из Go-кода. @@ -308,7 +308,7 @@ $result = my_array_map(['hello', 'world'], 'strtoupper'); // $result будет ['HELLO', 'WORLD'] ``` -### Объявление Нативного PHP-класса +### Объявление нативного PHP-класса Генератор поддерживает объявление **непрозрачных классов** как Go-структур, которые могут использоваться для создания PHP-объектов. Вы можете использовать директиву `//export_php:class` для определения PHP-класса. Например: @@ -322,7 +322,7 @@ type UserStruct struct { } ``` -#### Что такое Непрозрачные Классы? +#### Что такое непрозрачные классы? **Непрозрачные классы** — это классы, внутренняя структура которых (свойства) скрыта от PHP-кода. Это означает: @@ -334,7 +334,7 @@ type UserStruct struct { Этот подход обеспечивает лучшую инкапсуляцию и предотвращает случайное повреждение PHP-кодом внутреннего состояния ваших Go-объектов. Все взаимодействия с объектом должны происходить через явно определенные вами методы. -#### Добавление Методов к Классам +#### Добавление методов к классам Поскольку свойства недоступны напрямую, вы **должны определить методы** для взаимодействия с вашими непрозрачными классами. Используйте директиву `//export_php:method` для определения поведения: @@ -376,7 +376,7 @@ func (us *UserStruct) SetNamePrefix(prefix *C.zend_string) { } ``` -#### Нулевые Параметры +#### Нулевые параметры Генератор поддерживает нулевые параметры с использованием префикса `?` в PHP-сигнатурах. Когда параметр является нулевым, он становится указателем в вашей Go-функции, что позволяет вам проверять, было ли значение `null` в PHP: @@ -446,11 +446,11 @@ $user->updateInfo(null, 25, null); // Имя и активность nu Такой дизайн гарантирует, что ваш Go-код полностью контролирует то, как состояние объекта доступно и изменяется, обеспечивая лучшую инкапсуляцию и типовую безопасность. -### Объявление Констант +### Объявление констант Генератор поддерживает экспорт Go-констант в PHP с использованием двух директив: `//export_php:const` для глобальных констант и `//export_php:classconst` для констант класса. Это позволяет обмениваться значениями конфигурации, кодами статуса и другими константами между Go- и PHP-кодом. -#### Глобальные Константы +#### Глобальные константы Используйте директиву `//export_php:const` для создания глобальных PHP-констант: @@ -473,7 +473,7 @@ const ( > [!NOTE] > PHP-константы будут принимать имя Go-константы, поэтому рекомендуется использовать заглавные буквы. -#### Константы Класса +#### Константы класса Используйте директиву `//export_php:classconst ClassName` для создания констант, принадлежащих конкретному PHP-классу: @@ -579,11 +579,11 @@ func (sp *StringProcessorStruct) Process(input *C.zend_string, mode int64) unsaf } ``` -### Использование Пространств Имен +### Использование пространств имен Генератор поддерживает организацию функций, классов и констант вашего PHP-расширения в пространстве имен с использованием директивы `//export_php:namespace`. Это помогает избежать конфликтов имен и обеспечивает лучшую организацию API вашего расширения. -#### Объявление Пространства Имен +#### Объявление пространства имен Используйте директиву `//export_php:namespace` в начале вашего Go-файла, чтобы разместить все экспортируемые символы в определенном пространстве имен: @@ -616,7 +616,7 @@ func (u *UserStruct) GetName() unsafe.Pointer { const STATUS_ACTIVE = 1 ``` -#### Использование Расширения с Пространством Имен в PHP +#### Использование расширения с пространством имен в PHP Когда пространство имен объявлено, все функции, классы и константы размещаются под этим пространством имен в PHP: @@ -631,18 +631,18 @@ echo $user->getName(); // "John Doe" echo My\Extension\STATUS_ACTIVE; // 1 ``` -#### Важные Заметки +#### Важные заметки - Разрешена только **одна** директива пространства имен на файл. Если найдено несколько директив пространства имен, генератор вернет ошибку. - Пространство имен применяется ко **всем** экспортируемым символам в файле: функциям, классам, методам и константам. - Имена пространств имен соответствуют соглашениям PHP, используя обратные слеши (`\`) в качестве разделителей. - Если пространство имен не объявлено, символы экспортируются в глобальное пространство имен как обычно. -## Ручная Реализация +## Ручная реализация Если вы хотите понять, как работают расширения, или вам нужен полный контроль над вашим расширением, вы можете написать их вручную. Этот подход дает вам полный контроль, но требует больше шаблонного кода. -### Базовая Функция +### Базовая функция Мы рассмотрим, как написать простое PHP-расширение на Go, которое определяет новую нативную функцию. Эта функция будет вызвана из PHP и запустит горутину, которая запишет сообщение в логи Caddy. Эта функция не принимает никаких параметров и ничего не возвращает. @@ -700,7 +700,7 @@ php ../php-src/build/gen_stub.php extension.stub.php Этот скрипт сгенерирует файл с именем `extension_arginfo.h`, который будет содержать необходимую информацию для PHP, чтобы знать, как определить и вызвать нашу функцию. -#### Написание Моста Между Go и C +#### Написание моста между Go и C Теперь нам нужно написать мост между Go и C. Создайте файл с именем `extension.h` в директории вашего модуля со следующим содержимым: @@ -762,11 +762,11 @@ zend_module_entry ext_module_entry = { Регистрация расширения автоматически обрабатывается функцией `RegisterExtension()` FrankenPHP, которую мы вызываем в нашем Go-коде. -### Продвинутое Использование +### Продвинутое использование Теперь, когда мы знаем, как создать базовое PHP-расширение на Go, давайте усложним наш пример. Теперь мы создадим PHP-функцию, которая принимает строку в качестве параметра и возвращает ее версию в верхнем регистре. -#### Определение Заглушки PHP-функции +#### Определение заглушки PHP-функции Чтобы определить новую PHP-функцию, мы изменим наш файл `extension.stub.php`, чтобы включить новую сигнатуру функции: @@ -804,7 +804,7 @@ static const zend_function_entry ext_functions[] = { Мы видим, что функция `go_upper` определена с параметром типа `string` и возвращаемым типом `string`. -#### Жонглирование Типами Между Go и PHP/C +#### Жонглирование типами между Go и PHP/C Ваша Go-функция не может напрямую принимать PHP-строку в качестве параметра. Вам нужно преобразовать ее в Go-строку. К счастью, FrankenPHP предоставляет вспомогательные функции для обработки преобразования между PHP-строками и Go-строками, аналогично тому, что мы видели в подходе с генератором. @@ -875,7 +875,7 @@ func go_upper(s *C.zend_string) *C.zend_string { > > В этом примере мы не выполняем никакой обработки ошибок, но вы всегда должны проверять, что указатели не `nil` и что данные действительны, прежде чем использовать их в ваших Go-функциях. -### Интеграция Расширения в FrankenPHP +### Интеграция расширения в FrankenPHP Наше расширение теперь готово к компиляции и интеграции в FrankenPHP. Для этого обратитесь к [документации по компиляции](compile.md) FrankenPHP, чтобы узнать, как компилировать FrankenPHP. Добавьте модуль с помощью флага `--with`, указывая путь к вашему модулю: @@ -891,7 +891,7 @@ xcaddy build \ Вот и все! Ваше расширение теперь интегрировано в FrankenPHP и может использоваться в вашем PHP-коде. -### Тестирование Вашего Расширения +### Тестирование вашего расширения После интеграции вашего расширения в FrankenPHP вы можете создать файл `index.php` с примерами функций, которые вы реализовали: diff --git a/docs/ru/hot-reload.md b/docs/ru/hot-reload.md index a7af1f2ba5..e24d794a20 100644 --- a/docs/ru/hot-reload.md +++ b/docs/ru/hot-reload.md @@ -110,7 +110,7 @@ FrankenPHP предоставляет URL-адрес Mercure Hub для подп
``` -## Режим Worker +## Режим worker Если вы запускаете свое приложение в [режиме Worker](https://frankenphp.dev/docs/worker/), скрипт вашего приложения остается в памяти. Это означает, что изменения в вашем PHP-коде не будут отражены немедленно, даже если браузер перезагрузится. diff --git a/docs/tr/CONTRIBUTING.md b/docs/tr/CONTRIBUTING.md index ec60d2b340..ce419a2fda 100644 --- a/docs/tr/CONTRIBUTING.md +++ b/docs/tr/CONTRIBUTING.md @@ -1,6 +1,6 @@ -# Katkıda Bulunmak +# Katkıda bulunmak -## PHP Derleme +## PHP derleme ### Docker ile (Linux) @@ -82,7 +82,7 @@ Sunucu `127.0.0.1:8080` adresini dinliyor: curl -v http://127.0.0.1:8080/phpinfo.php ``` -## Docker İmajlarını Yerel Olarak Oluşturma +## Docker imajlarını yerel olarak oluşturma Bake (pişirme) planını yazdırın: @@ -108,7 +108,7 @@ FrankenPHP imajlarını arm64 ve amd64 için sıfırdan oluşturun ve Docker Hub docker buildx bake -f docker-bake.hcl --pull --no-cache --push ``` -## Statik Derlemelerle Segmentasyon Hatalarında Hata Ayıklama +## Statik derlemelerle segmentasyon hatalarında hata ayıklama 1. FrankenPHP binary dosyasının hata ayıklama sürümünü GitHub'dan indirin veya hata ayıklama seçeneklerini kullanarak özel statik derlemenizi oluşturun: @@ -134,7 +134,7 @@ docker buildx bake -f docker-bake.hcl --pull --no-cache --push 7. GDB kabuğuna `bt` yazın 8. Çıktıyı kopyalayın -## GitHub Eylemlerinde Segmentasyon Hatalarında Hata Ayıklama +## GitHub eylemlerinde segmentasyon hatalarında hata ayıklama 1. `.github/workflows/tests.yml` dosyasını açın 2. PHP hata ayıklama seçeneklerini etkinleştirin @@ -181,7 +181,7 @@ docker buildx bake -f docker-bake.hcl --pull --no-cache --push 9. Hata düzeltildiğinde, tüm bu değişiklikleri geri alın -## Misc Dev Resources +## Misc dev resources - [uWSGI içine PHP gömme](https://github.com/unbit/uwsgi/blob/master/plugins/php/php_plugin.c) - [NGINX Unit'te PHP gömme](https://github.com/nginx/unit/blob/master/src/nxt_php_sapi.c) @@ -193,12 +193,12 @@ docker buildx bake -f docker-bake.hcl --pull --no-cache --push - [Mac'te PHP gömme](https://gist.github.com/jonnywang/61427ffc0e8dde74fff40f479d147db4) - [SDL bağları](https://pkg.go.dev/github.com/veandco/go-sdl2@v0.4.21/sdl#Main) -## Docker ile İlgili Kaynaklar +## Docker ile ilgili kaynaklar - [Pişirme (bake) dosya tanımı](https://docs.docker.com/build/customize/bake/file-definition/) - [`docker buildx build`](https://docs.docker.com/engine/reference/commandline/buildx_build/) -## Faydalı Komut +## Faydalı komut ```console apk add strace util-linux gdb diff --git a/docs/tr/README.md b/docs/tr/README.md index c60a748469..ad8d345d3f 100644 --- a/docs/tr/README.md +++ b/docs/tr/README.md @@ -1,4 +1,4 @@ -# FrankenPHP: PHP için Modern Uygulama Sunucusu +# FrankenPHP: PHP için modern uygulama sunucusu

FrankenPHP

@@ -18,7 +18,7 @@ FrankenPHP, PHP'yi `net/http` kullanarak herhangi bir uygulamaya yerleştirmek i Windows üzerinde FrankenPHP çalıştırmak için [WSL](https://learn.microsoft.com/windows/wsl/) kullanın. -### Kurulum Betiği +### Kurulum betiği Platformunuza uygun sürümü otomatik olarak kurmak için bu satırı terminalinize kopyalayabilirsiniz: @@ -26,7 +26,7 @@ Platformunuza uygun sürümü otomatik olarak kurmak için bu satırı terminali curl https://frankenphp.dev/install.sh | sh ``` -### Binary Çıktısı +### Binary çıktısı Docker kullanmayı tercih etmiyorsanız, Linux ve macOS için geliştirme amaçlı bağımsız (statik) FrankenPHP binary dosyaları sağlıyoruz; [PHP 8.4](https://www.php.net/releases/8.4/en.php) ve en popüler PHP eklentilerinin çoğu dahildir. @@ -35,7 +35,7 @@ Docker kullanmayı tercih etmiyorsanız, Linux ve macOS için geliştirme amaçl **Eklenti kurulumu:** Yaygın eklentiler paketle birlikte gelir. Daha fazla eklenti yüklemek mümkün değildir. -### rpm Paketleri +### rpm paketleri Bakımcılarımız `dnf` kullanan tüm sistemler için rpm paketleri sunuyor. Kurulum için: @@ -54,7 +54,7 @@ sudo dnf install pie-zts sudo pie-zts install asgrim/example-pie-extension ``` -### deb Paketleri +### deb paketleri Bakımcılarımız `apt` kullanan tüm sistemler için deb paketleri sunuyor. Kurulum için: @@ -136,7 +136,7 @@ sudo systemctl start frankenphp - [Go kütüphane dokümantasonu](https://pkg.go.dev/github.com/dunglas/frankenphp) - [Katkıda bulunma ve hata ayıklama](CONTRIBUTING.md) -## Örnekler ve İskeletler +## Örnekler ve iskeletler - [Symfony](https://github.com/dunglas/symfony-docker) - [API Platform](https://api-platform.com/docs/distribution/) diff --git a/docs/tr/compile.md b/docs/tr/compile.md index ffe20e2b80..104f91076e 100644 --- a/docs/tr/compile.md +++ b/docs/tr/compile.md @@ -1,4 +1,4 @@ -# Kaynak Kodlardan Derleme +# Kaynak kodlardan derleme Bu doküman, PHP'yi dinamik bir kütüphane olarak yükleyecek bir FrankenPHP yapısının nasıl oluşturulacağını açıklamaktadır. Önerilen yöntem bu şekildedir. @@ -54,7 +54,7 @@ Ardından yapılandırma betiğini çalıştırın: --with-iconv=/opt/homebrew/opt/libiconv/ ``` -## PHP Derleyin +## PHP derleyin Son olarak, PHP'yi derleyin ve kurun: @@ -63,7 +63,7 @@ make -j"$(getconf _NPROCESSORS_ONLN)" sudo make install ``` -## Go Uygulamasını Derleyin +## Go uygulamasını derleyin Artık Go kütüphanesini kullanabilir ve Caddy yapımızı derleyebilirsiniz: diff --git a/docs/tr/config.md b/docs/tr/config.md index c15968e8bc..ca16f996d1 100644 --- a/docs/tr/config.md +++ b/docs/tr/config.md @@ -70,7 +70,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 konfigürasyonu 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. @@ -191,7 +191,7 @@ php_server [] { } ``` -### Dosya Değişikliklerini İzleme +### Dosya değişikliklerini izleme Workers yalnızca uygulamanızı bir kez başlatır ve bellekte tutar, bu nedenle PHP dosyalarınızdaki herhangi bir değişiklik hemen yansımaz. @@ -233,7 +233,7 @@ Eğer `watch` dizini belirtilmezse, FrankenPHP sürecinin başlatıldığı dizi Dosya izleyici [e-dant/watcher](https://github.com/e-dant/watcher) üzerine kuruludur. -## İşçiyi Yola Eşleştirme +## İşç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. @@ -252,7 +252,7 @@ Geleneksel PHP uygulamalarında, betikler her zaman public dizininde bulunur. Bu } ``` -## Ortam Değişkenleri +## 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: @@ -288,7 +288,7 @@ PHP yapılandırmasını `Caddyfile` içindeki `php_ini` yönergesini kullanarak } ``` -### HTTPS'i Devre Dışı Bırakma +### HTTPS'i devre dışı bırakma Varsayılan olarak, FrankenPHP tüm ana bilgisayar adları için (localhost dahil) HTTPS'i otomatik olarak etkinleştirir. HTTPS'i devre dışı bırakmak isterseniz (örneğin bir geliştirme ortamında), `SERVER_NAME` ortam değişkenini `http://` veya `:80` olarak ayarlayabilirsiniz: @@ -296,7 +296,7 @@ Alternatif olarak, [Caddy belgelerinde](https://caddyserver.com/docs/automatic-h Eğer `localhost` ana bilgisayar adı yerine `127.0.0.1` IP adresiyle HTTPS kullanmak isterseniz, lütfen [bilinen sorunlar](known-issues.md#using-https127001-with-docker) bölümünü okuyun. -### Tam Çift Yönlü (HTTP/1) +### 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.) @@ -323,7 +323,7 @@ CADDY_GLOBAL_OPTIONS="servers { Bu ayar hakkında daha fazla bilgiyi [Caddy belgelerinde](https://caddyserver.com/docs/caddyfile/options#enable-full-duplex) bulabilirsiniz. -## Hata Ayıklama Modunu Etkinleştirin +## 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,7 +334,7 @@ docker run -v $PWD:/app/public \ dunglas/frankenphp ``` -## Shell Completion +## Shell completion 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. diff --git a/docs/tr/docker.md b/docs/tr/docker.md index bebe4746fd..b4c8ac208d 100644 --- a/docs/tr/docker.md +++ b/docs/tr/docker.md @@ -1,4 +1,4 @@ -# Özel Docker İmajı Oluşturma +# Özel Docker imajı oluşturma [FrankenPHP Docker imajları](https://hub.docker.com/r/dunglas/frankenphp), [resmi PHP imajları](https://hub.docker.com/_/php/) temel alınarak hazırlanmıştır. Popüler mimariler için Debian ve Alpine Linux varyantları sağlanmıştır. Debian varyantları tavsiye edilir. @@ -11,7 +11,7 @@ Etiketler şu deseni takip eder: `dunglas/frankenphp:-php Eğer Alpine Linux ve Symfony kullanıyorsanız, > [varsayılan yığın boyutunu artırmanız](compile.md#xcaddy-kullanımı) gerekebilir. -## Varsayılan Olarak Worker Modunun Etkinleştirilmesi +## Varsayılan olarak worker modunun etkinleştirilmesi FrankenPHP'yi bir worker betiği ile başlatmak için `FRANKENPHP_CONFIG` ortam değişkenini ayarlayın: @@ -103,7 +103,7 @@ FROM dunglas/frankenphp ENV FRANKENPHP_CONFIG="worker ./public/index.php" ``` -## Geliştirme Sürecinde Volume Kullanma +## Geliştirme sürecinde volume kullanma FrankenPHP ile kolayca geliştirme yapmak için, uygulamanın kaynak kodunu içeren dizini ana bilgisayarınızdan Docker konteynerine bir volume olarak bağlayın: @@ -144,7 +144,7 @@ volumes: caddy_config: ``` -## Root Olmayan Kullanıcı Olarak Çalıştırma +## Root olmayan kullanıcı olarak çalıştırma FrankenPHP, Docker'da root olmayan kullanıcı olarak çalışabilir. @@ -166,7 +166,7 @@ RUN \ USER ${USER} ``` -### Yetenek Olmadan Çalıştırma +### Yetenek olmadan çalıştırma FrankenPHP, root yetkisi olmadan çalışırken bile, web sunucusunu ayrıcalıklı bağlantı noktalarında (80 ve 443) bağlamak için `CAP_NET_BIND_SERVICE` yeteneğine ihtiyaç duyar. @@ -198,7 +198,7 @@ Docker imajları oluşturulur: - Yeni bir sürüm etiketlendiğinde - Her gün UTC ile sabah 4'te, resmi PHP imajlarının yeni sürümleri mevcutsa -## İmajları Sertleştirme +## İmajları sertleştirme FrankenPHP Docker imajlarınızın saldırı yüzeyini ve boyutunu daha da azaltmak için, onları [Google distroless](https://github.com/GoogleContainerTools/distroless) veya [Docker hardened](https://www.docker.com/products/hardened-images) bir imaj üzerine inşa etmek de mümkündür. @@ -270,7 +270,7 @@ WORKDIR /app ENTRYPOINT ["/usr/local/bin/frankenphp", "run", "-c", "/etc/caddy/Caddyfile"] ``` -## Geliştirme Sürümleri +## Geliştirme sürümleri Geliştirme sürümleri [`dunglas/frankenphp-dev`](https://hub.docker.com/repository/docker/dunglas/frankenphp-dev) Docker deposunda mevcuttur. GitHub deposunun `main` dalına her commit gönderildiğinde yeni bir derleme tetiklenir. diff --git a/docs/tr/embed.md b/docs/tr/embed.md index dd5fbf14ec..4436a29544 100644 --- a/docs/tr/embed.md +++ b/docs/tr/embed.md @@ -1,4 +1,4 @@ -# Binary Dosyası Olarak PHP Uygulamaları +# Binary dosyası olarak PHP uygulamaları FrankenPHP, PHP uygulamalarının kaynak kodunu ve varlıklarını statik, kendi kendine yeten bir binary dosyaya yerleştirme yeteneğine sahiptir. @@ -6,7 +6,7 @@ Bu özellik sayesinde PHP uygulamaları, uygulamanın kendisini, PHP yorumlayıc Bu özellik hakkında daha fazla bilgi almak için [Kévin tarafından SymfonyCon 2023'te yapılan sunuma](https://dunglas.dev/2023/12/php-and-symfony-apps-as-standalone-binaries/) göz atabilirsiniz. -## Preparing Your App +## Preparing your app Bağımsız binary dosyayı oluşturmadan önce uygulamanızın gömülmeye hazır olduğundan emin olun. @@ -39,7 +39,7 @@ composer install --ignore-platform-reqs --no-dev -a composer dump-env prod ``` -## Linux Binary'si Oluşturma +## Linux binary'si oluşturma Bir Linux binary çıktısı almanın en kolay yolu, sağladığımız Docker tabanlı derleyiciyi kullanmaktır. @@ -78,7 +78,7 @@ Bir Linux binary çıktısı almanın en kolay yolu, sağladığımız Docker ta Elde edilen binary dosyası, geçerli dizindeki `my-app` adlı dosyadır. -## Diğer İşletim Sistemleri için Binary Çıktısı Alma +## Diğer işletim sistemleri için binary çıktısı alma Docker kullanmak istemiyorsanız veya bir macOS binary dosyası oluşturmak istiyorsanız, sağladığımız kabuk betiğini kullanın: @@ -91,7 +91,7 @@ EMBED=/path/to/your/app \ Elde edilen binary dosyası `dist/` dizinindeki `frankenphp--` adlı dosyadır. -## Binary Dosyasını Kullanma +## Binary dosyasını kullanma İşte bu kadar! `my-app` dosyası (veya diğer işletim sistemlerinde `dist/frankenphp--`) bağımsız uygulamanızı içerir! @@ -119,11 +119,11 @@ Ayrıca binary dosyanıza gömülü PHP CLI betiklerini de çalıştırabilirsin ./my-app php-cli bin/console ``` -## Yapıyı Özelleştirme +## Yapıyı özelleştirme Binary dosyasının nasıl özelleştirileceğini (uzantılar, PHP sürümü...) görmek için [Statik derleme dokümanını okuyun](static.md). -## Binary Dosyasının Dağıtılması +## Binary dosyasının dağıtılması Linux'ta, oluşturulan ikili dosya derleme sırasında `COMPRESS=1` ortam değişkeni ayarlanarak [UPX](https://upx.github.io) ile sıkıştırılabilir. diff --git a/docs/tr/extension-workers.md b/docs/tr/extension-workers.md index 1ccbf07052..e5b137de33 100644 --- a/docs/tr/extension-workers.md +++ b/docs/tr/extension-workers.md @@ -1,10 +1,10 @@ -# Uzantı İşçileri +# Uzantı işçileri Uzantı İşçileri, [FrankenPHP uzantınızın](https://frankenphp.dev/docs/extensions/) arka plan görevlerini yürütmek, eşzamansız olayları işlemek veya özel protokolleri uygulamak için özel bir PHP iş parçacığı havuzunu yönetmesini sağlar. Kuyruk sistemleri, olay dinleyicileri, zamanlayıcılar vb. için kullanışlıdır. -## İşçiyi Kaydetme +## İşçiyi kaydetme -### Statik Kayıt +### Statik kayıt İşçiyi kullanıcı tarafından yapılandırılabilir hale getirmeniz gerekmiyorsa (sabit komut dosyası yolu, sabit iş parçacığı sayısı), işçiyi `init()` fonksiyonunda basitçe kaydedebilirsiniz. @@ -33,23 +33,23 @@ func init() { } ``` -### Bir Caddy Modülünde (Kullanıcı tarafından yapılandırılabilir) +### Bir Caddy modülünde (kullanıcı tarafından yapılandırılabilir) Uzantınızı paylaşmayı planlıyorsanız (genel bir kuyruk veya olay dinleyici gibi), onu bir Caddy modülüne sarmalısınız. Bu, kullanıcıların `Caddyfile` aracılığıyla komut dosyası yolunu ve iş parçacığı sayısını yapılandırmasına olanak tanır. Bu, `caddy.Provisioner` arayüzünü uygulamayı ve Caddyfile'ı ayrıştırmayı gerektirir ([bir örnek görmek için](https://github.com/dunglas/frankenphp-queue/blob/989120d394d66dd6c8e2101cac73dd622fade334/caddy.go)). -### Saf Bir Go Uygulamasında (Gömme) +### Saf bir Go uygulamasında (gömme) FrankenPHP'yi [Caddy olmadan standart bir Go uygulamasına gömüyorsanız](https://pkg.go.dev/github.com/dunglas/frankenphp#example-ServeHTTP), seçenekleri başlatırken `frankenphp.WithExtensionWorkers` kullanarak uzantı işçilerini kaydedebilirsiniz. -## İşçilerle Etkileşim Kurma +## İşçilerle etkileşim kurma İşçi havuzu aktif hale geldiğinde, ona görevler gönderebilirsiniz. Bu, [PHP'ye dışa aktarılan yerel fonksiyonlar](https://frankenphp.dev/docs/extensions/#writing-the-extension) içinde veya bir cron zamanlayıcı, bir olay dinleyicisi (MQTT, Kafka) veya herhangi başka bir goroutine gibi herhangi bir Go mantığından yapılabilir. -### Başsız Mod : `SendMessage` +### Başsız mod : `SendMessage` Doğrudan işçi komut dosyanıza ham veri geçirmek için `SendMessage` kullanın. Bu, kuyruklar veya basit komutlar için idealdir. -#### Örnek: Asenkron Bir Kuyruk Uzantısı +#### Örnek: asenkron bir kuyruk uzantısı ```go // #include @@ -78,7 +78,7 @@ func my_queue_push(data *C.zval) bool { } ``` -### HTTP Emülasyonu :`SendRequest` +### HTTP emülasyonu :`SendRequest` Uzantınızın standart bir web ortamı bekleyen ( `$_SERVER`, `$_GET` vb. dolduran) bir PHP komut dosyasını çağırması gerekiyorsa `SendRequest` kullanın. @@ -109,7 +109,7 @@ func my_worker_http_request(path *C.zend_string) unsafe.Pointer { } ``` -## İşçi Komut Dosyası +## İşçi komut dosyası PHP işçi komut dosyası bir döngüde çalışır ve hem ham mesajları hem de HTTP isteklerini işleyebilir. @@ -131,11 +131,11 @@ while (frankenphp_handle_request($handler)) { } ``` -## Yaşam Döngüsü Kancaları +## Yaşam döngüsü kancaları FrankenPHP, yaşam döngüsünün belirli noktalarında Go kodunu yürütmek için kancalar sağlar. -| Kanca Türü | Seçenek Adı | İmza | Bağlam ve Kullanım Durumu | +| Kanca türü | Seçenek adı | İmza | Bağlam ve kullanım durumu | | :--------------- | :--------------------------- | :------------------- | :------------------------------------------------------------------------------------------------ | | **Sunucu** | `WithWorkerOnServerStartup` | `func()` | Genel kurulum. **Bir Kez** çalışır. Örnek: NATS/Redis'e bağlanma. | | **Sunucu** | `WithWorkerOnServerShutdown` | `func()` | Genel temizleme. **Bir Kez** çalışır. Örnek: Paylaşılan bağlantıları kapatma. | diff --git a/docs/tr/extensions.md b/docs/tr/extensions.md index 433dd52a08..1d65db0862 100644 --- a/docs/tr/extensions.md +++ b/docs/tr/extensions.md @@ -1,4 +1,4 @@ -# Go ile PHP Uzantıları Yazma +# Go ile PHP uzantıları yazma FrankenPHP ile **Go dilinde PHP uzantıları yazabilir**, bu da doğrudan PHP'den çağrılabilen **yüksek performanslı yerel işlevler** oluşturmanıza olanak tanır. Uygulamalarınız, mevcut veya yeni herhangi bir Go kütüphanesini ve **goroutine'lerin meşhur eşzamanlılık modelini doğrudan PHP kodunuzdan** kullanabilir. @@ -6,7 +6,7 @@ PHP uzantıları tipik olarak C dilinde yazılır, ancak biraz ek çalışma ile Caddy modülleri sayesinde, Go dilinde PHP uzantıları yazabilir ve bunları FrankenPHP'ye çok hızlı bir şekilde entegre edebilirsiniz. -## İki Yaklaşım +## İki yaklaşım FrankenPHP, Go dilinde PHP uzantıları oluşturmak için iki yol sunar: @@ -15,7 +15,7 @@ FrankenPHP, Go dilinde PHP uzantıları oluşturmak için iki yol sunar: Başlamak için en kolay yol olduğu için oluşturucu yaklaşımıyla başlayacak, ardından tam kontrole ihtiyaç duyanlar için manuel uygulamayı göstereceğiz. -## Uzantı Oluşturucuyu Kullanma +## Uzantı oluşturucuyu kullanma FrankenPHP, yalnızca Go kullanarak **bir PHP uzantısı oluşturmanıza** olanak tanıyan bir araçla birlikte gelir. **C kodu yazmaya** veya doğrudan CGO kullanmaya gerek yok: FrankenPHP ayrıca, **PHP/C ve Go arasındaki tür dengeleme** konusunda endişelenmenize gerek kalmadan uzantılarınızı Go'da yazmanıza yardımcı olacak **genel bir tür API'si** içerir. @@ -24,11 +24,11 @@ FrankenPHP, yalnızca Go kullanarak **bir PHP uzantısı oluşturmanıza** olana Bu aracın **tam teşekküllü bir uzantı oluşturucu olmadığını** unutmayın. Go'da basit uzantılar yazmanıza yardımcı olmak için tasarlanmıştır, ancak PHP uzantılarının en gelişmiş özelliklerini sağlamaz. Daha **karmaşık ve optimize edilmiş** bir uzantı yazmanız gerekiyorsa, doğrudan bazı C kodu yazmanız veya CGO kullanmanız gerekebilir. -### Ön Koşullar +### Ön koşullar Aşağıdaki manuel uygulama bölümünde de belirtildiği gibi, [PHP kaynaklarını edinmeniz](https://www.php.net/downloads.php) ve yeni bir Go modülü oluşturmanız gerekir. -#### Yeni Bir Modül Oluşturun ve PHP Kaynaklarını Edinin +#### Yeni bir modül oluşturun ve PHP kaynaklarını edinin Go'da bir PHP uzantısı yazmanın ilk adımı yeni bir Go modülü oluşturmaktır. Bunu aşağıdaki komutu kullanarak yapabilirsiniz: @@ -42,7 +42,7 @@ go mod init example.com/example tar xf php-* ``` -### Uzantıyı Yazma +### Uzantıyı yazma Yerel işlevinizi Go'da yazmak için her şey hazır. `stringext.go` adında yeni bir dosya oluşturun. İlk işlevimiz bir dizeyi argüman olarak, tekrar sayısını, dizeyi ters çevirip çevirmeyeceğini belirten bir boole değeri alacak ve sonuç dizeyi döndürecektir. Bu şöyle görünmelidir: @@ -82,7 +82,7 @@ Burada dikkat edilmesi gereken iki önemli nokta var: İlk nokta kendini açıklarken, ikincisi kavranması daha zor olabilir. Bu kılavuzda tür dengeleme konusuna daha derinlemesine bakalım. -### Uzantıyı Oluşturma +### Uzantıyı oluşturma İşte sihrin gerçekleştiği yer ve uzantınız artık oluşturulabilir. Oluşturucuyu aşağıdaki komutla çalıştırabilirsiniz: @@ -106,7 +106,7 @@ Her şey yolunda giderse, projenizin dizini uzantınız için aşağıdaki dosya > [!IMPORTANT] > **Kaynak dosyanız (`my_extension.go`) asla değiştirilmez.** Oluşturucu, orijinal işlevlerinizi çağıran CGO sarıcılarını içeren ayrı bir `_generated.go` dosyası oluşturur. Bu, kaynak dosyanızı oluşturulan kodun kirletmesi endişesi olmadan güvenle sürüm kontrolüne alabileceğiniz anlamına gelir. -### Oluşturulan Uzantıyı FrankenPHP'ye Entegre Etme +### Oluşturulan uzantıyı FrankenPHP'ye entegre etme Uzantımız artık derlenmeye ve FrankenPHP'ye entegre edilmeye hazır. Bunu yapmak için, FrankenPHP'yi nasıl derleyeceğinizi öğrenmek üzere FrankenPHP [derleme dokümantasyonuna](compile.md) bakın. Modülü `--with` bayrağını kullanarak ekleyin ve modülünüzün yolunu işaret edin: @@ -122,7 +122,7 @@ xcaddy build \ Oluşturma adımı sırasında oluşturulan `/build` alt dizinini işaret ettiğinize dikkat edin. Ancak bu zorunlu değildir: oluşturulan dosyaları modül dizininize de kopyalayabilir ve doğrudan ona işaret edebilirsiniz. -### Oluşturulan Uzantınızı Test Etme +### Oluşturulan uzantınızı test etme Oluşturduğunuz işlevleri ve sınıfları test etmek için bir PHP dosyası oluşturabilirsiniz. Örneğin, aşağıdaki içeriğe sahip bir `index.php` dosyası oluşturun: @@ -140,12 +140,12 @@ echo $processor->process('Hello World', StringProcessor::MODE_UPPERCASE); // "H Uzantınızı önceki bölümde gösterildiği gibi FrankenPHP'ye entegre ettikten sonra, bu test dosyasını `./frankenphp php-server` kullanarak çalıştırabilir ve uzantınızın çalıştığını görmelisiniz. -### Tür Dengeleme +### Tür dengeleme Bazı değişken türleri C/PHP ve Go arasında aynı bellek gösterimine sahipken, bazı türlerin doğrudan kullanılabilmesi için daha fazla mantık gerektirir. Uzantı yazarken belki de en zor kısım budur çünkü Zend Engine'in iç işleyişini ve değişkenlerin PHP'de dahili olarak nasıl saklandığını anlamayı gerektirir. Bu tablo, bilmeniz gerekenleri özetler: -| PHP türü | Go türü | Doğrudan dönüşüm | C'den Go'ya yardımcı | Go'dan C'ye yardımcı | Sınıf Metotları Desteği | +| PHP türü | Go türü | Doğrudan dönüşüm | C'den Go'ya yardımcı | Go'dan C'ye yardımcı | Sınıf metotları desteği | | :----------------- | :---------------------------- | :---------------- | :-------------------------------------- | :--------------------------------------- | :---------------------- | | `int` | `int64` | ✅ | - | - | ✅ | | `?int` | `*int64` | ✅ | - | - | ✅ | @@ -169,7 +169,7 @@ Bu tablo, bilmeniz gerekenleri özetler: Önceki bölümdeki kod parçacığına bakarsanız, ilk parametreyi ve dönüş değerini dönüştürmek için yardımcıların kullanıldığını görebilirsiniz. `repeat_this()` işlevimizin ikinci ve üçüncü parametrelerinin dönüştürülmesi gerekmez, çünkü temel türlerin bellek gösterimi hem C hem de Go için aynıdır. -#### Dizilerle Çalışma +#### Dizilerle çalışma FrankenPHP, `frankenphp.AssociativeArray` aracılığıyla veya doğrudan bir haritaya veya dilime dönüştürülerek PHP dizileri için yerel destek sağlar. @@ -262,7 +262,7 @@ func process_data_packed(arr *C.zend_array) unsafe.Pointer { - **İç içe diziler** - Diziler iç içe olabilir ve tüm desteklenen türleri otomatik olarak dönüştürecektir (`int64`, `float64`, `string`, `bool`, `nil`, `AssociativeArray`, `map[string]any`, `[]any`) - **Nesneler desteklenmiyor** - Şu anda yalnızca skaler türler ve diziler değer olarak kullanılabilir. Bir nesne sağlamak, PHP dizisinde `null` değeriyle sonuçlanacaktır. -##### Mevcut metotlar: Sıkıştırılmış ve İlişkisel +##### Mevcut metotlar: sıkıştırılmış ve ilişkisel - `frankenphp.PHPAssociativeArray(arr frankenphp.AssociativeArray) unsafe.Pointer` - Anahtar-değer çiftleri içeren sıralı bir PHP dizisine dönüştür - `frankenphp.PHPMap(arr map[string]any) unsafe.Pointer` - Bir haritayı anahtar-değer çiftleri içeren sırasız bir PHP dizisine dönüştür @@ -272,7 +272,7 @@ func process_data_packed(arr *C.zend_array) unsafe.Pointer { - `frankenphp.GoPackedArray(arr unsafe.Pointer) []any` - Bir PHP dizisini bir Go dilimine dönüştür - `frankenphp.IsPacked(zval *C.zend_array) bool` - Bir PHP dizisinin sıkıştırılmış (yalnızca indekslenmiş) mı yoksa ilişkisel (anahtar-değer çiftleri) mi olduğunu kontrol et -### Çağrılabilirlerle Çalışma +### Çağrılabilirlerle çalışma FrankenPHP, `frankenphp.CallPHPCallable` yardımcısını kullanarak PHP çağrılabilirleriyle çalışmanın bir yolunu sunar. Bu, Go kodundan PHP işlevlerini veya metotlarını çağırmanıza olanak tanır. @@ -308,7 +308,7 @@ $result = my_array_map(['hello', 'world'], 'strtoupper'); // $result ['HELLO', 'WORLD'] olacaktır ``` -### Yerel Bir PHP Sınıfı Bildirme +### Yerel bir PHP sınıfı bildirme Oluşturucu, Go struct'ları olarak **saydam sınıfları** bildirmeyi destekler, bunlar PHP nesneleri oluşturmak için kullanılabilir. Bir PHP sınıfı tanımlamak için `//export_php:class` yönerge yorumunu kullanabilirsiniz. Örneğin: @@ -322,7 +322,7 @@ type UserStruct struct { } ``` -#### Saydam Sınıflar Nelerdir? +#### Saydam sınıflar nelerdir? **Saydam sınıflar**, dahili yapının (özelliklerin) PHP kodundan gizlendiği sınıflardır. Bu şu anlama gelir: @@ -334,7 +334,7 @@ type UserStruct struct { Bu yaklaşım, daha iyi kapsülleme sağlar ve PHP kodunun Go nesnelerinizin dahili durumunu yanlışlıkla bozmasını önler. Nesneyle tüm etkileşimler, açıkça tanımladığınız metotlar aracılığıyla gerçekleşmelidir. -#### Sınıflara Metot Ekleme +#### Sınıflara metot ekleme Özellikler doğrudan erişilemediği için, saydam sınıflarınızla etkileşim kurmak için **metotlar tanımlamanız gerekir**. Davranışı tanımlamak için `//export_php:method` yönergesini kullanın: @@ -376,7 +376,7 @@ func (us *UserStruct) SetNamePrefix(prefix *C.zend_string) { } ``` -#### Null Olabilir Parametreler +#### Null olabilir parametreler Oluşturucu, PHP imzalarında `?` önekini kullanarak null olabilir parametreleri destekler. Bir parametre null olabilir olduğunda, Go işlevinizde bir işaretçiye dönüşür ve PHP'de değerin `null` olup olmadığını kontrol etmenizi sağlar: @@ -446,11 +446,11 @@ $user->updateInfo(null, 25, null); // İsim ve aktif null Bu tasarım, Go kodunuzun nesnenin durumuna nasıl erişildiğini ve değiştirildiğini tamamen kontrol etmesini sağlayarak daha iyi kapsülleme ve tür güvenliği sunar. -### Sabitleri Bildirme +### Sabitleri bildirme Oluşturucu, Go sabitlerini PHP'ye aktarmayı iki yönerge kullanarak destekler: genel sabitler için `//export_php:const` ve sınıf sabitleri için `//export_php:classconst`. Bu, Go ve PHP kodu arasında yapılandırma değerleri, durum kodları ve diğer sabitleri paylaşmanıza olanak tanır. -#### Genel Sabitler +#### Genel sabitler Genel PHP sabitleri oluşturmak için `//export_php:const` yönergesini kullanın: @@ -473,7 +473,7 @@ const ( > [!NOTE] > PHP sabitleri, Go sabitinin adını alacaktır, bu nedenle büyük harfler kullanılması önerilir. -#### Sınıf Sabitleri +#### Sınıf sabitleri Belirli bir PHP sınıfına ait sabitler oluşturmak için `//export_php:classconst ClassName` yönergesini kullanın: @@ -579,11 +579,11 @@ func (sp *StringProcessorStruct) Process(input *C.zend_string, mode int64) unsaf } ``` -### Ad Alanları Kullanma +### Ad alanları kullanma Oluşturucu, PHP uzantınızın işlevlerini, sınıflarını ve sabitlerini `//export_php:namespace` yönergesini kullanarak bir ad alanı altında düzenlemeyi destekler. Bu, adlandırma çakışmalarını önlemeye yardımcı olur ve uzantınızın API'si için daha iyi bir organizasyon sağlar. -#### Bir Ad Alanı Bildirme +#### Bir ad alanı bildirme Tüm dışa aktarılan sembolleri belirli bir ad alanı altına yerleştirmek için Go dosyanızın en üstünde `//export_php:namespace` yönergesini kullanın: @@ -616,7 +616,7 @@ func (u *UserStruct) GetName() unsafe.Pointer { const STATUS_ACTIVE = 1 ``` -#### Ad Alanlı Uzantıyı PHP'de Kullanma +#### Ad alanlı uzantıyı PHP'de kullanma Bir ad alanı bildirildiğinde, tüm işlevler, sınıflar ve sabitler PHP'de bu ad alanı altına yerleştirilir: @@ -631,22 +631,22 @@ echo $user->getName(); // "John Doe" echo My\Extension\STATUS_ACTIVE; // 1 ``` -#### Önemli Notlar +#### Önemli notlar - Dosya başına yalnızca **bir** ad alanı yönergesine izin verilir. Birden fazla ad alanı yönergesi bulunursa, oluşturucu bir hata döndürür. - Ad alanı, dosyadaki **tüm** dışa aktarılan sembollere (işlevler, sınıflar, metotlar ve sabitler) uygulanır. - Ad alanı adları, ayırıcı olarak ters eğik çizgi (`\`) kullanarak PHP ad alanı kurallarına uyar. - Hiçbir ad alanı bildirilmezse, semboller her zamanki gibi genel ad alanına aktarılır. -## Manuel Uygulama +## Manuel uygulama Uzantıların nasıl çalıştığını anlamak veya uzantınız üzerinde tam kontrole sahip olmak istiyorsanız, bunları manuel olarak yazabilirsiniz. Bu yaklaşım size tam kontrol sağlar ancak daha fazla boilerplate kodu gerektirir. -### Temel İşlev +### Temel işlev Go'da yeni bir yerel işlev tanımlayan basit bir PHP uzantısının nasıl yazılacağını göreceğiz. Bu işlev PHP'den çağrılacak ve Caddy'nin günlüklerine bir mesaj kaydeden bir goroutine tetikleyecektir. Bu işlev herhangi bir parametre almaz ve hiçbir şey döndürmez. -#### Go İşlevini Tanımla +#### Go işlevini tanımla Modülünüzde, PHP'den çağrılacak yeni bir yerel işlev tanımlamanız gerekir. Bunu yapmak için, örneğin `extension.go` adında bir dosya oluşturun ve aşağıdaki kodu ekleyin: @@ -678,7 +678,7 @@ func go_print_something() { Bu örnekte, yeni işlevimiz Caddy'nin günlüklerine bir mesaj kaydeden bir goroutine tetikleyecektir. -#### PHP İşlevini Tanımla +#### PHP işlevini tanımla PHP'nin işlevimizi çağırmasına izin vermek için karşılık gelen bir PHP işlevi tanımlamamız gerekir. Bunun için, örneğin `extension.stub.php` adında bir stub dosyası oluşturacağız ve bu dosya aşağıdaki kodu içerecektir: @@ -700,7 +700,7 @@ php ../php-src/build/gen_stub.php extension.stub.php Bu betik, PHP'nin işlevimizi nasıl tanımlayacağını ve çağıracağını bilmesi için gerekli bilgileri içeren `extension_arginfo.h` adlı bir dosya oluşturacaktır. -#### Go ve C Arasında Köprü Yazma +#### Go ve C arasında köprü yazma Şimdi, Go ve C arasında köprü yazmamız gerekiyor. Modül dizininizde `extension.h` adında bir dosya oluşturun ve içine aşağıdaki içeriği ekleyin: @@ -762,11 +762,11 @@ Son olarak, uzantının adını, sürümünü ve özelliklerini içeren `zend_mo Uzantı kaydı, Go kodumuzda çağırdığımız FrankenPHP'nin `RegisterExtension()` işlevi tarafından otomatik olarak ele alınır. -### Gelişmiş Kullanım +### Gelişmiş kullanım Artık Go'da temel bir PHP uzantısının nasıl oluşturulacağını bildiğimize göre, örneğimizi karmaşıklaştıralım. Şimdi bir dizeyi parametre olarak alan ve büyük harfli versiyonunu döndüren bir PHP işlevi oluşturacağız. -#### PHP İşlev Stub'ını Tanımla +#### PHP işlev stub'ını tanımla Yeni PHP işlevini tanımlamak için `extension.stub.php` dosyamızı yeni işlev imzasını içerecek şekilde değiştireceğiz: @@ -804,7 +804,7 @@ static const zend_function_entry ext_functions[] = { `go_upper` işlevinin `string` türünde bir parametre ve `string` türünde bir dönüş değeriyle tanımlandığını görebiliriz. -#### Go ve PHP/C Arasında Tür Dengeleme +#### Go ve PHP/C arasında tür dengeleme Go işleviniz doğrudan bir PHP dizesini parametre olarak kabul edemez. Onu bir Go dizesine dönüştürmeniz gerekir. Neyse ki, FrankenPHP, oluşturucu yaklaşımında gördüğümüz gibi, PHP dizeleri ve Go dizeleri arasındaki dönüşümü yönetmek için yardımcı işlevler sağlar. @@ -841,7 +841,7 @@ PHP_FUNCTION(go_upper) Yapılacak tek bir şey kaldı: `go_upper` işlevini Go'da uygulamak. -#### Go İşlevini Uygula +#### Go işlevini uygula Go işlevimiz parametre olarak bir `*C.zend_string` alacak, FrankenPHP'nin yardımcı işlevini kullanarak onu bir Go dizesine dönüştürecek, işleyecek ve sonucu yeni bir `*C.zend_string` olarak döndürecektir. Yardımcı işlevler, tüm bellek yönetimi ve dönüştürme karmaşıklığını bizim için halleder. @@ -875,7 +875,7 @@ FrankenPHP'nin yardımcı işlevleri, PHP'nin `zend_string` formatı ile Go dize > > Bu örnekte herhangi bir hata işleme yapmıyoruz, ancak Go işlevlerinizde kullanmadan önce işaretçilerin `nil` olmadığını ve verilerin geçerli olduğunu her zaman kontrol etmelisiniz. -### Uzantıyı FrankenPHP'ye Entegre Etme +### Uzantıyı FrankenPHP'ye entegre etme Uzantımız artık derlenmeye ve FrankenPHP'ye entegre edilmeye hazır. Bunu yapmak için, FrankenPHP'yi nasıl derleyeceğinizi öğrenmek üzere FrankenPHP [derleme dokümantasyonuna](compile.md) bakın. Modülü `--with` bayrağını kullanarak ekleyin ve modülünüzün yolunu işaret edin: @@ -891,7 +891,7 @@ xcaddy build \ İşte bu kadar! Uzantınız artık FrankenPHP'ye entegre edilmiştir ve PHP kodunuzda kullanılabilir. -### Uzantınızı Test Etme +### Uzantınızı test etme Uzantınızı FrankenPHP'ye entegre ettikten sonra, uyguladığınız işlevler için örnekler içeren bir `index.php` dosyası oluşturabilirsiniz: diff --git a/docs/tr/github-actions.md b/docs/tr/github-actions.md index 6adeaa558b..df35cb66c9 100644 --- a/docs/tr/github-actions.md +++ b/docs/tr/github-actions.md @@ -1,9 +1,9 @@ -# GitHub Actions Kullanma +# GitHub Actions kullanma Bu depo Docker imajını [Docker Hub](https://hub.docker.com/r/dunglas/frankenphp) üzerinde derler ve dağıtır. Bu durum onaylanan her çekme (pull) isteğinde veya çatallandıktan (fork) sonra gerçekleşir. -## GitHub Eylemlerini Ayarlama +## GitHub eylemlerini ayarlama Depo ayarlarında, gizli değerler altında aşağıdaki gizli değerleri ekleyin: @@ -12,13 +12,13 @@ Depo ayarlarında, gizli değerler altında aşağıdaki gizli değerleri ekleyi - `REGISTRY_PASSWORD`: Oturum açmak için kullanılacak parola (örn. bir erişim anahtarı). - `IMAGE_NAME`: İmajın adı (örn. `dunglas/frankenphp`). -## İmajı Oluşturma ve Dağıtma +## İmajı oluşturma ve dağıtma 1. Bir Çekme (pull) İsteği oluşturun veya çatala (forka) dağıtın. 2. GitHub Actions imajı oluşturacak ve tüm testleri çalıştıracaktır. 3. Derleme başarılı olursa, görüntü `pr-x` (burada `x` PR numarasıdır) etiketi kullanılarak ilgili saklanan yere (registry'e) gönderilir. -## İmajı Dağıtma +## İmajı dağıtma 1. Çekme (pull) isteği birleştirildikten sonra, GitHub Actions testleri tekrar çalıştıracak ve yeni bir imaj oluşturacaktır. 2. Derleme başarılı olursa, `main` etiketi Docker Registry'de güncellenecektir. diff --git a/docs/tr/hot-reload.md b/docs/tr/hot-reload.md index cb1af4c9f4..205cce98b6 100644 --- a/docs/tr/hot-reload.md +++ b/docs/tr/hot-reload.md @@ -1,4 +1,4 @@ -# Sıcak Yeniden Yükleme +# Sıcak yeniden yükleme FrankenPHP, geliştirici deneyimini büyük ölçüde iyileştirmek için tasarlanmış yerleşik bir **sıcak yeniden yükleme** özelliğine sahiptir. @@ -78,7 +78,7 @@ php_server { } ``` -## İstemci Tarafı Entegrasyonu +## İstemci tarafı entegrasyonu Sunucu değişiklikleri algılarken, tarayıcının sayfayı güncellemek için bu olaylara abone olması gerekir. FrankenPHP, dosya değişikliklerine abone olmak için kullanılacak Mercure Hub URL'sini `$_SERVER['FRANKENPHP_HOT_RELOAD']` ortam değişkeni aracılığıyla gösterir. @@ -101,7 +101,7 @@ Bir [npm](https://www.npmjs.com/package/frankenphp-hot-reload) paketi olarak ve Alternatif olarak, `EventSource` yerel JavaScript sınıfını kullanarak doğrudan Mercure hub'ına abone olarak kendi istemci tarafı mantığınızı uygulayabilirsiniz. -### Mevcut DOM Düğümlerini Korumak +### Mevcut DOM düğümlerini korumak Nadir durumlarda, [Symfony web hata ayıklama araç çubuğu gibi](https://github.com/symfony/symfony/pull/62970) geliştirme araçları kullanırken olduğu gibi, belirli DOM düğümlerini korumak isteyebilirsiniz. @@ -111,7 +111,7 @@ Bunu yapmak için, ilgili HTML öğesine `data-frankenphp-hot-reload-preserve`
``` -## Çalışan Modu +## Çalışan modu Uygulamanızı [Çalışan Modunda](https://frankenphp.dev/docs/worker/) çalıştırıyorsanız, uygulama betiğiniz bellekte kalır. Bu, tarayıcı yeniden yüklense bile PHP kodunuzdaki değişikliklerin hemen yansımayacağı anlamına gelir. @@ -138,7 +138,7 @@ php_server { } ``` -## Nasıl Çalışır +## Nasıl çalışır 1. **İzleme**: FrankenPHP, arka planda [`e-dant/watcher` kütüphanesini](https://github.com/e-dant/watcher) kullanarak (Go bağlayıcısını biz geliştirdik) dosya sistemindeki değişiklikleri izler. 2. **Yeniden Başlatma (Çalışan Modu)**: Çalışan yapılandırmasında `watch` etkinse, yeni kodu yüklemek için PHP çalışanı yeniden başlatılır. diff --git a/docs/tr/known-issues.md b/docs/tr/known-issues.md index efb3590ebe..a0f851446e 100644 --- a/docs/tr/known-issues.md +++ b/docs/tr/known-issues.md @@ -1,6 +1,6 @@ -# Bilinen Sorunlar +# Bilinen sorunlar -## Desteklenmeyen PHP Eklentileri +## Desteklenmeyen PHP eklentileri Aşağıdaki eklentilerin FrankenPHP ile uyumlu olmadığı bilinmektedir: @@ -8,7 +8,7 @@ Aşağıdaki eklentilerin FrankenPHP ile uyumlu olmadığı bilinmektedir: | ----------------------------------------------------------- | -------------------------- | -------------------------------------------------------------------------------------------------------------------- | | [imap](https://www.php.net/manual/imap.installation.php) | İş parçacığı güvenli değil | [javanile/php-imap2](https://github.com/javanile/php-imap2), [webklex/php-imap](https://github.com/Webklex/php-imap) | -## Sorunlu PHP Eklentileri +## Sorunlu PHP eklentileri Aşağıdaki eklentiler FrankenPHP ile kullanıldığında bilinen hatalara ve beklenmeyen davranışlara sahiptir: @@ -19,11 +19,11 @@ Aşağıdaki eklentiler FrankenPHP ile kullanıldığında bilinen hatalara ve b [get_browser()](https://www.php.net/manual/function.get-browser.php) fonksiyonu bir süre sonra kötü performans gösteriyor gibi görünüyor. Geçici bir çözüm, statik oldukları için User-Agent başına sonuçları önbelleğe almaktır (örneğin [APCu](https://www.php.net/manual/book.apcu.php) ile). -## Binary Çıktısı ve Alpine Tabanlı Docker İmajları +## Binary çıktısı ve Alpine tabanlı Docker imajları Binary çıktısı ve Alpine tabanlı Docker imajları (dunglas/frankenphp:\*-alpine), daha küçük bir binary boyutu korumak için glibc ve arkadaşları yerine musl libc kullanır. Bu durum bazı uyumluluk sorunlarına yol açabilir. Özellikle, glob seçeneği GLOB_BRACE mevcut değildir. -## Docker ile `https://127.0.0.1` Kullanımı +## Docker ile `https://127.0.0.1` kullanımı FrankenPHP varsayılan olarak `localhost` için bir TLS sertifikası oluşturur. Bu, yerel geliştirme için en kolay ve önerilen seçenektir. @@ -74,7 +74,7 @@ docker run \ dunglas/frankenphp ``` -## `@php` Referanslı Composer Betikler +## `@php` referanslı Composer betikler [Composer betikleri](https://getcomposer.org/doc/articles/scripts.md) bazı görevler için bir PHP binary çalıştırmak isteyebilir, örneğin [bir Laravel projesinde](laravel.md) `@php artisan package:discover --ansi` çalıştırmak. Bu [şu anda mümkün değil](https://github.com/php/frankenphp/issues/483#issuecomment-1899890915) ve 2 nedeni var: diff --git a/docs/tr/laravel.md b/docs/tr/laravel.md index afa0bd9c40..d61e35471f 100644 --- a/docs/tr/laravel.md +++ b/docs/tr/laravel.md @@ -12,7 +12,7 @@ docker run -p 80:80 -p 443:443 -p 443:443/udp -v $PWD:/app dunglas/frankenphp Ve tadını çıkarın! -## Yerel Kurulum +## Yerel kurulum Alternatif olarak, Laravel projelerinizi FrankenPHP ile yerel makinenizden çalıştırabilirsiniz: @@ -78,7 +78,7 @@ php artisan octane:frankenphp [Laravel Octane hakkında daha fazla bilgiyi resmi belgelerde bulabilirsiniz](https://laravel.com/docs/octane). -## Laravel Uygulamalarını Bağımsız Çalıştırılabilir Dosyalar Olarak Dağıtma +## Laravel uygulamalarını bağımsız çalıştırılabilir dosyalar olarak dağıtma [FrankenPHP'nin uygulama gömme özelliğini](embed.md) kullanarak, Laravel uygulamalarını bağımsız çalıştırılabilir dosyalar olarak dağıtmak mümkündür. @@ -159,14 +159,14 @@ Uygulamanız artık hazır! Mevcut seçenekler hakkında daha fazla bilgi edinin ve diğer işletim sistemleri için nasıl ikili derleneceğini [uygulama gömme](embed.md) belgelerinde öğrenin. -### Depolama Yolunu Değiştirme +### Depolama yolunu değiştirme Varsayılan olarak, Laravel yüklenen dosyaları, önbellekleri, logları vb. uygulamanın `storage/` dizininde saklar. Gömülü uygulamalar için bu uygun değildir, çünkü her yeni sürüm farklı bir geçici dizine çıkarılacaktır. Geçici dizin dışında bir dizin kullanmak için `LARAVEL_STORAGE_PATH` ortam değişkenini ayarlayın (örneğin, `.env` dosyanızda) veya `Illuminate\Foundation\Application::useStoragePath()` metodunu çağırın. -### Bağımsız Çalıştırılabilir Dosyalarla Octane'i Çalıştırma +### Bağımsız çalıştırılabilir dosyalarla Octane'i çalıştırma Laravel Octane uygulamalarını bağımsız çalıştırılabilir dosyalar olarak paketlemek bile mümkündür! diff --git a/docs/tr/mercure.md b/docs/tr/mercure.md index 581d486ba5..ef06dd19ad 100644 --- a/docs/tr/mercure.md +++ b/docs/tr/mercure.md @@ -1,4 +1,4 @@ -# Gerçek Zamanlı +# Gerçek zamanlı FrankenPHP yerleşik bir [Mercure](https://mercure.rocks) hub ile birlikte gelir! Mercure, olayları tüm bağlı cihazlara gerçek zamanlı olarak göndermeye olanak tanır: anında bir JavaScript olayı alırlar. diff --git a/docs/tr/performance.md b/docs/tr/performance.md index 1c6f4e453c..0dd5007813 100644 --- a/docs/tr/performance.md +++ b/docs/tr/performance.md @@ -3,7 +3,7 @@ Varsayılan olarak, FrankenPHP performans ve kullanım kolaylığı arasında iyi bir denge sunmaya çalışır. Ancak, uygun bir yapılandırma kullanılarak performansı önemli ölçüde artırmak mümkündür. -## İş Parçacığı ve İşçi Sayısı +## İş parçacığı ve işçi sayısı Varsayılan olarak, FrankenPHP mevcut CPU çekirdeği sayısının 2 katı kadar iş parçacığı ve işçi (işçi modunda) başlatır. @@ -26,13 +26,13 @@ Eğer `auto` olarak ayarlanırsa, sınır `php.ini` dosyanızdaki `memory_limit` `max_threads`, PHP FPM'nin [pm.max_children](https://www.php.net/manual/install.fpm.configuration.php#pm.max-children) ile benzerdir. Temel fark, FrankenPHP'nin süreçler yerine iş parçacıkları kullanması ve gerektiğinde bunları farklı işçi komut dosyaları ve 'klasik mod' arasında otomatik olarak devretmesidir. -## İşçi Modu +## İşçi modu [İşçi modunu](worker.md) etkinleştirmek performansı önemli ölçüde artırır, ancak uygulamanızın bu modla uyumlu olacak şekilde uyarlanması gerekir: bir işçi komut dosyası oluşturmanız ve uygulamanın bellek sızdırmadığından emin olmanız gerekir. -## musl Kullanmayın +## musl kullanmayın Resmi Docker imajlarının Alpine Linux varyantı ve sağladığımız varsayılan ikili dosyalar [musl libc](https://musl.libc.org) kullanmaktadır. @@ -47,7 +47,7 @@ Bu, Debian Docker imajlarını kullanarak, [bakımcılarımızın .deb, .rpm vey Daha yalın veya daha güvenli konteynerler için Alpine yerine [güçlendirilmiş bir Debian imajı](docker.md#hardening-images) kullanmayı düşünebilirsiniz. -## Go Çalışma Zamanı Yapılandırması +## Go çalışma zamanı yapılandırması FrankenPHP Go ile yazılmıştır. @@ -123,7 +123,7 @@ route { } ``` -## Yer Tutucular +## Yer tutucular `root` ve `env` yönergelerinde [yer tutucular](https://caddyserver.com/docs/conventions#placeholders) kullanabilirsiniz. Ancak bu, bu değerlerin önbelleğe alınmasını engeller ve önemli bir performans maliyetiyle birlikte gelir. @@ -151,7 +151,7 @@ giriş/çıkış işlemleri ve bellek ayırmaları gerektirir, bu da performans [Günlük seviyesini](https://caddyserver.com/docs/caddyfile/options#log) doğru bir şekilde ayarladığınızdan emin olun, ve yalnızca gerekli olanı günlüğe kaydedin. -## PHP Performansı +## PHP performansı FrankenPHP resmi PHP yorumlayıcısını kullanır. Tüm olağan PHP ile ilgili performans optimizasyonları FrankenPHP ile de geçerlidir. @@ -166,7 +166,7 @@ Tüm olağan PHP ile ilgili performans optimizasyonları FrankenPHP ile de geçe Daha fazla ayrıntı için, [Symfony'nin bu konuya ayrılmış dokümantasyon girişini](https://symfony.com/doc/current/performance.html) okuyun (ipuçlarının çoğu Symfony kullanmasanız bile faydalıdır). -## İş Parçacığı Havuzunu Bölme +## İş parçacığı havuzunu bölme Uygulamaların, yüksek yük altında güvenilmez olma eğiliminde olan veya sürekli olarak 10 saniyeden fazla yanıt veren bir API gibi yavaş harici hizmetlerle etkileşime girmesi yaygındır. diff --git a/docs/tr/production.md b/docs/tr/production.md index a44b174759..8f34303165 100644 --- a/docs/tr/production.md +++ b/docs/tr/production.md @@ -1,4 +1,4 @@ -# Production Ortamına Dağıtım +# Production ortamına dağıtım Bu eğitimde, Docker Compose kullanarak bir PHP uygulamasını tek bir sunucuya nasıl dağıtacağımızı öğreneceğiz. @@ -6,7 +6,7 @@ Symfony kullanıyorsanız, Symfony Docker projesinin (FrankenPHP kullanan) "[Pro API Platform (FrankenPHP de kullanır) kullanıyorsanız, [çerçevenin dağıtım dokümanına](https://api-platform.com/docs/deployment/) başvurabilirsiniz. -## Uygulamanızı Hazırlama +## Uygulamanızı hazırlama İlk olarak, PHP projenizin kök dizininde bir `Dockerfile` oluşturun: @@ -30,7 +30,7 @@ COPY . /app/public #COPY . /app ``` -Daha fazla ayrıntı ve seçenek için "[Özel Docker İmajı Oluşturma](docker.md)" bölümüne bakın, +Daha fazla ayrıntı ve seçenek için "[Özel Docker imajı oluşturma](docker.md)" bölümüne bakın, ve yapılandırmayı nasıl özelleştireceğinizi, PHP eklentilerini ve Caddy modüllerini nasıl kuracağınızı öğrenin. Projeniz Composer kullanıyorsa, @@ -66,7 +66,7 @@ volumes: Son olarak, eğer Git kullanıyorsanız, bu dosyaları commit edin ve push edin. -## Sunucu Hazırlama +## Sunucu hazırlama Uygulamanızı production ortamına dağıtmak için bir sunucuya ihtiyacınız vardır. Bu eğitimde, DigitalOcean tarafından sağlanan bir sanal makine kullanacağız, ancak herhangi bir Linux sunucusu çalışabilir. @@ -91,7 +91,7 @@ Droplet'iniz hazır olduğunda, bağlanmak için SSH kullanın: ssh root@ ``` -## Alan Adı Yapılandırma +## Alan adı yapılandırma Çoğu durumda sitenizle bir alan adını ilişkilendirmek isteyeceksiniz. Henüz bir alan adınız yoksa, bir kayıt şirketi aracılığıyla bir alan adı satın almanız gerekir. @@ -135,7 +135,7 @@ Sunucunuz aktif ve çalışıyor, ve sizin için otomatik olarak bir HTTPS serti > > Docker bir önbellek katmanına sahip olabilir, her dağıtım için doğru derlemeye sahip olduğunuzdan emin olun veya önbellek sorununu önlemek için projenizi `--no-cache` seçeneği ile yeniden oluşturun. -## Ters Proxy Arkasında Çalıştırma +## Ters proxy arkasında çalıştırma FrankenPHP bir ters proxy veya yük dengeleyicinin (örn. Nginx, AWS ELB, Google Cloud LB) arkasında çalışıyorsa, Caddy'nin gelen `X-Forwarded-*` başlıklarına güvenmesini sağlamak için Caddyfile dosyanızdaki [`trusted_proxies` genel seçeneğini](https://caddyserver.com/docs/caddyfile/options#trusted-proxies) yapılandırmanız gerekir: @@ -157,7 +157,7 @@ veya Laravel için [`trustedproxies` ara yazılımını](https://laravel.com/doc Her iki yapılandırma da olmazsa, `X-Forwarded-For` ve `X-Forwarded-Proto` gibi başlıklar göz ardı edilecek, bu da yanlış HTTPS algılaması veya hatalı istemci IP adresleri gibi sorunlara neden olabilir. -## Birden Fazla Düğümde Dağıtım +## Birden fazla düğümde dağıtım Uygulamanızı bir makine kümesine dağıtmak istiyorsanız, sağlanan Compose dosyalarıyla uyumlu olan [Docker Swarm](https://docs.docker.com/engine/swarm/stack-deploy/) kullanabilirsiniz. Kubernetes üzerinde dağıtım yapmak için FrankenPHP kullanan [API Platformu ile sağlanan Helm grafiğini](https://api-platform.com/docs/deployment/kubernetes/) inceleyebilirsiniz. diff --git a/docs/tr/static.md b/docs/tr/static.md index 522cd70d62..418468107b 100644 --- a/docs/tr/static.md +++ b/docs/tr/static.md @@ -1,4 +1,4 @@ -# Statik Yapı Oluşturun +# Statik yapı oluşturun PHP kütüphanesinin yerel kurulumunu kullanmak yerine, harika [static-php-cli projesi](https://github.com/crazywhalecc/static-php-cli) sayesinde FrankenPHP'nin statik bir yapısını oluşturmak mümkündür (adına rağmen, bu proje sadece CLI'yi değil, tüm SAPI'leri destekler). @@ -20,7 +20,7 @@ Elde edilen statik binary `frankenphp` olarak adlandırılır ve geçerli dizind Statik binary dosyasını Docker olmadan oluşturmak istiyorsanız, Linux için de çalışan macOS talimatlarına bir göz atın. -### Özel Eklentiler +### Özel eklentiler Varsayılan olarak, en popüler PHP eklentileri zaten derlenir. @@ -43,7 +43,7 @@ docker buildx bake \ static-builder ``` -### Ekstra Caddy Modülleri +### Ekstra Caddy modülleri Ekstra Caddy modülleri eklemek veya [xcaddy](https://github.com/caddyserver/xcaddy) adresine başka argümanlar iletmek için `XCADDY_ARGS` Docker ARG'sini kullanın: @@ -63,7 +63,7 @@ Bu örnekte, Caddy için [Souin](https://souin.io) HTTP önbellek modülünün y Derlemeyi nasıl [özelleştireceğinize](#yapıyı-özelleştirme) de bakın. -### GitHub Token +### GitHub token GitHub API kullanım limitine ulaşırsanız, `GITHUB_TOKEN` adlı bir ortam değişkeninde bir GitHub Personal Access Token ayarlayın: @@ -84,7 +84,7 @@ cd frankenphp Not: Bu betik Linux'ta (ve muhtemelen diğer Unix'lerde) da çalışır ve sağladığımız Docker tabanlı statik derleyici tarafından dahili olarak kullanılır. -## Yapıyı Özelleştirme +## Yapıyı özelleştirme Aşağıdaki ortam değişkenleri `docker build` ve `build-static.sh` dosyalarına aktarılabilir statik derlemeyi özelleştirmek için betik: diff --git a/docs/tr/worker.md b/docs/tr/worker.md index 7db478ab3e..5633f9b36a 100644 --- a/docs/tr/worker.md +++ b/docs/tr/worker.md @@ -1,9 +1,9 @@ -# FrankenPHP Worker'ları Kullanma +# FrankenPHP worker'ları kullanma Uygulamanızı bir kez önyükleyin ve bellekte tutun. FrankenPHP gelen istekleri birkaç milisaniye içinde halledecektir. -## Çalışan Komut Dosyalarının Başlatılması +## Çalışan komut dosyalarının başlatılması ### Docker @@ -17,7 +17,7 @@ docker run \ dunglas/frankenphp ``` -### Bağımsız İkili +### Bağımsız ikili Geçerli dizinin içeriğini bir worker kullanarak sunmak için `php-server` komutunun `--worker` seçeneğini kullanın: @@ -37,7 +37,7 @@ frankenphp php-server --worker /path/to/your/worker/script.php --watch="/path/to Bu özellik genellikle [hot reloading](hot-reload.md) ile birlikte kullanılır. -## Symfony Çalışma Zamanı +## Symfony çalışma zamanı > [!TIP] > Bu bölüm, FrankenPHP worker moduna yerel desteğin sunulduğu Symfony 7.4 öncesi için gereklidir. @@ -64,7 +64,7 @@ docker run \ Bkz. [özel dokümantasyon](laravel.md#laravel-octane). -## Özel Uygulamalar +## Özel uygulamalar Aşağıdaki örnek, üçüncü taraf bir kütüphaneye güvenmeden kendi worker betiğinizi nasıl oluşturacağınızı göstermektedir: @@ -129,14 +129,14 @@ docker run \ dunglas/frankenphp ``` -### Belirli Sayıda İstekten Sonra Worker'ı Yeniden Başlatın +### Belirli sayıda istekten sonra worker'ı yeniden başlatın PHP başlangıçta uzun süreli işlemler için tasarlanmadığından, hala bellek sızdıran birçok kütüphane ve eski kod vardır. Bu tür kodları worker modunda kullanmak için geçici bir çözüm, belirli sayıda isteği işledikten sonra worker betiğini yeniden başlatmaktır: Önceki worker kod parçacığı, `MAX_REQUESTS` adlı bir ortam değişkeni ayarlayarak işlenecek maksimum istek sayısını yapılandırmaya izin verir. -### Worker'ları Manuel Olarak Yeniden Başlatma +### Worker'ları manuel olarak yeniden başlatma Worker'ları [dosya değişikliklerinde](config.md#watching-for-file-changes) yeniden başlatmak mümkünken, tüm worker'ları [Caddy admin API](https://caddyserver.com/docs/api) aracılığıyla sorunsuz bir şekilde yeniden başlatmak da mümkündür. Yönetici [Caddyfile](config.md#caddyfile-config)'ınızda etkinleştirilmişse, yeniden başlatma uç noktasına aşağıdaki gibi basit bir POST isteği gönderebilirsiniz: @@ -144,7 +144,7 @@ Worker'ları [dosya değişikliklerinde](config.md#watching-for-file-changes) ye curl -X POST http://localhost:2019/frankenphp/workers/restart ``` -### Worker Hataları +### Worker hataları Bir worker betiği sıfır olmayan bir çıkış koduyla çökerse, FrankenPHP onu üstel bir geri çekilme (exponential backoff) stratejisiyle yeniden başlatacaktır. Worker betiği, son geri çekilme süresinin 2 katından daha uzun süre çalışır durumda kalırsa, worker betiğini cezalandırmayacak ve tekrar yeniden başlatacaktır. Ancak, worker betiği kısa bir süre içinde sıfır olmayan bir çıkış koduyla başarısız olmaya devam ederse (örneğin, bir betikte yazım hatası olması durumunda), FrankenPHP `too many consecutive failures` hatasıyla çökecektir. @@ -159,7 +159,7 @@ frankenphp { } ``` -## Süper Küresel Değişkenlerin Davranışı +## Süper küresel değişkenlerin davranışı [PHP süper küresel değişkenleri](https://www.php.net/manual/language.variables.superglobals.php) (`$_SERVER`, `$_ENV`, `$_GET`...) aşağıdaki gibi davranır: