mirror of
https://github.com/crazywhalecc/static-php-cli.git
synced 2026-07-08 09:25:35 +08:00
update README
This commit is contained in:
255
README-en.md
255
README-en.md
@@ -1,180 +1,121 @@
|
||||
# static-php-cli
|
||||
Compile A Statically Linked PHP With Swoole and other Extensions.
|
||||
|
||||
Compile A Statically Linked PHP With Swoole and other Popular Extensions.
|
||||
Compile a purely static PHP binary file with various extensions to make PHP-cli applications more portable!
|
||||
|
||||
Compile A Single Binary With PHP Code.
|
||||
You can also use the micro binary file to package PHP source code and binary files into one for distribution!
|
||||
|
||||
**If you are intrested in this project, don't miss this discussion: <https://github.com/crazywhalecc/static-php-cli/discussions/29>**
|
||||
|
||||
[]()
|
||||

|
||||
Note: only support cli SAPI, not support fpm, cgi.
|
||||
|
||||
## Compilation Requirements
|
||||
|
||||
- Supporting architecture: `x86_64`, `arm64(aarch64)`, `armv7(armv7l)`
|
||||
- Docker required (or alpine linux 3.13+)
|
||||
- PHP version from 7.2 to 8.1
|
||||
- Micro Package requires PHP >= 8.0
|
||||
Yes, this project is written in PHP, pretty funny.
|
||||
But php-static-cli only requires an environment above PHP 8.0.
|
||||
|
||||
## Runtime Requirements
|
||||
- Linux
|
||||
- Supported arch: aarch64, amd64
|
||||
- Supported distributions: alpine, ubuntu, centos
|
||||
- Requirements: (TODO)
|
||||
- macOS
|
||||
- Supported arch: arm64, x86_64
|
||||
- Requirements: make, bison, flex, pkg-config, git, autoconf, automake, tar, unzip, xz, gzip, bzip2, cmake
|
||||
- Windows
|
||||
- Supported arch: x86_64
|
||||
- Requirements: (TODO)
|
||||
- PHP
|
||||
- Supported version: 8.0, 8.1, 8.2
|
||||
|
||||
Linux
|
||||
## Usage (WIP)
|
||||
|
||||
## Usage
|
||||
After stable release for this project, a single phar and single binary for this tool will be published.
|
||||
|
||||
1. Directly download static binary from this link or [Actions uploaded artifacts](https://github.com/crazywhalecc/static-php-cli/actions).
|
||||
|
||||
<https://dl.zhamao.xin/php-bin/file/>
|
||||
|
||||
2. Use fast install script `install-runtime.sh` to download static php and composer distribution into `runtime/` directory
|
||||
|
||||
But this script has some Chinese comments and prompts, if you cannot understand or have to use it in English, I will make an pure international version! :)
|
||||
And currently you may need to clone this branch and edit GitHub Action to build.
|
||||
|
||||
```bash
|
||||
bash -c "`curl -fsSL https://raw.githubusercontent.com/crazywhalecc/static-php-cli/master/install-runtime.sh`"
|
||||
chmod +x static-php-cli
|
||||
# 拉取所有依赖库
|
||||
./static-php-cli fetch --all
|
||||
# 构建包含 bcmath 扩展的 php-cli 和 micro.sfx
|
||||
./static-php-cli build "bcmath" "" --build-all
|
||||
```
|
||||
|
||||
## Packing PHP Code into a Static Binary
|
||||
## Current Status
|
||||
|
||||
From v1.5.0, we support packing PHP code into a static binary. You can pack your PHP code into a static binary by micro.
|
||||
- [X] Basic CLI framework (by symfony/console)
|
||||
- [ ] Linux support
|
||||
- [ ] macOS support
|
||||
- [X] Exception handler
|
||||
- [ ] Windows support
|
||||
- [ ] PHP 7.4 support
|
||||
|
||||
You can directly download `micro-` prefix file, untar it and you will get file `micro.sfx`.
|
||||
## Supported Extensions
|
||||
|
||||
Here's a simple example to use it:
|
||||
> - yes: supported and tested
|
||||
> - untested: supported but not tested
|
||||
> - empty: not supported yet
|
||||
|
||||
```bash
|
||||
echo "<?php echo 'Hello world' . PHP_EOL;" > code.php
|
||||
cat micro.sfx code.php > single-app && chmod +x single-app
|
||||
./single-app
|
||||
| | Linux | macOS | Windows |
|
||||
|------------|-------|----------|---------|
|
||||
| bcmath | | yes | |
|
||||
| calendar | | | |`
|
||||
| ctype | | | |
|
||||
| curl | | | |
|
||||
| date | | yes | |
|
||||
| dom | | | |
|
||||
| event | | | |
|
||||
| exif | | | |
|
||||
| filter | | | |
|
||||
| fileinfo | | | |
|
||||
| ftp | | | |
|
||||
| gd | | untested | |
|
||||
| hash | | yes | |
|
||||
| iconv | | | |
|
||||
| inotify | | | |
|
||||
| json | | yes | |
|
||||
| libxml | | | |
|
||||
| mbstring | | | |
|
||||
| mongodb | | | |
|
||||
| mysqli | | | |
|
||||
| mysqlnd | | | |
|
||||
| openssl | | yes | |
|
||||
| pcntl | | untested | |
|
||||
| pcre | | yes | |
|
||||
| pdo | | yes | |
|
||||
| pdo_mysql | | | |
|
||||
| pdo_sqlite | | yes | |
|
||||
| pdo_pgsql | | | |
|
||||
| phar | | | |
|
||||
| posix | | | |
|
||||
| protobuf | | | |
|
||||
| readline | | | |
|
||||
| redis | | | |
|
||||
| Reflection | | yes | |
|
||||
| shmop | | | |
|
||||
| simplexml | | | |
|
||||
| soap | | | |
|
||||
| sockets | | | |
|
||||
| sqlite3 | | untested | |
|
||||
| swow | | | |
|
||||
| swoole | | yes | |
|
||||
| tokenizer | | | |
|
||||
| xml | | | |
|
||||
| xmlreader | | | |
|
||||
| xmlwriter | | | |
|
||||
| zip | | | |
|
||||
| zlib | | | |
|
||||
|
||||
# If packing phar into a static binary, just change code.php to your phar path.
|
||||
```
|
||||
> Note: It means that your PHP code won't be compiled and you can't protect your source code by using micro!
|
||||
>
|
||||
> If you are looking for compiling PHP code or encrypting code, here's not your solution.
|
||||
>
|
||||
> Special thanks: <https://github.com/dixyes/phpmicro>
|
||||
## Open-Source LICENSE
|
||||
|
||||
## Compiling
|
||||
This project is based on the tradition of using the MIT License for old versions,
|
||||
while the new version references source code from some other projects.
|
||||
Special thanks to:
|
||||
|
||||
Here's help command to compile it yourself:
|
||||
- dixyes/lwmbs (Mulun Permissive License)
|
||||
- swoole/swoole-cli (Apache 2.0 LICENSE+SWOOLE-CLI LICENSE)
|
||||
-
|
||||
Due to the special nature of this project,
|
||||
many other open source projects such as curl and protobuf will be used during the project compilation process,
|
||||
and they all have their own open source licenses.
|
||||
|
||||
```bash
|
||||
git clone https://github.com/crazywhalecc/static-php-cli.git
|
||||
cd static-php-cli/docker
|
||||
docker build -t static-php . --build-arg USE_BACKUP_ADDRESS=yes
|
||||
# Making a directory to put binary files
|
||||
mkdir dist
|
||||
# It will ask you for PHP version, extensions, and compile static binaries
|
||||
docker run --rm -v $(pwd)/dist:/dist/ -it static-php build-php
|
||||
```
|
||||
|
||||
After compilation you can use command to get static php binary file.
|
||||
|
||||
```bash
|
||||
cd dist
|
||||
file ./php
|
||||
```
|
||||
|
||||
If you don't want to use docker, a single script for compiling in **Alpine Linux**:
|
||||
|
||||
```bash
|
||||
cd docker
|
||||
# Change PHP Version
|
||||
export VER_PHP="8.1.7"
|
||||
# Use Original download link (Default is China mainland mirror link, for others please use 'yes' for original link)
|
||||
export USE_BACKUP="yes"
|
||||
./fast-compiler.sh
|
||||
```
|
||||
|
||||
To customize PHP extensions, edit `docker/extensions.txt` file, and rules below:
|
||||
- Use `^` as deselect, to mark not install. Use `#` as comments.
|
||||
- extensions name uses lower case, and default file contains all supported extensions, if u need other extensions, consider write an Issue
|
||||
|
||||
## Supported PHP extensions
|
||||
| Support | PHP Ext Name | Version | Comments |
|
||||
| ------- | ------------ | ------- | ---------------------------------------- |
|
||||
| yes | bcmath | * | |
|
||||
| yes | calendar | * | |
|
||||
| yes | ctype | * | |
|
||||
| yes | curl | * | |
|
||||
| yes | dom | * | |
|
||||
| yes | event | >=3.0.8 | author's bitbucket version, not pecl |
|
||||
| yes | exif | * | |
|
||||
| yes | filter | * | |
|
||||
| yes | fileinfo | * | |
|
||||
| yes | gd | * | |
|
||||
| yes | hash | * | |
|
||||
| yes | iconv | * | |
|
||||
| yes | inotify | 3.0.0 | |
|
||||
| yes | json | * | |
|
||||
| yes | libxml | * | |
|
||||
| yes | mbstring | * | |
|
||||
| yes | mongodb | >=1.9.1 | not tested |
|
||||
| | mysqli | | |
|
||||
| yes | mysqlnd | * | |
|
||||
| yes | openssl | * | |
|
||||
| yes | pcntl | * | |
|
||||
| yes | pdo | * | |
|
||||
| yes | pdo_mysql | * | |
|
||||
| yes | pdo_sqlite | * | |
|
||||
| | pdo_pgsql | * | |
|
||||
| yes | phar | * | |
|
||||
| yes | posix | * | |
|
||||
| yes, not compiled | protobuf | * | Not compiled and enabled as default |
|
||||
| yes | readline | * | Not support `./php -a` |
|
||||
| yes | redis | * | |
|
||||
| yes | shmop | * | |
|
||||
| yes | simplexml | * | |
|
||||
| yes | soap | * | |
|
||||
| yes | sockets | * | |
|
||||
| yes | sqlite3 | * | |
|
||||
| yes | swoole | >=4.6.6 | support mysqlnd, sockets, openssl, redis |
|
||||
| yes | tokenizer | * | |
|
||||
| yes | xml | * | |
|
||||
| yes | xmlreader | * | |
|
||||
| yes | xmlwriter | * | |
|
||||
| yes | zip | * | not support `bzip2`, `lzma` compression |
|
||||
| yes | zlib | * | |
|
||||
|
||||
## Customization
|
||||
- If you are going to run without prompt, Just add it to the end of `docker run xxx` cmd according to the parameters given below.
|
||||
|
||||
> 1st parameter `original` represents that you are using global original download address to fetch dependencies, if you are in mainland China, use `mirror`.
|
||||
>
|
||||
> 2nd parameter `8.1.7` is your PHP version you are compiling.
|
||||
>
|
||||
> 3rd parameter `all` represents that you will compile all supported extensions.
|
||||
>
|
||||
> 4th parameter `/dist/` is your binary output directory.
|
||||
>
|
||||
> For example, `docker run --rm -v $(pwd)/dist:/dist/ -it static-php build-php original 8.1.7 all /dist/`
|
||||
|
||||
- `docker/extensions.txt` edit extensions.
|
||||
- `docker/compile-php.sh` file `php_compile_args` function to adjust PHP configure arguments.
|
||||
- `docker/check-extensions.sh` file `check_in_configure` function to adjust extensions' configure arguments.
|
||||
- `docker/config.json` edit extensions and dependencies version and download links.
|
||||
|
||||
## Current Issue
|
||||
- [X] Not support event(libevent), because of its `config.m4` and code.
|
||||
- [ ] Swoole not support `--enable-swoole-curl`.
|
||||
- [X] Not support readline, maybe caused by ncurses library.
|
||||
- [X] Not support curl (solved)
|
||||
- [X] Customize extensions to compile
|
||||
- [X] php.ini integration
|
||||
- [X] i18n (including README and scripts)
|
||||
|
||||
## Running preview
|
||||
|
||||
### Using static binary
|
||||
|
||||
<img width="881" alt="未命名" src="https://user-images.githubusercontent.com/20330940/168441751-e62cb8d4-a3c8-42d9-b34e-d804b39756a1.png">
|
||||
|
||||
### Using swoole application packed with micro
|
||||
|
||||
<img width="937" alt="all" src="https://user-images.githubusercontent.com/20330940/168557743-b8f92263-712f-490e-9fe0-831597741595.png">
|
||||
|
||||
## References
|
||||
- <https://blog.terrywh.net/post/2019/php-static-openssl/>
|
||||
- <https://stackoverflow.com/a/37245653>
|
||||
- <http://blog.gaoyuan.xyz/2014/04/09/statically-compile-php/>
|
||||
Please use the `dump-license` command to export the open source licenses used in the project after compilation,
|
||||
and comply with the corresponding project's LICENSE.
|
||||
|
||||
Reference in New Issue
Block a user