diff --git a/src/php/README.md b/src/php/README.md index e3723cd2faf..0862ceac446 100644 --- a/src/php/README.md +++ b/src/php/README.md @@ -21,7 +21,7 @@ in 2020). ## Install the _grpc_ extension There are two ways to install the `grpc` extension. -* `pecl` +* Via `pecl` * Build from source ### Install from PECL @@ -33,11 +33,11 @@ $ [sudo] pecl install grpc or specific version ```sh -$ [sudo] pecl install grpc-1.25.0 +$ [sudo] pecl install grpc-1.30.0 ``` -Note: for users on CentOS/RHEL 6, unfortunately this step won’t work. -Please follow the instructions below to compile the PECL extension from source. +Please make sure your `gcc` version satisfies the minimum requirement as +specified [here](https://grpc.io/docs/languages/#official-support). ### Install on Windows @@ -47,7 +47,7 @@ You can download the pre-compiled `grpc.dll` extension from the PECL ### Build from source -Clone this repository at the [latest stable release tag](https://github.com/grpc/grpc/releases) +Clone this repository at the [latest stable release tag](https://github.com/grpc/grpc/releases). ```sh $ git clone -b RELEASE_TAG_HERE https://github.com/grpc/grpc @@ -94,10 +94,10 @@ extension=grpc.so In addition to the `grpc` extension, you will need to install the `grpc/grpc` composer package as well. Add this to your project's `composer.json` file. -``` - "require": { - "grpc/grpc": "v1.25.0" - } +```json + "require": { + "grpc/grpc": "~v1.30.0" + } ``` To run tests with generated stub code from `.proto` files, you will also @@ -127,32 +127,18 @@ the version of grpc inside package.xml file. The compatibility between the grpc and protobuf version is listed as table below: -grpc | protobuf ---- | --- -v1.0.0 | 3.0.0(GA) -v1.0.1 | 3.0.2 -v1.1.0 | 3.1.0 -v1.2.0 | 3.2.0 -v1.2.0 | 3.2.0 -v1.3.4 | 3.3.0 -v1.3.5 | 3.2.0 -v1.4.0 | 3.3.0 -v1.6.0 | 3.4.0 -v1.8.0 | 3.5.0 -v1.12.0 | 3.5.2 -v1.13.1 | 3.5.2 -v1.14.2 | 3.5.2 -v1.15.1 | 3.6.1 -v1.16.1 | 3.6.1 -v1.17.2 | 3.6.1 -v1.18.0 | 3.6.1 -v1.19.1 | 3.6.1 -v1.20.1 | 3.7.0 -v1.21.3 | 3.7.0 -v1.22.0 | 3.8.0 -v1.23.1 | 3.8.0 -v1.24.0 | 3.8.0 -v1.25.0 | 3.8.0 +grpc | protobuf | grpc | protobuf | grpc | protobuf +--- | --- | --- | --- | --- | --- +v1.0.0 | 3.0.0(GA) | v1.12.0 | 3.5.2 | v1.22.0 | 3.8.0 +v1.0.1 | 3.0.2 | v1.13.1 | 3.5.2 | v1.23.1 | 3.8.0 +v1.1.0 | 3.1.0 | v1.14.2 | 3.5.2 | v1.24.0 | 3.8.0 +v1.2.0 | 3.2.0 | v1.15.1 | 3.6.1 | v1.25.0 | 3.8.0 +v1.2.0 | 3.2.0 | v1.16.1 | 3.6.1 | v1.26.0 | 3.8.0 +v1.3.4 | 3.3.0 | v1.17.2 | 3.6.1 | v1.27.3 | 3.11.2 +v1.3.5 | 3.2.0 | v1.18.0 | 3.6.1 | v1.28.1 | 3.11.2 +v1.4.0 | 3.3.0 | v1.19.1 | 3.6.1 | v1.29.0 | 3.11.2 +v1.6.0 | 3.4.0 | v1.20.1 | 3.7.0 | v1.30.0 | 3.12.2 +v1.8.0 | 3.5.0 | v1.21.3 | 3.7.0 If `protoc` hasn't been installed, you can download the `protoc` binary from the protocol buffers @@ -190,6 +176,18 @@ $ git submodule update --init $ make grpc_php_plugin ``` +Alternatively, you can also build the `grpc_php_plugin` with `bazel` now: + +```sh +$ bazel build @com_google_protobuf//:protoc +$ bazel build src/compiler:grpc_php_plugin +``` + +The `protoc` binary will be found in +`bazel-bin/external/com_google_protobuf/protoc`. +The `grpc_php_plugin` binary will be found in +`bazel-bin/src/compiler/grpc_php_plugin`. + Plugin may use the new feature of the new protobuf version, thus please also make sure that the protobuf version installed is compatible with the grpc version you build this plugin. @@ -210,7 +208,7 @@ $ [sudo] pecl install protobuf or specific version ``` sh -$ [sudo] pecl install protobuf-3.8.0 +$ [sudo] pecl install protobuf-3.12.2 ``` And add this to your `php.ini` file: @@ -224,10 +222,10 @@ extension=protobuf.so Or require the `google/protobuf` composer package. Add this to your `composer.json` file: -``` - "require": { - "google/protobuf": "^v3.8.0" - } +```json + "require": { + "google/protobuf": "~v3.12.2" + } ``` ### Generate PHP classes from your service definition @@ -280,8 +278,8 @@ by the `./bin/generate_proto_php.sh` script. ### Run test server -Run a local server serving the math services. Please see [Node][] for how to -run an example server. +Run a local server serving the `Math` +[service](https://github.com/grpc/grpc/blob/master/src/proto/math/math.proto#L42). ```sh $ cd grpc/src/php/tests/generated_code @@ -312,7 +310,7 @@ end-to-end example. Here's how you can specify SSL credentials when creating your PHP client: -``` +```php $client = new Helloworld\GreeterClient('localhost:50051', [ 'credentials' => Grpc\ChannelCredentials::createSsl( file_get_contents('')) @@ -337,16 +335,27 @@ all possible values of the `grpc.grpc.trace` option, please check ``` grpc.grpc_verbosity=debug -grpc.grpc_trace=all,-timer_check +grpc.grpc_trace=all,-polling,-polling_api,-pollable_refcount,-timer,-timer_check grpc.log_filename=/var/log/grpc.log ``` +> Make sure the log file above is writable, by doing the following: +> ``` +> $ sudo touch /var/log/grpc.log +> $ sudo chmod 666 /var/log/grpc.log +> ``` +> Note: The log file does grow pretty quickly depending on how much logs are +> being printed out. Make sure you have other mechanisms (perhaps another +> cronjob) to zero out the log file from time to time, +> e.g. `cp /dev/null /var/log/grpc.log`, or turn these off when logs or tracing +> are not necessary for debugging purposes. + ### User agent string You can customize the user agent string for your gRPC PHP client by specifying this `grpc.primary_user_agent` option when constructing your PHP client: -``` +```php $client = new Helloworld\GreeterClient('localhost:50051', [ 'credentials' => Grpc\ChannelCredentials::createInsecure(), 'grpc.primary_user_agent' => 'my-user-agent-identifier', @@ -358,7 +367,7 @@ $client = new Helloworld\GreeterClient('localhost:50051', [ To change the default maximum message size, specify this `grpc.max_receive_message_length` option when constructing your PHP client: -``` +```php $client = new Helloworld\GreeterClient('localhost:50051', [ 'credentials' => Grpc\ChannelCredentials::createInsecure(), 'grpc.max_receive_message_length' => 8*1024*1024, @@ -369,26 +378,28 @@ $client = new Helloworld\GreeterClient('localhost:50051', [ You can customize the compression behavior on the client side, by specifying the following options when constructing your PHP client. +```php +$client = new Helloworld\GreeterClient('localhost:50051', [ + 'credentials' => Grpc\ChannelCredentials::createInsecure(), + 'grpc.default_compression_algorithm' => 2, + 'grpc.default_compression_level' => 2, +]); ``` -Possible values for grpc.default_compression_algorithm: -0 - No compression -1 - Compress with DEFLATE algorithm -2 - Compress with GZIP algorithm -3 - Stream compression with GZIP algorithm + +Possible values for `grpc.default_compression_algorithm`: + ``` +0: No compression +1: Compress with DEFLATE algorithm +2: Compress with GZIP algorithm +3: Stream compression with GZIP algorithm ``` -Possible values for grpc.default_compression_level: -0 - None -1 - Low level -2 - Medium level -3 - High level + +Possible values for `grpc.default_compression_level`: + ``` -Here's an example on how you can put them all together: +0: None +1: Low level +2: Medium level +3: High level ``` -$client = new Helloworld\GreeterClient('localhost:50051', [ - 'credentials' => Grpc\ChannelCredentials::createInsecure(), - 'grpc.default_compression_algorithm' => 2, - 'grpc.default_compression_level' => 2, -]); - -[Node]:https://github.com/grpc/grpc/tree/master/src/node/examples