Alexander Stecher
8f4412cbbf
perf: move sandboxed environment to the C side ( #2058 )
...
This PR uses `zend_array_dup` to simplify and optimize the environment sandboxing
logic. It also guarantees no environment leakage on FrankenPHP restarts.
2026-02-26 22:34:54 +01:00
tehmaestro
c99b6db5ae
fix: nomercure build tag ( #2212 )
...
- Fixes nomercure tag build
- Conditionally addds the mercure route and mercure project import
Fixes https://github.com/php/frankenphp/issues/2209
I am by no means a go developer, feel free to use this or not :)
---------
Signed-off-by: tehmaestro <alexnegrila89@gmail.com >
Co-authored-by: Alexander Stecher <45872305+AlliBalliBaba@users.noreply.github.com >
2026-02-22 18:46:39 +01:00
Marc
2bdf85866c
Upgrade to Cady v2.11.1 ( #2214 )
...
fixes failing integration tests and closes
https://github.com/php/frankenphp/issues/2213
2026-02-21 23:29:47 +07:00
Luffy
ac900e0df4
docs: update repository links and sync cn readme ( #1711 )
2025-07-01 10:29:55 +02:00
Marc
34a0255c15
fix: fix php-server command bug when built with nobrotli tag
2025-06-18 09:43:54 +02:00
Alexandre Daubois
5542044376
feat: allow omitting value with the --watch flag of php-server ( #1595 )
2025-06-02 15:54:01 +02:00
Kévin Dunglas
13fbe126ea
fix: automatically change cwd when embedding an app
2025-05-16 10:10:01 +02:00
Marc
1d74b2caa8
feat: define domain specific workers in php_server and php blocks ( #1509 )
...
* add module (php_server directive) based workers
* refactor moduleID to uintptr for faster comparisons
* let workers inherit environment variables and root from php_server
* caddy can shift FrankenPHPModules in memory for some godforsaken reason, can't rely on them staying the same
* remove debugging statement
* fix tests
* refactor moduleID to uint64 for faster comparisons
* actually allow multiple workers per script filename
* remove logging
* utility function
* reuse existing worker with same filename and environment when calling newWorker with a filepath that already has a suitable worker, simply add number of threads
* no cleanup happens between tests, so restore old global worker overwriting logic
* add test, use getWorker(ForContext) function in frankenphp.go as well
* bring error on second global worker with the same filename again
* refactor to using name instead of moduleID
* nicer name
* nicer name
* add more tests
* remove test case already covered by previous test
* revert back to single variable, moduleIDs no longer relevant
* update comment
* figure out the worker to use in FrankenPHPModule::ServeHTTP
* add caddy/config_tests, add --retry 5 to download
* add caddy/config_tests
* sum up logic a bit, put worker thread addition into moduleWorkers parsing, before workers are actually created
* implement suggestions as far as possible
* fixup
* remove tags
* feat: download the mostly static binary when possible (#1467 )
* feat: download the mostly static binary when possible
* cs
* docs: remove wildcard matcher from root directive (#1513 )
* docs: update README with additional documentation links
Add link to classic mode, efficiently serving large static files and monitoring FrankenPHP
Signed-off-by: Romain Bastide <romain.bastide@orange.com >
* ci: combine dependabot updates for one group to 1 pull-request
* feat: compatibility with libphp.dylib on macOS
* feat: upgrade to Caddy 2.10
* feat: upgrade to Caddy 2.10
* chore: run prettier
* fix: build-static.sh consecutive builds (#1496 )
* fix consecutive builds
* use minor version in PHP_VERSION
* install jq in centos container
* fix "arm64" download arch for spc binary
* jq is not available as a rpm download
* linter
* specify php 8.4 default
specify 8.4 so we manually switch to 8.5 when we make sure it works
allows to run without jq installed
* Apply suggestions from code review
Co-authored-by: Kévin Dunglas <kevin@dunglas.fr >
---------
Co-authored-by: Kévin Dunglas <kevin@dunglas.fr >
* chore: update Go and toolchain version (#1526 )
* apply suggestions one be one - scriptpath only
* generate unique worker names by filename and number
* support worker config from embedded apps
* rename back to make sure we don't accidentally add FrankenPHPApp workers to the slice
* fix test after changing error message
* use 🧩 for module workers
* use 🌍 for global workers :)
* revert 1c414cebbc
* revert 4cc8893ced
* apply suggestions
* add dynamic config loading test of module worker
* fix test
* minor changes
---------
Signed-off-by: Romain Bastide <romain.bastide@orange.com >
Co-authored-by: Kévin Dunglas <kevin@dunglas.fr >
Co-authored-by: Indra Gunawan <hello@indra.my.id >
Co-authored-by: Romain Bastide <romain.bastide@orange.com >
2025-05-05 16:14:19 +02:00
Indra Gunawan
1ec37f6cc9
feat: replace zap with slog ( #1527 )
2025-04-26 11:04:46 +02:00
Kévin Dunglas
75dab8f33d
chore: bump deps and misc improvements ( #1135 )
2024-11-04 16:42:15 +01:00
Alexander Stecher
ee8e1b97b9
fix: default split path for php-server command ( #1127 )
2024-11-02 16:45:25 +01:00
Kévin Dunglas
d53f909d20
chore: various cleanups
2024-10-23 22:33:58 +02:00
Kévin Dunglas
95c381ec78
feat: add build tag to skip Brotli support ( #1070 )
...
* feat: add build tag to skip Brotli support
* update docs
2024-10-08 18:57:34 +02:00
Alexander Stecher
8d9b6e755b
feat: restart workers when on source changes ( #1013 )
...
* Adds filesystem watcher with tests.
* Refactoring.
* Formatting.
* Formatting.
* Switches to absolute path in tests.
* Fixes race condition from merge conflict.
* Fixes race condition.
* Fixes tests.
* Fixes markdown lint errors.
* Switches back to absolute paths.
* Reverts back to relative file paths.
* Fixes golangci-lint issues.
* Uses github.com/dunglas/go-fswatch instead.
* Stops watcher before stopping workers.
* Updates docs.
* Avoids segfault in tests.
* Fixes watcher segmentation violations on shutdown.
* Adjusts watcher latencies and tests.
* Adds fswatch to dockerfiles
* Fixes fswatch in alpine.
* Fixes segfault (this time for real).
* Allows queueing new reload if file changes while workers are reloading.
* Makes tests more consistent.
* Prevents the watcher from getting stuck if there is an error in the worker file itself.
* Reverts changing the image.
* Puts fswatch version into docker-bake.hcl.
* Asserts instead of panicking.
* Adds notice
Co-authored-by: Kévin Dunglas <kevin@dunglas.fr >
* Update dev.Dockerfile
Co-authored-by: Kévin Dunglas <kevin@dunglas.fr >
* Update Dockerfile
Co-authored-by: Kévin Dunglas <kevin@dunglas.fr >
* Update Dockerfile
Co-authored-by: Kévin Dunglas <kevin@dunglas.fr >
* Update alpine.Dockerfile
Co-authored-by: Kévin Dunglas <kevin@dunglas.fr >
* Update alpine.Dockerfile
Co-authored-by: Kévin Dunglas <kevin@dunglas.fr >
* Update dev-alpine.Dockerfile
Co-authored-by: Kévin Dunglas <kevin@dunglas.fr >
* Update dev-alpine.Dockerfile
Co-authored-by: Kévin Dunglas <kevin@dunglas.fr >
* Update dev.Dockerfile
Co-authored-by: Kévin Dunglas <kevin@dunglas.fr >
* Update docs/config.md
Co-authored-by: Kévin Dunglas <kevin@dunglas.fr >
* Runs fswatch version.
* Removes .json.
* Replaces ms with s.
* Resets the channel after closing it.
* Update watcher_options.go
Co-authored-by: Kévin Dunglas <kevin@dunglas.fr >
* Update watcher_test.go
Co-authored-by: Kévin Dunglas <kevin@dunglas.fr >
* Asserts no error instead.
* Fixes a race condition where events are fired after frankenphp has stopped.
* Updates docs.
* Update watcher_options_test.go
Co-authored-by: Kévin Dunglas <kevin@dunglas.fr >
* Allows queuing events while watchers are reloading.
* go fmt
* Refactors stopping and draining logic.
* Allows extended watcher configuration with dirs, recursion, symlinks, case-sensitivity, latency, monitor types and regex.
* Updates docs.
* Adds TODOS.
* go fmt.
* Fixes linting errors.
* Also allows wildcards in the longform and adjusts docs.
* Adds debug log.
* Fixes the watcher short form.
* Refactors sessions and options into a struct.
* Fixes an overflow in the 'workersReadyWG' on unexpected terminations.
* Properly logs errors coming from session.Start().
* go fmt.
* Adds --nocache.
* Fixes lint issue.
* Refactors and resolves race condition on worker reload.
* Implements debouncing with a timer as suggested by @withinboredom.
* Starts watcher even if no workers are defined.
* Updates docs with file limit warning.
* Adds watch config unit tests.
* Adjusts debounce timings.
* go fmt.
* Adds fswatch to static builder (test).
* Adds a short grace period between stopping and destroying the watcher sessions.
* Adds caddy test.
* Adjusts sleep time.
* Swap to edant/watcher.
* Fixes watch options and tests.
* go fmt.
* Adds TODO.
* Installs edant/watcher in the bookworm image.
* Fixes linting.
* Refactors the watcher into its own module.
* Adjusts naming.
* ADocker image adjustments and refactoring.
* Testing installation methods.
* Installs via gcc instead.
* Fixes pointer formats.
* Fixes lint issues.
* Fixes arm alpine and updates docs.
* Clang format.
* Fixes dirs.
* Adds watcher version arg.
* Uses static lib version.
* Adds watcher to tests and sanitizers.
* Uses sudo for copying the shared lib.
* Removes unnused func.
* Refactoring.
* Update .github/workflows/sanitizers.yaml
Co-authored-by: Kévin Dunglas <kevin@dunglas.fr >
* Adds fpic.
* Fixes linting.
* Skips tests in msan.
* Resets op_cache in every worker thread after termination
* Review fixes part 1.
* Test: installing libstc++ instead of gcc.
* Test: using msan ignorelist.
* Test: using msan ignorelist.
* Test: using msan ignorelist.
* Allows '/**/' for global recursion and '**/' for relative recursion.
* Reverts using the ignorelist.
* Calls opcache directly.
* Adds --watch to php-server command
* Properly free CStrings.
* Sorts alphabetically and uses curl instead of git.
* Labeling and formatting.
* Update .github/workflows/sanitizers.yaml
Co-authored-by: Kévin Dunglas <kevin@dunglas.fr >
* Update .github/workflows/sanitizers.yaml
Co-authored-by: Kévin Dunglas <kevin@dunglas.fr >
* Update .github/workflows/tests.yaml
Co-authored-by: Kévin Dunglas <kevin@dunglas.fr >
* Update .github/workflows/tests.yaml
Co-authored-by: Kévin Dunglas <kevin@dunglas.fr >
* Update caddy/caddy.go
Co-authored-by: Kévin Dunglas <kevin@dunglas.fr >
* Update docs/config.md
Co-authored-by: Kévin Dunglas <kevin@dunglas.fr >
* Update frankenphp_with_watcher_test.go
Co-authored-by: Kévin Dunglas <kevin@dunglas.fr >
* Update watcher/watcher.h
Co-authored-by: Kévin Dunglas <kevin@dunglas.fr >
* Update frankenphp.c
Co-authored-by: Kévin Dunglas <kevin@dunglas.fr >
* Update watcher/watcher.go
Co-authored-by: Kévin Dunglas <kevin@dunglas.fr >
* Update docs/config.md
Co-authored-by: Kévin Dunglas <kevin@dunglas.fr >
* Update frankenphp_with_watcher_test.go
Co-authored-by: Kévin Dunglas <kevin@dunglas.fr >
* Update testdata/files/.gitignore
Co-authored-by: Kévin Dunglas <kevin@dunglas.fr >
* Update watcher/watcher-c.h
Co-authored-by: Kévin Dunglas <kevin@dunglas.fr >
* Update watcher/watcher.c
Co-authored-by: Kévin Dunglas <kevin@dunglas.fr >
* Fixes test and Dockerfile.
* Fixes Dockerfiles.
* Resets go versions.
* Replaces unsafe.pointer with uintptr_t
* Prevents worker channels from being destroyed on reload.
* Minimizes the public api by only passing a []string.
* Adds support for directory patterns and multiple '**' globs.
* Adjusts label.
* go fmt.
* go mod tidy.
* Fixes merge conflict.
* Refactoring and formatting.
* Cleans up unused vars and functions.
* Allows dirs with a dot.
* Makes test nicer.
* Add dir tests.
* Moves the watch directive inside the worker directive.
* Adds debug log on special events.
* Removes line about symlinks.
* Hints at multiple possible --watch flags.
* Adds ./**/*.php as default watch configuration.
* Changes error to a warning.
* Changes the default to './**/*.{php,yaml,yml,twig,env}' and supports the {bracket} pattern.
* Fixes linting.
* Fixes merge conflict and adjust values.
* Adjusts values.
---------
Co-authored-by: a.stecher <a.stecher@sportradar.com >
Co-authored-by: Kévin Dunglas <kevin@dunglas.fr >
2024-10-07 13:17:24 +02:00
Kévin Dunglas
a16076e082
perf: prevent useless logger allocs
2024-08-27 11:03:01 +02:00
Kévin Dunglas
ae958516ea
feat: enable resolve_root_symlink by default ( #546 )
...
* feat: enable resolve_root_symlink by default
* Update docs/config.md
Co-authored-by: Francis Lavoie <lavofr@gmail.com >
* fix init
---------
Co-authored-by: Francis Lavoie <lavofr@gmail.com >
2024-02-02 15:58:33 +01:00
Kévin Dunglas
175b9a0296
feat: add Brotli compression support ( #524 )
2024-01-30 18:33:59 +01:00
Pierre du Plessis
a92d774742
fix: check for custom php.ini before checking for the Caddyfile ( #498 )
2024-01-22 22:26:20 +01:00
Pierre du Plessis
effb5805f1
feat: allow custom php.ini file in embedded apps ( #497 )
2024-01-22 14:01:27 +01:00
Pierre du Plessis
5d32f32639
feat: option to start a Mercure.rocks hub when running php-server ( #489 )
...
---------
Co-authored-by: Kévin Dunglas <kevin@dunglas.fr >
2024-01-22 13:35:19 +01:00
Pierre du Plessis
bccbaafc84
feat: load custom Caddyfile from embedded app if it exists ( #494 )
...
---------
Co-authored-by: Kévin Dunglas <kevin@dunglas.fr >
2024-01-22 13:31:12 +01:00
Kévin Dunglas
e3361c2b3f
feat(caddy): allow to start workers using the php-server built-in command ( #339 )
2023-12-06 18:18:16 +01:00
Kévin Dunglas
6509cddd2a
feat: embed PHP apps into the FrankenPHP binary
2023-12-02 15:40:51 +01:00
Kévin Dunglas
c615fe0087
feat: add experimental CLI support ( #239 )
...
* feat: add CLI support
* updated
* debug
* fix tests
* Caddy php-cli command
* use thread
* $_SERVER and input streams support
* Update frankenphp.c
Co-authored-by: Francis Lavoie <lavofr@gmail.com >
---------
Co-authored-by: Francis Lavoie <lavofr@gmail.com >
2023-10-09 14:38:15 +02:00