I'm having trouble using Spanner Emulator with PHP so to investigate the problem I configured my Spanner Emulator instance so that it works when running queries from the command line. Then I cloned this repository, configured the code to run on my emulator instance, and run the quickstart.php file. It returned the following stack trace where on line 4 you can see the stack size problem:
WARNING: All log messages before absl::InitializeLog() is called are written to STDERR
I0000 00:00:1756808553.589133 7237 call_credentials.c:168] GRPC_PHP: call credentials plugin function - begin
I0000 00:00:1756808553.589553 7237 call_credentials.c:171] GRPC_PHP: call credentials plugin function - end
PHP Fatal error: Uncaught Error: Maximum call stack size of 68719427584 bytes (zend.max_allowed_stack_size - zend.reserved_stack_size) reached. Infinite recursion? in /home/marcobuschini/src/php-docs-samples/spanner/vendor/google/gax/src/CredentialsWrapper.php:244
Stack trace:
#0 [internal function]: Google\ApiCore\CredentialsWrapper->Google\ApiCore\{closure}()
#1 /home/marcobuschini/src/php-docs-samples/spanner/vendor/grpc/grpc/src/lib/UnaryCall.php(45): Grpc\Call->startBatch()
#2 /home/marcobuschini/src/php-docs-samples/spanner/vendor/google/grpc-gcp/src/GCPUnaryCall.php(48): Grpc\UnaryCall->start()
#3 /home/marcobuschini/src/php-docs-samples/spanner/vendor/grpc/grpc/src/lib/BaseStub.php(295): Grpc\Gcp\GCPUnaryCall->start()
#4 /home/marcobuschini/src/php-docs-samples/spanner/vendor/grpc/grpc/src/lib/BaseStub.php(545): Grpc\BaseStub->Grpc\{closure}()
#5 /home/marcobuschini/src/php-docs-samples/spanner/vendor/google/gax/src/Transport/GrpcTransport.php(267): Grpc\BaseStub->_simpleRequest()
#6 /home/marcobuschini/src/php-docs-samples/spanner/vendor/google/gax/src/GapicClientTrait.php(664): Google\ApiCore\Transport\GrpcTransport->startUnaryCall()
#7 /home/marcobuschini/src/php-docs-samples/spanner/vendor/google/gax/src/Middleware/CredentialsWrapperMiddleware.php(60): Google\Cloud\Spanner\V1\Gapic\SpannerGapicClient->Google\ApiCore\{closure}()
#8 /home/marcobuschini/src/php-docs-samples/spanner/vendor/google/gax/src/Middleware/FixedHeaderMiddleware.php(67): Google\ApiCore\Middleware\CredentialsWrapperMiddleware->__invoke()
#9 /home/marcobuschini/src/php-docs-samples/spanner/vendor/google/gax/src/Middleware/RetryMiddleware.php(94): Google\ApiCore\Middleware\FixedHeaderMiddleware->__invoke()
#10 /home/marcobuschini/src/php-docs-samples/spanner/vendor/google/gax/src/Middleware/RequestAutoPopulationMiddleware.php(73): Google\ApiCore\Middleware\RetryMiddleware->__invoke()
#11 /home/marcobuschini/src/php-docs-samples/spanner/vendor/google/gax/src/Middleware/OptionsFilterMiddleware.php(60): Google\ApiCore\Middleware\RequestAutoPopulationMiddleware->__invoke()
#12 /home/marcobuschini/src/php-docs-samples/spanner/vendor/google/gax/src/GapicClientTrait.php(630): Google\ApiCore\Middleware\OptionsFilterMiddleware->__invoke()
#13 /home/marcobuschini/src/php-docs-samples/spanner/vendor/google/cloud-spanner/src/V1/Gapic/SpannerGapicClient.php(774): Google\Cloud\Spanner\V1\Gapic\SpannerGapicClient->startCall()
#14 [internal function]: Google\Cloud\Spanner\V1\Gapic\SpannerGapicClient->createSession()
#15 /home/marcobuschini/src/php-docs-samples/spanner/vendor/google/cloud-core/src/ExponentialBackoff.php(97): call_user_func_array()
#16 /home/marcobuschini/src/php-docs-samples/spanner/vendor/google/cloud-core/src/GrpcRequestWrapper.php(134): Google\Cloud\Core\ExponentialBackoff->execute()
#17 /home/marcobuschini/src/php-docs-samples/spanner/vendor/google/cloud-core/src/GrpcTrait.php(79): Google\Cloud\Core\GrpcRequestWrapper->send()
#18 /home/marcobuschini/src/php-docs-samples/spanner/vendor/google/cloud-spanner/src/Connection/Grpc.php(864): Google\Cloud\Spanner\Connection\Grpc->send()
#19 /home/marcobuschini/src/php-docs-samples/spanner/vendor/google/cloud-spanner/src/Operation.php(620): Google\Cloud\Spanner\Connection\Grpc->createSession()
#20 /home/marcobuschini/src/php-docs-samples/spanner/vendor/google/cloud-spanner/src/Database.php(2236): Google\Cloud\Spanner\Operation->createSession()
#21 /home/marcobuschini/src/php-docs-samples/spanner/vendor/google/cloud-spanner/src/Database.php(1678): Google\Cloud\Spanner\Database->selectSession()
#22 /home/marcobuschini/src/php-docs-samples/spanner/quickstart.php(46): Google\Cloud\Spanner\Database->execute()
#23 {main}
thrown in /home/marcobuschini/src/php-docs-samples/spanner/vendor/google/gax/src/CredentialsWrapper.php on line 244
Running on PHP version:
PHP 8.3.6 (cli) (built: Jul 14 2025 18:30:55) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.6, Copyright (c) Zend Technologies
with Zend OPcache v8.3.6, Copyright (c), by Zend Technologies
with Xdebug v3.2.0, Copyright (c) 2002-2022, by Derick Rethans
Running on Linux (the same happens running on WSL):
Linux marcobuschini-VirtualBox 6.14.0-28-generic #28~24.04.1-Ubuntu SMP PREEMPT_DYNAMIC Fri Jul 25 10:47:01 UTC 2 x86_64 x86_64 x86_64 GNU/Linux
I'm having trouble using Spanner Emulator with PHP so to investigate the problem I configured my Spanner Emulator instance so that it works when running queries from the command line. Then I cloned this repository, configured the code to run on my emulator instance, and run the
quickstart.phpfile. It returned the following stack trace where on line 4 you can see the stack size problem:Running on PHP version:
Running on Linux (the same happens running on WSL):