#Overview
This directory contains source code for PHP implementation of gRPC layered on shared C library.
#Status
GA
Prerequisite:
php
5.5 or above, 7.0 or abovepear
andpecl
phpunit
PEAR:
$ curl -O http://pear.php.net/go-pear.phar
$ sudo php -d detect_unicode=0 go-pear.phar
PHPUnit:
$ wget https://phar.phpunit.de/phpunit-old.phar
$ chmod +x phpunit-old.phar
$ sudo mv phpunit-old.phar /usr/bin/phpunit
Install the gRPC PHP extension
sudo pecl install grpc
This will compile and install the gRPC PHP extension into the standard PHP extension directory. You should be able to run the unit tests, with the PHP extension installed.
To run tests with generated stub code from .proto
files, you will also need the composer
, protoc
and protoc-gen-php
binaries. You can find out how to get these below.
Clone this repository
$ git clone -b $(curl -L http://grpc.io/release) https://github.com/grpc/grpc
Build and install the gRPC C core library
$ cd grpc
$ git pull --recurse-submodules && git submodule update --init --recursive
$ make
$ sudo make install
Compile the gRPC PHP extension
$ cd grpc/src/php/ext/grpc
$ phpize
$ ./configure
$ make
$ sudo make install
Add this line to your php.ini
file, e.g. /etc/php5/cli/php.ini
extension=grpc.so
You will need the source code to run tests
$ git clone -b $(curl -L http://grpc.io/release) https://github.com/grpc/grpc
$ cd grpc
$ git pull --recurse-submodules && git submodule update --init --recursive
Run unit tests
$ cd grpc/src/php
$ ./bin/run_tests.sh
This section specifies the prerequisites for running the generated code tests, as well as how to run the tests themselves.
If you don't have it already, install composer
to pull in some runtime dependencies based on the composer.json
file.
$ curl -sS https://getcomposer.org/installer | php
$ sudo mv composer.phar /usr/local/bin/composer
$ cd grpc/src/php
$ composer install
Again if you don't have it already, you need to install the protobuf compiler protoc
, version 3.0.0+.
If you compiled the gRPC C core library from source above, the protoc
binary should have been installed as well. If it hasn't been installed, you can run the following commands to install it.
$ cd grpc/third_party/protobuf
$ sudo make install # 'make' should have been run by core grpc
Alternatively, you can download protoc
binaries from the protocol buffers Github repository.
You need to install protoc-gen-php
to generate stub class .php
files from service definition .proto
files.
$ git clone https://github.com/stanley-cheung/Protobuf-PHP
$ cd Protobuf-PHP
$ gem install rake ronn
$ rake pear:package version=1.0
$ sudo pear install Protobuf-1.0.tgz
Generate client stub classes from .proto
files
$ cd grpc/src/php
$ ./bin/generate_proto_php.sh
Run a local server serving the math services. Please see Node for how to run an example server.
$ cd grpc
$ npm install
$ node src/node/test/math/math_server.js
Run the generated code tests
$ cd grpc/src/php
$ ./bin/run_gen_code_test.sh
Install apache2
, in addition to php5
above
$ sudo apt-get install apache2
Add this line to your php.ini
file, e.g. /etc/php5/apache2/php.ini
extension=grpc.so
Restart apache
$ sudo service apache2 restart
Make sure the Node math server is still running, as above.
$ cd grpc
$ npm install
$ node src/node/test/math/math_server.js
Make sure you have run composer install
to generate the vendor/autoload.php
file
$ cd grpc/src/php
$ composer install
Make sure you have generated the client stub math.php
$ ./bin/generate_proto_php.sh
Copy the math_client.php
file into your Apache document root, e.g.
$ 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:
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:
$ curl localhost/math_client.php
Install nginx
and php5-fpm
, in addition to php5
above
$ sudo apt-get install nginx php5-fpm
Add this line to your php.ini
file, e.g. /etc/php5/fpm/php.ini
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
$ sudo service nginx restart
$ sudo service php5-fpm restart
Make sure the Node math server is still running, as above.
$ cd grpc
$ npm install
$ node src/node/test/math/math_server.js
Make sure you have run composer install
to generate the vendor/autoload.php
file
$ cd grpc/src/php
$ composer install
Make sure you have generated the client stub math.php
$ ./bin/generate_proto_php.sh
Copy the math_client.php
file into your Nginx document root, e.g.
$ 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:
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:
$ curl localhost/math_client.php