1*cc02d7e2SAndroid Build Coastguard Worker 2*cc02d7e2SAndroid Build Coastguard Worker# gRPC PHP End-to-End Examples 3*cc02d7e2SAndroid Build Coastguard Worker 4*cc02d7e2SAndroid Build Coastguard WorkerThis page shows a number of ways to create a PHP gRPC client and connect with 5*cc02d7e2SAndroid Build Coastguard Workera gRPC backend service. 6*cc02d7e2SAndroid Build Coastguard Worker 7*cc02d7e2SAndroid Build Coastguard Worker 8*cc02d7e2SAndroid Build Coastguard Worker## Run the Server 9*cc02d7e2SAndroid Build Coastguard Worker 10*cc02d7e2SAndroid Build Coastguard WorkerFor all the following examples, we use a simple gRPC server, written in Node. 11*cc02d7e2SAndroid Build Coastguard Worker 12*cc02d7e2SAndroid Build Coastguard Worker```sh 13*cc02d7e2SAndroid Build Coastguard Worker$ git clone https://github.com/grpc/grpc-web 14*cc02d7e2SAndroid Build Coastguard Worker$ cd grpc-web 15*cc02d7e2SAndroid Build Coastguard Worker$ docker-compose build prereqs node-server 16*cc02d7e2SAndroid Build Coastguard Worker$ docker run -d -p 9090:9090 --name node-server grpcweb/node-server 17*cc02d7e2SAndroid Build Coastguard Worker``` 18*cc02d7e2SAndroid Build Coastguard Worker 19*cc02d7e2SAndroid Build Coastguard Worker 20*cc02d7e2SAndroid Build Coastguard Worker## Install the gRPC PECL extension 21*cc02d7e2SAndroid Build Coastguard Worker 22*cc02d7e2SAndroid Build Coastguard WorkerAll the following commands are assumed to be run from this current directory. 23*cc02d7e2SAndroid Build Coastguard Worker 24*cc02d7e2SAndroid Build Coastguard Worker```sh 25*cc02d7e2SAndroid Build Coastguard Worker$ cd grpc/examples/php/echo 26*cc02d7e2SAndroid Build Coastguard Worker``` 27*cc02d7e2SAndroid Build Coastguard Worker 28*cc02d7e2SAndroid Build Coastguard Worker 29*cc02d7e2SAndroid Build Coastguard WorkerIn order to build a PHP gRPC client, we need to install the `grpc` extension 30*cc02d7e2SAndroid Build Coastguard Workerfirst. 31*cc02d7e2SAndroid Build Coastguard Worker 32*cc02d7e2SAndroid Build Coastguard Worker```sh 33*cc02d7e2SAndroid Build Coastguard Worker$ docker build -t grpc-php/base -f ./base.Dockerfile . 34*cc02d7e2SAndroid Build Coastguard Worker``` 35*cc02d7e2SAndroid Build Coastguard Worker 36*cc02d7e2SAndroid Build Coastguard Worker 37*cc02d7e2SAndroid Build Coastguard Worker## CLI 38*cc02d7e2SAndroid Build Coastguard Worker 39*cc02d7e2SAndroid Build Coastguard Worker 40*cc02d7e2SAndroid Build Coastguard WorkerLet's first build a simple CLI gRPC client: 41*cc02d7e2SAndroid Build Coastguard Worker 42*cc02d7e2SAndroid Build Coastguard Worker```sh 43*cc02d7e2SAndroid Build Coastguard Worker$ docker build -t grpc-php/echo-client -f ./cli.Dockerfile . 44*cc02d7e2SAndroid Build Coastguard Worker$ docker run -it --rm --link node-server:node-server grpc-php/echo-client 45*cc02d7e2SAndroid Build Coastguard Worker$ php client.php 46*cc02d7e2SAndroid Build Coastguard Worker``` 47*cc02d7e2SAndroid Build Coastguard Worker 48*cc02d7e2SAndroid Build Coastguard Worker 49*cc02d7e2SAndroid Build Coastguard Worker 50*cc02d7e2SAndroid Build Coastguard Worker## Apache 51*cc02d7e2SAndroid Build Coastguard Worker 52*cc02d7e2SAndroid Build Coastguard Worker 53*cc02d7e2SAndroid Build Coastguard WorkerNow let's see how the gRPC PHP client can run with Apache: 54*cc02d7e2SAndroid Build Coastguard Worker 55*cc02d7e2SAndroid Build Coastguard Worker```sh 56*cc02d7e2SAndroid Build Coastguard Worker$ docker build -t grpc-php/apache -f ./apache.Dockerfile . 57*cc02d7e2SAndroid Build Coastguard Worker$ docker run -it --rm --link node-server:node-server -p 80:80 grpc-php/apache 58*cc02d7e2SAndroid Build Coastguard Worker``` 59*cc02d7e2SAndroid Build Coastguard Worker 60*cc02d7e2SAndroid Build Coastguard WorkerOpen the browser to `http://localhost`. 61*cc02d7e2SAndroid Build Coastguard Worker 62*cc02d7e2SAndroid Build Coastguard Worker 63*cc02d7e2SAndroid Build Coastguard Worker 64*cc02d7e2SAndroid Build Coastguard Worker## Nginx + FPM 65*cc02d7e2SAndroid Build Coastguard Worker 66*cc02d7e2SAndroid Build Coastguard Worker 67*cc02d7e2SAndroid Build Coastguard WorkerWe can also try running PHP-FPM and put Nginx in front of it. 68*cc02d7e2SAndroid Build Coastguard Worker 69*cc02d7e2SAndroid Build Coastguard Worker 70*cc02d7e2SAndroid Build Coastguard WorkerThe PHP-FPM part: 71*cc02d7e2SAndroid Build Coastguard Worker 72*cc02d7e2SAndroid Build Coastguard Worker```sh 73*cc02d7e2SAndroid Build Coastguard Worker$ docker build -t grpc-php/fpm -f ./fpm.Dockerfile . 74*cc02d7e2SAndroid Build Coastguard Worker$ docker run -it --rm --link node-server:node-server -p 9000:9000 \ 75*cc02d7e2SAndroid Build Coastguard Worker --name fpm grpc-php/fpm 76*cc02d7e2SAndroid Build Coastguard Worker``` 77*cc02d7e2SAndroid Build Coastguard Worker 78*cc02d7e2SAndroid Build Coastguard WorkerThe Nginx part: 79*cc02d7e2SAndroid Build Coastguard Worker 80*cc02d7e2SAndroid Build Coastguard Worker```sh 81*cc02d7e2SAndroid Build Coastguard Worker$ docker run -it --rm -v $(pwd)/nginx.conf:/etc/nginx/conf.d/default.conf:ro \ 82*cc02d7e2SAndroid Build Coastguard Worker --link fpm:fpm -p 80:80 nginx:1.17.4 83*cc02d7e2SAndroid Build Coastguard Worker``` 84*cc02d7e2SAndroid Build Coastguard Worker 85*cc02d7e2SAndroid Build Coastguard Worker 86*cc02d7e2SAndroid Build Coastguard WorkerOpen the browser to `http://localhost`. 87