From e4c47389633a7fd741fadee15e54d6eb3fb09570 Mon Sep 17 00:00:00 2001 From: Stanley Cheung Date: Mon, 21 Sep 2015 16:28:59 -0700 Subject: [PATCH 1/3] php: add examples for apache and nginx --- src/php/README.md | 136 ++++++++++++++++++- src/php/tests/generated_code/math_client.php | 70 ++++++++++ 2 files changed, 203 insertions(+), 3 deletions(-) create mode 100644 src/php/tests/generated_code/math_client.php diff --git a/src/php/README.md b/src/php/README.md index 51322c7526961..f474ff7cabba6 100644 --- a/src/php/README.md +++ b/src/php/README.md @@ -109,15 +109,19 @@ $ make $ sudo make install ``` -In your php.ini file, add the line `extension=grpc.so` to load the extension -at PHP startup. +Add this line to your `php.ini` file, e.g. `/etc/php5/cli/php.ini` + +```sh +extension=grpc.so +``` Install Composer ```sh $ cd grpc/src/php $ curl -sS https://getcomposer.org/installer | php -$ php composer.phar install +$ sudo mv composer.phar /usr/local/bin/composer +$ composer install ``` ## Unit Tests @@ -164,6 +168,132 @@ $ cd grpc/src/php $ ./bin/run_gen_code_test.sh ``` +## Use the gRPC PHP extension with Apache + +Install `apache2`, in addition to `php5` above + +```sh +$ sudo apt-get install apache2 +``` + +Add this line to your `php.ini` file, e.g. `/etc/php5/apache2/php.ini` + +```sh +extension=grpc.so +``` + +Restart apache + +```sh +$ sudo service apache2 restart +``` + +Make sure the Node math server is still running, as above. + +```sh +$ cd grpc/src/node +$ nodejs examples/math_server.js +``` + +Make sure you have run `composer install` to generate the `vendor/autoload.php` file + +```sh +$ composer install +``` + +Make sure you have generated the client stub `math.php` + +```sh +$ ./bin/generate_proto_php.sh +``` + +Copy the `math_client.php` file into your Apache document root, e.g. + +```sh +$ cp tests/generated_code/math_client.php /var/www/html +``` + +You may have to fix the first two lines to point the includes to your installation: + +```php +include 'vendor/autoload.php'; +include 'tests/generated_code/math.php'; +``` + +Connect to `localhost/math_client.php` in your browser, or run this from command line: + +```sh +$ curl localhost/math_client.php +``` + +## Use the gRPC PHP extension with Nginx/PHP-FPM + +Install `nginx` and `php5-fpm`, in addition to `php5` above + +```sh +$ sudo apt-get install nginx php5-fpm +``` + +Add this line to your `php.ini` file, e.g. `/etc/php5/fpm/php.ini` + +```sh +extension=grpc.so +``` + +Uncomment the following lines in your `/etc/nginx/sites-available/default` file: + +``` +location ~ \.php$ { + include snippets/fastcgi-php.conf; + fastcgi_pass unix:/var/run/php5-fpm.sock; +} +``` + +Restart nginx and php-fpm + +```sh +$ sudo service nginx restart +$ sudo service php5-fpm restart +``` + +Make sure the Node math server is still running, as above. + +```sh +$ cd grpc/src/node +$ nodejs examples/math_server.js +``` + +Make sure you have run `composer install` to generate the `vendor/autoload.php` file + +```sh +$ composer install +``` + +Make sure you have generated the client stub `math.php` + +```sh +$ ./bin/generate_proto_php.sh +``` + +Copy the `math_client.php` file into your Nginx document root, e.g. + +```sh +$ cp tests/generated_code/math_client.php /var/www/html +``` + +You may have to fix the first two lines to point the includes to your installation: + +```php +include 'vendor/autoload.php'; +include 'tests/generated_code/math.php'; +``` + +Connect to `localhost/math_client.php` in your browser, or run this from command line: + +```sh +$ curl localhost/math_client.php +``` + [homebrew]:http://brew.sh [gRPC install script]:https://raw.githubusercontent.com/grpc/homebrew-grpc/master/scripts/install [Node]:https://github.com/grpc/grpc/tree/master/src/node/examples diff --git a/src/php/tests/generated_code/math_client.php b/src/php/tests/generated_code/math_client.php new file mode 100644 index 0000000000000..cbf6cd618bbec --- /dev/null +++ b/src/php/tests/generated_code/math_client.php @@ -0,0 +1,70 @@ +\n"); +} + +h$host = "localhost:50051"; +p("Connecting to host: $host"); +$client = new math\MathClient($host, []); +p("Client class: ".get_class($client)); +p(''); + +p("Running unary call test:"); +$dividend = 7; +$divisor = 4; +$div_arg = new math\DivArgs(); +$div_arg->setDividend($dividend); +$div_arg->setDivisor($divisor); +$call = $client->Div($div_arg); +p("Call peer: ".$call->getPeer()); +p("Dividing $dividend by $divisor"); +list($response, $status) = $call->wait(); +p("quotient = ".$response->getQuotient()); +p("remainder = ".$response->getRemainder()); +p(''); + +p("Running server streaming test:"); +$limit = 7; +$fib_arg = new math\FibArgs(); +$fib_arg->setLimit($limit); +$call = $client->Fib($fib_arg); +$result_array = iterator_to_array($call->responses()); +$result = ''; +foreach ($result_array as $num) { + $result .= ' ' . $num->getNum(); +} +p("The first $limit Fibonacci numbers are:".$result); +p(''); + +p("Running client streaming test:"); +$call = $client->Sum(); +for ($i = 0; $i <= $limit; $i++) { + $num = new math\Num(); + $num->setNum($i); + $call->write($num); +} +list($response, $status) = $call->wait(); +p(sprintf("The first %d positive integers sum to: %d", + $limit, $response->getNum())); +p(''); + +p("Running bidi-streaming test:"); +$call = $client->DivMany(); +for ($i = 0; $i < 7; $i++) { + $div_arg = new math\DivArgs(); + $dividend = 2 * $i + 1; + $div_arg->setDividend($dividend); + $divisor = 3; + $div_arg->setDivisor($divisor); + $call->write($div_arg); + p("client writing: $dividend / $divisor"); + $response = $call->read(); + p(sprintf("server writing: quotient = %d, remainder = %d", + $response->getQuotient(), $response->getRemainder())); +} +$call->writesDone(); From e9cfa318a4bf15a0d7881f41693fbf5caa0b6bdd Mon Sep 17 00:00:00 2001 From: Stanley Cheung Date: Tue, 22 Sep 2015 07:53:56 -0700 Subject: [PATCH 2/3] minor fixes --- src/php/tests/generated_code/math_client.php | 42 +++++++++++++++++--- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/src/php/tests/generated_code/math_client.php b/src/php/tests/generated_code/math_client.php index cbf6cd618bbec..7bc78287be80c 100644 --- a/src/php/tests/generated_code/math_client.php +++ b/src/php/tests/generated_code/math_client.php @@ -1,4 +1,36 @@ \n"); } -h$host = "localhost:50051"; +$host = "localhost:50051"; p("Connecting to host: $host"); $client = new math\MathClient($host, []); p("Client class: ".get_class($client)); @@ -36,7 +68,7 @@ function p($line) { $result_array = iterator_to_array($call->responses()); $result = ''; foreach ($result_array as $num) { - $result .= ' ' . $num->getNum(); + $result .= ' '.$num->getNum(); } p("The first $limit Fibonacci numbers are:".$result); p(''); @@ -50,7 +82,7 @@ function p($line) { } list($response, $status) = $call->wait(); p(sprintf("The first %d positive integers sum to: %d", - $limit, $response->getNum())); + $limit, $response->getNum())); p(''); p("Running bidi-streaming test:"); @@ -58,13 +90,13 @@ function p($line) { for ($i = 0; $i < 7; $i++) { $div_arg = new math\DivArgs(); $dividend = 2 * $i + 1; - $div_arg->setDividend($dividend); $divisor = 3; + $div_arg->setDividend($dividend); $div_arg->setDivisor($divisor); $call->write($div_arg); p("client writing: $dividend / $divisor"); $response = $call->read(); p(sprintf("server writing: quotient = %d, remainder = %d", - $response->getQuotient(), $response->getRemainder())); + $response->getQuotient(), $response->getRemainder())); } $call->writesDone(); From 86bfc74a123b4ef78cb896ba2d8c5b1cd4bbdfa3 Mon Sep 17 00:00:00 2001 From: Stanley Cheung Date: Tue, 22 Sep 2015 10:56:54 -0700 Subject: [PATCH 3/3] php: update text to reflect beta --- src/php/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/php/README.md b/src/php/README.md index f474ff7cabba6..a054258782d84 100644 --- a/src/php/README.md +++ b/src/php/README.md @@ -5,7 +5,7 @@ This directory contains source code for PHP implementation of gRPC layered on sh #Status -Alpha : Ready for early adopters +Beta ## Environment @@ -49,7 +49,7 @@ sudo apt-get install libgrpc-dev Install the gRPC PHP extension ```sh -sudo pecl install grpc-alpha +sudo pecl install grpc-beta ``` **Mac OS X:** @@ -96,7 +96,7 @@ $ sudo make install # 'make' should have been run by core grpc Install the gRPC PHP extension ```sh -$ sudo pecl install grpc-alpha +$ sudo pecl install grpc-beta ``` OR