2015-05-21 08:12:48 +08:00
|
|
|
# Contributing to PHP
|
|
|
|
|
|
|
|
Anybody who programs in PHP can be a contributing member of the community that
|
|
|
|
develops and deploys it; the task of deploying PHP, documentation and
|
|
|
|
associated websites is a never ending one. With every release, or release
|
|
|
|
candidate comes a wave of work, which takes a lot of organization and
|
|
|
|
co-ordination.
|
|
|
|
|
|
|
|
## Pull requests
|
|
|
|
|
|
|
|
PHP welcomes pull requests to [add tests](#writing-tests), fix bugs and to
|
|
|
|
implement RFCs. Please be sure to include tests as appropriate!
|
|
|
|
|
2017-04-02 19:45:08 +08:00
|
|
|
If you are fixing a bug, then please submit your PR against the lowest actively
|
|
|
|
supported branch of PHP that the bug affects (only green branches on
|
|
|
|
[the supported version page](http://php.net/supported-versions.php) are supported).
|
2018-01-06 10:49:52 +08:00
|
|
|
For example, at the time of writing in early-2018, the lowest supported version is
|
|
|
|
PHP 7.1, which corresponds to the `PHP-7.1` branch in Git. Please also make sure you
|
2017-04-02 19:45:08 +08:00
|
|
|
add a link to the PR in the bug on [the bug tracker](https://bugs.php.net/).
|
|
|
|
|
|
|
|
Pull requests implementing RFCs should be submitted against `master`.
|
|
|
|
|
|
|
|
Pull requests should *never* be submitted against `PHP-x.y.z` branches, as
|
|
|
|
these are only used for release management.
|
|
|
|
|
|
|
|
If your pull request exhibits conflicts with the base branch, please resolve them
|
|
|
|
by using `git rebase` instead of `git merge`.
|
2015-05-21 08:12:48 +08:00
|
|
|
|
|
|
|
## Filing bugs
|
|
|
|
|
|
|
|
Bugs can be filed on the [PHP bug tracker](https://bugs.php.net/). If this is
|
|
|
|
the first time you've filed a bug, we suggest reading the
|
|
|
|
[guide to reporting a bug](https://bugs.php.net/how-to-report.php).
|
|
|
|
|
|
|
|
Where possible, please include a self-contained reproduction case!
|
|
|
|
|
|
|
|
## Feature requests
|
|
|
|
|
|
|
|
Feature requests are generally submitted in the form of
|
|
|
|
[Requests for Comment](https://wiki.php.net/rfc/howto), ideally accompanied by
|
|
|
|
[pull requests](#pull-requests). You can find the extremely large list of RFCs
|
|
|
|
that have been previously considered on the
|
|
|
|
[PHP Wiki](https://wiki.php.net/rfc).
|
|
|
|
|
|
|
|
You may want to read
|
|
|
|
[The Mysterious PHP RFC Process](https://blogs.oracle.com/opal/entry/the_mysterious_php_rfc_process)
|
|
|
|
for additional notes on the best way to approach submitting an RFC.
|
|
|
|
|
|
|
|
## Writing tests
|
|
|
|
|
|
|
|
We love getting new tests! PHP is a huge project and improving code coverage is
|
|
|
|
a huge win for every PHP user.
|
|
|
|
|
|
|
|
[Our QA site includes a page detailing how to write test cases.](http://qa.php.net/write-test.php)
|
|
|
|
Please note that the section on submitting pull requests is outdated: in
|
|
|
|
addition to the process listed there, you can also
|
|
|
|
[submit pull requests](#pull-requests).
|
|
|
|
|
2015-05-21 08:26:20 +08:00
|
|
|
## Writing documentation
|
|
|
|
|
|
|
|
There are two ways to contribute to the PHP manual. You can edit the manual and
|
|
|
|
send patches anonymously via [the online editor](https://edit.php.net/), or you
|
|
|
|
can check the XML source out from Subversion and edit that and build it
|
|
|
|
[per the instructions on the documentation site](http://doc.php.net/tutorial/).
|
|
|
|
Patches created that way should be sent to the
|
|
|
|
[documentation mailing list](mailto:phpdoc@lists.php.net).
|
|
|
|
|
2015-05-21 08:12:48 +08:00
|
|
|
## Getting help
|
|
|
|
|
|
|
|
If you are having trouble contributing to PHP, or just want to talk to a human
|
|
|
|
about what you're working on, you can contact us via the
|
2015-05-21 08:26:20 +08:00
|
|
|
[internals mailing list](mailto:internals@lists.php.net), or the
|
|
|
|
[documentation mailing list](mailto:phpdoc@lists.php.net) for documentation
|
|
|
|
issues.
|
2015-05-21 08:12:48 +08:00
|
|
|
|
|
|
|
Although not a formal channel, you can also find a number of core developers on
|
2015-05-21 08:26:20 +08:00
|
|
|
the #php.pecl channel on [EFnet](http://www.efnet.org/). Similarly, many
|
|
|
|
documentation writers can be found on #php.doc.
|
2018-09-15 23:26:02 +08:00
|
|
|
|
|
|
|
## PHP source code directory structure
|
|
|
|
|
|
|
|
PHP source code also includes several files generated during development and
|
|
|
|
several parts where maintenance is happening upstream in their respective
|
|
|
|
locations.
|
|
|
|
|
|
|
|
```bash
|
|
|
|
<php-src>/
|
|
|
|
├─ .git/ # Git configuration and source directory
|
|
|
|
└─ TSRM/ # Thread Safe Resource Manager
|
|
|
|
└─ m4/ # https://github.com/autoconf-archive/autoconf-archive
|
|
|
|
└─ ax_func_which_gethostbyname_r.m4
|
|
|
|
└─ ...
|
|
|
|
└─ Zend/ # Zend Engine
|
|
|
|
├─ zend_language_scanner.c # Generated by re2c
|
|
|
|
├─ zend_language_scanner_defs.h # Generated by re2c
|
|
|
|
├─ zend_ini_scanner.c # Generated by re2c
|
|
|
|
├─ zend_ini_scanner_defs.h # Generated by re2c
|
|
|
|
├─ zend_vm_execute.h # Generated by `Zend/zend_vm_gen.php`
|
|
|
|
├─ zend_vm_opcodes.c # Generated by `Zend/zend_vm_gen.php`
|
|
|
|
├─ zend_vm_opcodes.h # Generated by `Zend/zend_vm_gen.php`
|
|
|
|
└─ ...
|
|
|
|
├─ appveyor/ # Appveyor CI service files
|
|
|
|
└─ build/ # *nix build system files
|
|
|
|
├─ ax_check_compile_flag.m4 # https://github.com/autoconf-archive/autoconf-archive
|
|
|
|
├─ ax_gcc_func_attribute.m4 # https://github.com/autoconf-archive/autoconf-archive
|
|
|
|
├─ libtool.m4 # https://git.savannah.gnu.org/cgit/libtool.git
|
|
|
|
├─ shtool # https://www.gnu.org/software/shtool/
|
|
|
|
└─ ...
|
|
|
|
└─ ext/ # PHP core extensions
|
|
|
|
└─ bcmath/
|
|
|
|
├─ libbcmath/ # Forked and maintained in php-src
|
|
|
|
└─ ...
|
|
|
|
└─ curl/
|
|
|
|
├─ sync-constants.php # The curl symbols checker
|
|
|
|
└─ ...
|
|
|
|
└─ date/
|
|
|
|
└─ lib/ # Bundled datetime library https://github.com/derickr/timelib
|
|
|
|
├─ parse_date.c # Generated by re2c 0.15.3
|
|
|
|
├─ parse_iso_intervals.c # Generated by re2c 0.15.3
|
|
|
|
└─ ...
|
|
|
|
└─ ...
|
|
|
|
└─ fileinfo/
|
|
|
|
├─ libmagic/ # Modified libmagic https://github.com/file/file
|
|
|
|
├─ data_file.c # Generated by `ext/fileinfo/create_data_file.php`
|
|
|
|
├─ libmagic.patch # Modifications patch from upstream libmagic
|
|
|
|
├─ magicdata.patch # Modifications patch from upstream libmagic
|
|
|
|
└─ ...
|
|
|
|
└─ gd/
|
|
|
|
├─ libgd/ # Bundled and modified GD library https://github.com/libgd/libgd
|
|
|
|
└─ ...
|
|
|
|
└─ json/
|
|
|
|
├─ json_parser.tab.c # Generated by bison
|
|
|
|
├─ json_parser.tab.h # Generated by bison
|
|
|
|
├─ json_scanner.c # Generated by re2c
|
|
|
|
├─ php_json_scanner_defs.h # Generated by re2c
|
|
|
|
└─ ...
|
|
|
|
└─ mbstring/
|
|
|
|
├─ libmbfl/ # Forked and maintained in php-src
|
|
|
|
├─ oniguruma/ # Bundled https://github.com/kkos/oniguruma
|
|
|
|
├─ oniguruma.patch # Modifications patch from upstream oniguruma
|
|
|
|
├─ unicode_data.h # Generated by `ext/mbstring/ucgendat/ucgendat.php`
|
|
|
|
└─ ...
|
|
|
|
└─ pcre/
|
|
|
|
├─ pcre2lib/ # https://www.pcre.org/
|
|
|
|
└─ ...
|
|
|
|
└─ pdo/
|
|
|
|
├─ pdo_sql_parser.c # Generated by re2c
|
|
|
|
└─ ...
|
|
|
|
└─ phar/
|
|
|
|
├─ phar_path_check.c # Generated by re2c
|
|
|
|
└─ ...
|
|
|
|
└─ skeleton/ # Skeleton for developing new extensions with `ext/ext_skel.php`
|
|
|
|
└─ ...
|
|
|
|
└─ sqlite3/
|
|
|
|
├─ libsqlite/ # https://www.sqlite.org mirror: https://github.com/mackyle/sqlite
|
|
|
|
└─ ...
|
|
|
|
└─ standard/
|
|
|
|
└─ html_tables/
|
|
|
|
├─ mappings/ # https://www.unicode.org/Public/MAPPINGS/
|
|
|
|
└─ ...
|
|
|
|
├─ credits_ext.h # Generated by `scripts/dev/credits`
|
|
|
|
├─ credits_sapi.h # Generated by `scripts/dev/credits`
|
|
|
|
├─ html_tables.h # Generated by `ext/standard/html_tables/html_table_gen.php`
|
|
|
|
├─ url_scanner_ex.c # Generated by re2c
|
|
|
|
├─ var_unserializer.c # Generated by re2c
|
|
|
|
└─ ...
|
|
|
|
└─ tokenizer/
|
|
|
|
├─ tokenizer_data.c # Generated by `ext/tokenizer/tokenizer_data_gen.sh`
|
|
|
|
└─ ...
|
|
|
|
└─ xmlrpc/
|
|
|
|
├─ libxmlrpc/ # Forked and maintained in php-src
|
|
|
|
└─ ...
|
|
|
|
└─ zend_test # For testing internal APIs. Not needed for regular builds.
|
|
|
|
└─ ...
|
|
|
|
└─ zip/ # Bundled https://github.com/pierrejoye/php_zip
|
|
|
|
└─ ...
|
|
|
|
└─ ...
|
|
|
|
└─ main/ # Binding that ties extensions, SAPIs, and engine together
|
|
|
|
├─ streams/ # Streams layer subsystem
|
|
|
|
├─ php_version.h # Generated by release managers using `configure`
|
|
|
|
└─ ...
|
|
|
|
├─ pear/ # PEAR installation
|
|
|
|
└─ sapi/ # PHP SAPI modules
|
|
|
|
└─ cli/
|
|
|
|
├─ mime_type_map.h # Generated by `sapi/cli/generate_mime_type_map.php`
|
|
|
|
└─ ...
|
|
|
|
└─ phpdbg/
|
|
|
|
├─ phpdbg_lexer.c # Generated by re2c
|
|
|
|
├─ phpdbg_parser.c # Generated by bison
|
|
|
|
├─ phpdbg_parser.h # Generated by bison
|
|
|
|
└─ ...
|
|
|
|
└─ ...
|
|
|
|
├─ scripts/ # php-config, phpize and internal development scripts
|
|
|
|
├─ tests/ # Core features tests
|
|
|
|
├─ travis/ # Travis CI service files
|
|
|
|
└─ win32/ # Windows build system files
|
|
|
|
├─ cp_enc_map.c # Generated by `win32/cp_enc_map_gen.exe`
|
|
|
|
└─ ...
|
|
|
|
├─ config.guess # https://git.savannah.gnu.org/cgit/config.git
|
|
|
|
├─ config.sub # https://git.savannah.gnu.org/cgit/config.git
|
|
|
|
├─ ltmain.sh # https://git.savannah.gnu.org/cgit/libtool.git
|
|
|
|
└─ ...
|
|
|
|
```
|