1*6777b538SAndroid Build Coastguard WorkerThis directory contains the Protocol Buffers runtime implementation via both a 2*6777b538SAndroid Build Coastguard Workerpure PHP package and a native c extension. The pure PHP package is intended to 3*6777b538SAndroid Build Coastguard Workerprovide usability to wider range of PHP platforms, while the c extension is 4*6777b538SAndroid Build Coastguard Workerintended to provide higher performance. Both implementations provide the same 5*6777b538SAndroid Build Coastguard Workerruntime APIs and share the same generated code. Users don’t need to re-generate 6*6777b538SAndroid Build Coastguard Workercode for the same proto definition when they want to switch the implementation 7*6777b538SAndroid Build Coastguard Workerlater. 8*6777b538SAndroid Build Coastguard Worker 9*6777b538SAndroid Build Coastguard WorkerBoth implementations make use of generated PHP code that defines message and 10*6777b538SAndroid Build Coastguard Workerenum types in PHP. We strongly recommend using protoc's PHP generation support 11*6777b538SAndroid Build Coastguard Workerwith .proto files. The build process in this directory only installs the 12*6777b538SAndroid Build Coastguard Workerextension/package; you need to install protoc as well to have PHP code 13*6777b538SAndroid Build Coastguard Workergeneration functionality. 14*6777b538SAndroid Build Coastguard Worker 15*6777b538SAndroid Build Coastguard Worker## Requirements 16*6777b538SAndroid Build Coastguard Worker 17*6777b538SAndroid Build Coastguard WorkerTo use PHP runtime library requires: 18*6777b538SAndroid Build Coastguard Worker 19*6777b538SAndroid Build Coastguard Worker- C extension: PHP 7.x, 8.0 20*6777b538SAndroid Build Coastguard Worker- [PHP package](http://php.net/downloads.php): PHP 5.5, 5.6, 7.x, or 8.0. 21*6777b538SAndroid Build Coastguard Worker 22*6777b538SAndroid Build Coastguard Worker## Installation 23*6777b538SAndroid Build Coastguard Worker 24*6777b538SAndroid Build Coastguard Worker### C Extension 25*6777b538SAndroid Build Coastguard Worker 26*6777b538SAndroid Build Coastguard Worker#### Prerequirements 27*6777b538SAndroid Build Coastguard Worker 28*6777b538SAndroid Build Coastguard WorkerTo install the c extension, the following tools are needed: 29*6777b538SAndroid Build Coastguard Worker* autoconf 30*6777b538SAndroid Build Coastguard Worker* automake 31*6777b538SAndroid Build Coastguard Worker* libtool 32*6777b538SAndroid Build Coastguard Worker* make 33*6777b538SAndroid Build Coastguard Worker* gcc 34*6777b538SAndroid Build Coastguard Worker* pear 35*6777b538SAndroid Build Coastguard Worker* pecl 36*6777b538SAndroid Build Coastguard Worker 37*6777b538SAndroid Build Coastguard WorkerOn Ubuntu, you can install them with: 38*6777b538SAndroid Build Coastguard Worker``` 39*6777b538SAndroid Build Coastguard Workersudo apt-get install -y php-pear php5-dev autoconf automake libtool make gcc 40*6777b538SAndroid Build Coastguard Worker``` 41*6777b538SAndroid Build Coastguard WorkerOn other platforms, please use the corresponding package managing tool to 42*6777b538SAndroid Build Coastguard Workerinstall them before proceeding. 43*6777b538SAndroid Build Coastguard Worker 44*6777b538SAndroid Build Coastguard Worker#### Installation from Source (Building extension) 45*6777b538SAndroid Build Coastguard Worker 46*6777b538SAndroid Build Coastguard WorkerTo build the c extension, run the following command: 47*6777b538SAndroid Build Coastguard Worker``` 48*6777b538SAndroid Build Coastguard Workercd ext/google/protobuf 49*6777b538SAndroid Build Coastguard Workerpear package 50*6777b538SAndroid Build Coastguard Workersudo pecl install protobuf-{VERSION}.tgz 51*6777b538SAndroid Build Coastguard Worker``` 52*6777b538SAndroid Build Coastguard Worker 53*6777b538SAndroid Build Coastguard Worker#### Installation from PECL 54*6777b538SAndroid Build Coastguard Worker 55*6777b538SAndroid Build Coastguard WorkerWhen we release a version of Protocol Buffers, we will upload the extension to 56*6777b538SAndroid Build Coastguard Worker[PECL](https://pecl.php.net/). To use this pre-packaged extension, simply 57*6777b538SAndroid Build Coastguard Workerinstall it as you would any other extension: 58*6777b538SAndroid Build Coastguard Worker 59*6777b538SAndroid Build Coastguard Worker``` 60*6777b538SAndroid Build Coastguard Workersudo pecl install protobuf-{VERSION} 61*6777b538SAndroid Build Coastguard Worker``` 62*6777b538SAndroid Build Coastguard Worker 63*6777b538SAndroid Build Coastguard Worker### PHP Package 64*6777b538SAndroid Build Coastguard Worker 65*6777b538SAndroid Build Coastguard Worker#### Installation from composer 66*6777b538SAndroid Build Coastguard Worker 67*6777b538SAndroid Build Coastguard WorkerSimply add "google/protobuf" to the 'require' section of composer.json in your 68*6777b538SAndroid Build Coastguard Workerproject. 69*6777b538SAndroid Build Coastguard Worker 70*6777b538SAndroid Build Coastguard Worker### Protoc 71*6777b538SAndroid Build Coastguard Worker 72*6777b538SAndroid Build Coastguard WorkerOnce the extension or package is installed, if you wish to generate PHP code 73*6777b538SAndroid Build Coastguard Workerfrom a `.proto` file, you will also want to install the Protocol Buffers 74*6777b538SAndroid Build Coastguard Workercompiler (protoc), as described in this repository's main `README` file. The 75*6777b538SAndroid Build Coastguard Workerversion of `protoc` included in the latest release supports the `--php_out` 76*6777b538SAndroid Build Coastguard Workeroption to generate PHP code: 77*6777b538SAndroid Build Coastguard Worker``` 78*6777b538SAndroid Build Coastguard Workerprotoc --php_out=out_dir test.proto 79*6777b538SAndroid Build Coastguard Worker``` 80*6777b538SAndroid Build Coastguard Worker 81*6777b538SAndroid Build Coastguard Worker## Usage 82*6777b538SAndroid Build Coastguard Worker 83*6777b538SAndroid Build Coastguard WorkerFor generated code: 84*6777b538SAndroid Build Coastguard Worker https://developers.google.com/protocol-buffers/docs/reference/php-generated 85*6777b538SAndroid Build Coastguard Worker 86*6777b538SAndroid Build Coastguard WorkerKnown Issues 87*6777b538SAndroid Build Coastguard Worker------------ 88*6777b538SAndroid Build Coastguard Worker 89*6777b538SAndroid Build Coastguard Worker* Missing native support for well known types. 90*6777b538SAndroid Build Coastguard Worker* Missing support for proto2. 91*6777b538SAndroid Build Coastguard Worker* No API provided for clear/copy messages. 92*6777b538SAndroid Build Coastguard Worker* No API provided for encoding/decoding with stream. 93*6777b538SAndroid Build Coastguard Worker* Map fields may not be garbage-collected if there is cycle reference. 94*6777b538SAndroid Build Coastguard Worker* No debug information for messages in c extension. 95*6777b538SAndroid Build Coastguard Worker* HHVM not tested. 96*6777b538SAndroid Build Coastguard Worker* C extension not tested on windows, mac, php 7.0. 97*6777b538SAndroid Build Coastguard Worker* Message name cannot be Empty. 98*6777b538SAndroid Build Coastguard Worker 99*6777b538SAndroid Build Coastguard Worker## Development 100*6777b538SAndroid Build Coastguard Worker 101*6777b538SAndroid Build Coastguard Worker### Docker Image 102*6777b538SAndroid Build Coastguard Worker 103*6777b538SAndroid Build Coastguard WorkerWe provide a docker image for php development, which is also used in our automatic tests: 104*6777b538SAndroid Build Coastguard Worker``` 105*6777b538SAndroid Build Coastguard Workerdocker run --security-opt seccomp=unconfined -it protobuftesting/php_8dbe419c6df1a8b3af0ae3a267c112efb436b45c 106*6777b538SAndroid Build Coastguard Worker``` 107*6777b538SAndroid Build Coastguard Worker 108*6777b538SAndroid Build Coastguard Worker### Test Native PHP 109*6777b538SAndroid Build Coastguard Worker 110*6777b538SAndroid Build Coastguard Worker``` 111*6777b538SAndroid Build Coastguard Worker# Download protobuf 112*6777b538SAndroid Build Coastguard Workergit clone https://github.com/protocolbuffers/protobuf.git 113*6777b538SAndroid Build Coastguard Workercd protobuf 114*6777b538SAndroid Build Coastguard Worker 115*6777b538SAndroid Build Coastguard Worker# Build protoc 116*6777b538SAndroid Build Coastguard Worker./autogen.sh 117*6777b538SAndroid Build Coastguard Worker./configure 118*6777b538SAndroid Build Coastguard Workermake -j4 119*6777b538SAndroid Build Coastguard Worker 120*6777b538SAndroid Build Coastguard Worker# Test native php 121*6777b538SAndroid Build Coastguard Workercd php 122*6777b538SAndroid Build Coastguard Workercomposer install 123*6777b538SAndroid Build Coastguard Workercomposer test 124*6777b538SAndroid Build Coastguard Worker``` 125*6777b538SAndroid Build Coastguard Worker 126*6777b538SAndroid Build Coastguard Worker### Test C Extension 127*6777b538SAndroid Build Coastguard Worker 128*6777b538SAndroid Build Coastguard WorkerAfter you have finished testing the native php, you can test the c extension: 129*6777b538SAndroid Build Coastguard Worker``` 130*6777b538SAndroid Build Coastguard Workercd tests 131*6777b538SAndroid Build Coastguard Worker./test.sh 5.6 # The php runtime version. 132*6777b538SAndroid Build Coastguard Worker # We provide 5.5, 5.5-zts, 5.6, 5.6-zts, 7.0, 7.0-zts, 7.1, 7.1-zts, 7.2, 7.2-zts, 7.3 and 7.3-zts 133*6777b538SAndroid Build Coastguard Worker # ls /usr/local for more details 134*6777b538SAndroid Build Coastguard Worker``` 135*6777b538SAndroid Build Coastguard Worker 136*6777b538SAndroid Build Coastguard WorkerIf you want to use gdb to debug the c extension, you can do: 137*6777b538SAndroid Build Coastguard Worker``` 138*6777b538SAndroid Build Coastguard Worker./gdb_test.sh 139*6777b538SAndroid Build Coastguard Worker``` 140