xref: /aosp_15_r20/external/cronet/third_party/protobuf/php/README.md (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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