编译
基本上按照官方的来就行了:
https://github.com/Microsoft/php-sdk-binary-tools
1
2
3
4
5
6
7
8
| git clone https://github.com/Microsoft/php-sdk-binary-tools.git c:\php-sdk
cd c:\php-sdk
git checkout php-sdk-2.2.0
./phpsdk-vc15-x64.bat
phpsdk_buildtree phpmaster
git clone https://github.com/php/php-src.git && cd php-src
phpsdk_deps --update --branch 7.4
buildconf && configure --enable-cli && nmake
|
注意 phpsdk_deps --update --branch 7.4
这一个命令。官方例子是 master,但我执行的时候会报:
1
| Fatal error: Uncaught SDK\Exception: Unsupported branch 'master'
|
在工具里面 var_dump 查看支持的分支后发现没有 master,于是选 7.4 。
同样还是这一个命令。由于网络原因,可能会有些 zip 包下载下来后无法解压。
1
| Fatal error: Uncaught SDK\Exception: Failed to open 'C:\php-sdk\.tmp\c2bc78629d0b6f3212ff42957cc6fb2a\packs\freetype-2.9.1-1-vc15-x64.zip'. in C:\php-sdk\lib\php\libsdk\SDK\FileOps.php:172
|
我尝试用下载软件下载,下载下来的文件可以正常解压。让工具直接读这个手动下载的文件就行了。
由于工具每次运行的时候,都会生成临时目录,因此把它改成固定的目录。
php-sdk\lib\php\libsdk\SDK\FileOps.php
1
2
3
4
5
6
| protected function md(string $name = "", bool $tmp = false) : string
{
// ...
$ret = $pre . DIRECTORY_SEPARATOR . md5(uniqid());
// ...
}
|
把 md5(uniqid())
改成字符串 "tmp"
。
php-sdk\lib\php\libsdk\SDK\Build\Dependency\Package.php
1
2
3
4
5
6
7
8
9
10
| public function retrieve(string $path) : void
{/*{{{*/
$this->filepath = $path . DIRECTORY_SEPARATOR . $this->name;
$cont = $this->fetcher->getByUri($this->getUri());
$fd = fopen($this->filepath, "wb");
fwrite($fd, $cont);
fclose($fd);
}/*}}}*/
|
在 getByUri 上一行加入:
1
2
3
4
| if (file_exists($this->filepath))
{
return;
}
|
然后把删除文件的代码注释掉:
php-sdk\lib\php\libsdk\SDK\Build\Dependency\Package.php
1
2
3
4
| public function cleanup() : void
{/*{{{*/
// unlink($this->filepath);
}/*}}}*/
|
然后手动下载压缩包。先获取 URL 。
php-sdk\lib\php\libsdk\SDK\Build\Dependency\Manager.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| public function performUpdate(string &$msg = NULL, bool $force = false, bool $backup = true) : void
{
// ...
foreach ($series_data as $item) {
echo "Processing package $item", PHP_EOL;
$pkg = new Package($item, $this->series, $this->fetcher);
$pkg->retrieve($tmp_dir_packs);
$pkg->unpack($tmp_dir_deps);
$pkg->cleanup();
unset($pkg);
}
// ...
}
|
把循环体的内容改为:
1
| echo 'https://windows.php.net/downloads/php-sdk/deps/vc15/x64/' . $item . PHP_EOL;
|
这里的 vc15 和 x64 根据情况替换。后面文件名会在执行 phpsdk_deps --update --branch 7.4
的时候展示出来。哪个失败就手动下载哪个。
在 foreach 下面加个 die();
。
执行一次命令获取所有 URL。然后批量复制到下载软件里面下载。
把压缩包放到 php-sdk\.tmp\tmp\packs
底下,再次执行 phpsdk_deps --update --branch 7.4
。
成功的提示:
1
| Updates performed successfully.
|
接下来执行:
成功的提示:
1
2
| Rebuilding configure.js
Now run 'configure --help'
|
接着执行:
1
| configure --disable-all --enable-cli --enable-debug
|
成功的提示:
1
2
3
4
5
6
7
8
9
10
11
12
13
| ---------------------------------------
| | |
---------------------------------------
| Build type | Debug |
| Thread Safety | Yes |
| Compiler | Visual C++ 2019 |
| Architecture | x64 |
| Optimization | disabled |
| Native intrinsics | SSE2 |
| Static analyzer | disabled |
---------------------------------------
Type 'nmake' to build PHP
|
接着执行:
成功的提示:
1
| SAPI sapi\cli build complete
|
编译后的文件在 php-sdk\phpmaster\vc15\x64\php-src\x64\Debug_TS
。
进入目录执行:
调试