xref: /aosp_15_r20/external/protobuf/php/README.md (revision 1b3f573f81763fcece89efc2b6a5209149e44ab8)
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