Kévin Dunglas
75dab8f33d
chore: bump deps and misc improvements ( #1135 )
2024-11-04 16:42:15 +01:00
Alexander Stecher
e5ca97308e
perf: optimize $_SERVER import ( #1106 )
...
Co-authored-by: Kévin Dunglas <kevin@dunglas.fr >
Co-authored-by: a.stecher <a.stecher@sportradar.com >
Co-authored-by: Alliballibaba <alliballibaba@gmail.com >
2024-11-04 15:34:00 +01:00
Rob Landers
e812473fe1
implement getenv and putenv in go ( #1086 )
...
* implement getenv and putenv in go
* fix typo
* apply formatting
* return a bool
* prevent ENV= from crashing
* optimization
* optimization
* split env workflows and use go_strings
* clean up unused code
* update tests
* remove useless sprintf
* see if this fixes the asan issues
* clean up comments
* check that VAR= works correctly and use actual php to validate the behavior
* move all unpinning to the end of the request
* handle the case where php is not installed
* fix copy-paste
* optimization
* use strings.cut
* fix lint
* override how env is filled
* reuse fullenv
* use corect function
2024-10-18 13:47:11 +02:00
Alexander Stecher
8bbd16d585
Removes worker panic when the watcher is enabled. ( #1092 )
...
* Removes the worker panic when the watcher is enabled.
* Only panics on the initial boot.
* Only panics on the initial boot.
* Resets to always panic when watcher is disabled.
---------
Co-authored-by: a.stecher <a.stecher@sportradar.com >
2024-10-14 20:58:26 +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
Rob Landers
aa585f7da0
handle worker failures gracefully ( #1038 )
...
* handle failures gracefully
* fix super-subtle race condition
* address feedback: panic instead of fatal log and make vars into consts
* pass the frankenphp context to worker-ready function
* reset backoff and failures on normal restart
* update docs
* add test and fix race condition
* fail sometimes but do not be pathological about it
* Use title case
Co-authored-by: Kévin Dunglas <kevin@dunglas.fr >
* fix code style in php
* define lifecycle metrics
* ensure we update unregister the metrics and fix tests
* update caddy tests and fix typo
* update docs
* no need for this
---------
Co-authored-by: Kévin Dunglas <kevin@dunglas.fr >
2024-10-03 21:53:12 +02:00
Kévin Dunglas
47257ec919
docs: add performance docs ( #1004 )
...
* docs: add performance docs
* docs: add PHP performance section
* Update docs/performance.md
Co-authored-by: Jacob Dreesen <jacob@hdreesen.de >
* Update docs/performance.md
Co-authored-by: Jacob Dreesen <jacob@hdreesen.de >
* Update docs/performance.md
Co-authored-by: Jacob Dreesen <jacob@hdreesen.de >
* Update docs/performance.md
Co-authored-by: Jacob Dreesen <jacob@hdreesen.de >
* Update docs/performance.md
Co-authored-by: Jacob Dreesen <jacob@hdreesen.de >
* Update docs/performance.md
Co-authored-by: Jacob Dreesen <jacob@hdreesen.de >
* Update docs/performance.md
Co-authored-by: Jacob Dreesen <jacob@hdreesen.de >
* typo
* musl
* musl fixes
* add log section
* french translation
* typo
---------
Co-authored-by: Jacob Dreesen <jacob@hdreesen.de >
2024-08-27 11:45:56 +02:00
Rob Landers
d532772355
fix: reset sapi response code ( #964 )
...
* fix: reset sapi response code
It turns out that the sapi response code is NOT reset between requests by the zend engine. This resets the code for cgi-based requests.
fixes : #960
* update response header test
* fix assertion
* appears to affect workers too
2024-08-11 22:34:50 +02:00
Kévin Dunglas
e45a788824
fix(caddy): incorrectly prepared environment variables when not using Caddyfile
2024-06-24 17:36:06 +02:00
Kévin Dunglas
4537f27f67
fix: prevent crash when worker terminates after a file upload
2024-06-08 13:36:32 +02:00
Kévin Dunglas
3714fdf3a1
fix: superglobals-realated crash with custom extensions in worker mode ( #796 )
...
* test: failing test reproducing #767
* fix
* Update frankenphp.c
Co-authored-by: Tim Düsterhus <timwolla@googlemail.com >
* Update frankenphp.c
Co-authored-by: Tim Düsterhus <timwolla@googlemail.com >
* review
* ZVAL_COPY
* fix
* add back current $_SERVER behavior
* add docs
* bad fix for the leak
* clean test
* improve tests
* fix test
* fix
* cleanup
* clarify destroy super globals name
* micro-optim: use zval_ptr_dtor_nogc to destroy super globals
* style
* fix
* better name for frankenphp_free_server_context
* more cleanup
* remove useless memset
* more cleanup
* continue refactoring
* fix and update docs
* docs
---------
Co-authored-by: Tim Düsterhus <timwolla@googlemail.com >
2024-06-05 15:24:16 +02:00
Kévin Dunglas
3d065eda35
$_SERVER['FRANKENPHP_WORKER'] must not be NULL-terminated
2024-05-21 18:50:02 +02:00
Kévin Dunglas
b71dae9b03
fix: prevent crash when calling apache_request_headers() in non-HTTP context
2024-02-27 17:51:10 +01:00
Kévin Dunglas
4cb77b552d
ci: add more headers to the k6 load test ( #544 )
2024-02-03 12:25:35 +01:00
Kévin Dunglas
5a8e5f9518
feat: add apache_response_headers() function ( #530 )
2024-01-31 12:34:30 +01:00
Kévin Dunglas
175b9a0296
feat: add Brotli compression support ( #524 )
2024-01-30 18:33:59 +01:00
Kévin Dunglas
49baf02035
feat: add go_apache_request_headers()
2024-01-23 23:14:24 +01:00
Kévin Dunglas
f71f9875ca
perf: add benchmark ( #392 )
2023-12-18 15:35:44 +01:00
Kévin Dunglas
3d2c9b6f6f
chore: add missing file
2023-11-10 18:39:29 +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
Kévin Dunglas
c624971fa7
feat(caddy): add command to start a PHP server ( #238 )
...
* feat(caddy): a command to start a PHP server
* docs and l shortcut
* fix some bugs and support for compression
* cleanup
* enable compression by default
* add -a shortcut
* refactor
* const
* docs
2023-10-05 14:56:04 +02:00
Kévin Dunglas
2d91a606fd
feat(caddy): php_server simplified directive ( #235 )
...
* feat(caddy): php_server simplified directive
* fix typo
Co-authored-by: Matt Holt <mholt@users.noreply.github.com >
* fix
* cleanup
* Update config.md
Co-authored-by: Francis Lavoie <lavofr@gmail.com >
* feat: automatically serve static files
* file_server off
* fix tests
* fix config
* fix tests in Docker
* debug
* fix
---------
Co-authored-by: Matt Holt <mholt@users.noreply.github.com >
Co-authored-by: Francis Lavoie <lavofr@gmail.com >
2023-10-03 15:44:55 +02:00
Kévin Dunglas
69416cc0d6
test: prove that Fibers work if not calling Go
2023-09-28 19:04:57 +02:00
Kévin Dunglas
fb63099a88
feat: allow passing env vars to workers ( #210 )
2023-09-15 12:59:43 +02:00
Kévin Dunglas
ab0783519e
perf: reduce the number of calls to cgo to set the headers
2023-08-18 19:20:32 +02:00
Kévin Dunglas
234873a35a
test: add a test for large requests
2023-08-16 11:12:29 +02:00
Kévin Dunglas
2818dfb474
feat: upgrade to Caddy 2.7.3
2023-08-07 23:47:02 +02:00
Kévin Dunglas
e0cf262224
test: fix and refactor some flaky tests ( #165 )
...
* test: fix and refactor some flaky tests
* better fix for flush.php
* simpler DHA config
2023-07-10 18:46:04 +02:00
Kévin Dunglas
75cd310292
feat: add support for PHP timeouts on Linux ( #128 )
2023-03-05 15:47:20 +01:00
Kévin Dunglas
878a30d92f
fix: ensure there is always a free thread for non-worker scripts ( #105 )
2022-11-14 22:45:51 +01:00
Rob Landers
3abda4fbb6
feat: handle aborted connection ( #95 )
...
* Handle aborted connection
* Handle when writing as well
* return bytes written
* optimize return
* remove goroutine
* fix style
* Add tests
* add missing newline
2022-11-09 15:09:45 +01:00
Kévin Dunglas
8e136d0d25
feat: implement flush() ( #90 )
...
* feat: implement flush()
* add tests
2022-11-09 00:56:00 +01:00
Kévin Dunglas
0a30dd1cb9
tests: improve TestFinishRequest ( #97 )
2022-11-09 00:53:34 +01:00
Rob Landers
9ef3bd7c47
feat: add fastcgi_finish_request() support ( #69 )
...
* Add function to ext
* buggy af, but kinda working
* Get worker and regular mode working
* fix formatting
* add eol
* add eol
* 🤦
* properly generate file
* use sync.Once
2022-11-03 08:36:47 +01:00
Kévin Dunglas
4b21d18e84
chore: remove useless code
2022-10-21 15:43:16 +02:00
Kévin Dunglas
26edeb76e4
fix: prevent panic when restarting crashed worker ( #49 )
2022-10-21 14:43:16 +02:00
Kévin Dunglas
0f65e421e4
feat: use mainline PHP 8.2 ( #48 )
2022-10-21 07:24:31 +02:00
Kévin Dunglas
acc48830f7
feat: improve Dockerfile and add some docs ( #15 )
2022-10-13 18:05:22 +02:00
Kévin Dunglas
5012ac30cd
chore: improve tests and add missing file ( #13 )
2022-10-11 20:41:50 +02:00
Kévin Dunglas
5af6b10d1f
feat: add support for 103 Early Hints ( #12 )
2022-10-11 17:40:12 +02:00
Kévin Dunglas
3712d0d69b
test: add tests for exception handling ( #11 )
2022-10-11 10:54:30 +02:00
Kévin Dunglas
7ec0043fe8
feat: handle errors in worker mode ( #9 )
...
* feat: handle errors in worker mode (not working)
* feat: better exception and error handling
2022-10-11 08:10:46 +02:00
Kévin Dunglas
4c0dd41327
feat: improve PHP logger
2022-10-08 13:05:18 +02:00
Kévin Dunglas
0b8e322375
fix: preserve autoloading in worker mode
2022-10-06 15:25:58 +02:00
Kévin Dunglas
4a87ad3609
chore: add tests regarding persistent objects
2022-10-05 15:44:02 +02:00
Kévin Dunglas
796476d537
feat: use threads instead of GoRoutines ( #6 )
...
* feat: use threads instead of GoRoutines
* many improvements
* fix some bugs
2022-10-04 14:41:19 +02:00
Kévin Dunglas
a3ba57f021
test: ensure memory safety when handling parallel requests ( #3 )
2022-05-23 11:57:30 +02:00
Kévin Dunglas
7d81fa51fe
feat: add a woker mode ( #1 )
...
* refactor: better memory management
* wip
* tmp
* introduce a go-like api
* upgraded to PHP 8.2
* Fix thread safety issues
* fix tests
* wip
* refactor worker
* worker prototype
* fix populate env
* session
* improve tests
* fix Caddy tests
* refactor
2022-05-18 11:52:24 +02:00
Kévin Dunglas
290e9e1114
feat: Caddy module
2021-11-01 00:18:30 +01:00
Kévin Dunglas
a2607e6be7
initial commit
2021-09-24 18:52:20 +02:00