Client: php
PHP was the only major-language entry stuck on buffered/framed sockets
while Python, Go, Node, C++, Java, Lua, Dart, JS, D, and Haskell already
declared http in their cross-test transports.
Server (test/php/TestServer.php + HttpRouter.php + HttpServer.php):
- On --transport=http, TestServer pcntl_exec()s into 'php -S' with
HttpRouter.php as the router. The chameleon HttpRouter dispatches on
PHP_SAPI: cli launches php -S with itself as the per-request handler;
cli-server invokes HttpServer.
- HttpServer reads php://input via TMemoryBuffer, peeks the message
type, and for ONEWAY sends an empty HTTP 200 immediately while
forking the handler so strict clients (Java) measure fast oneway
latency. Sync path echoes the processor's response bytes.
- protocols.php centralises the protocol-name -> TProtocolFactory
dispatch, shared between the socket entry point and the cli-server
router.
Client (test/php/TestClient.php):
- Adds an http branch that uses TPsrHttpClient (THRIFT-6010) against
http://127.0.0.1:$port/. Drops the duplicate makeProtocol() helper
in favour of thrift_test_protocol_factory()->getProtocol(), removes
the unused $host argv parsing, and normalises the file to PSR-12.
composer.json: adds guzzlehttp/guzzle ^7.8 to require-dev so PSR-18
discovery resolves a real client at cross-test time.
test/tests.json: adds 'http' to PHP server and client transports.
test/known_failures_Linux.json: lists php-cpp_*_http-ip (cpp THttpClient
does not handle Connection: close between calls — tracked as
THRIFT-6060) and nodejs-php_*_http-ip (Node http server mounts /test,
not /, matching the existing cpp-/d-/go-nodejs known failures).
Generated-by: Claude Opus 4.7