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