aws/aws-crt-php

AWS Common Runtime for PHP

v1.2.6 2024-06-13 17:21 UTC

README

需求

  • UNIX平台上的PHP 5.5+,Windows上的7.2+
  • CMake 3.x
  • UNIX上的GCC 4.4+、clang 3.8+,Windows上的Visual Studio构建工具
  • 测试需要Composer

使用Composer和PECL安装

该软件包在composerPECL上发布了两个不同的包。

在UNIX上,您可以从包管理器获取该软件包或从源代码构建

pecl install awscrt
composer require aws/aws-crt-php

在Windows上,您需要根据以下说明从源代码构建本机扩展php_awscrt.dll。然后,按照https://php.ac.cn/manual/en/install.pecl.windows.php#install.pecl.windows.loading加载扩展。之后

composer require aws/aws-crt-php

从GitHub源代码构建

$ git clone --recursive https://github.com/awslabs/aws-crt-php.git
$ cd aws-crt-php
$ phpize
$ ./configure
$ make
$ ./dev-scripts/run_tests.sh

在Windows上构建

Windows需求

  • 确保您有windows PHP SDK(本例假设将SDK安装到C:\php-sdk,并且您已将PHP源代码检出到构建目录中的php-src)并且它在您的机器上运行良好。

  • 确保您有“开发包(SDK用于开发PHP扩展)”和PHP可以从系统路径访问。您可以从https://windows.php.net/download/下载它们。您可以通过运行phpize -vphp -v来检查它们是否可用

说明

从命令提示符(不是powershell)。说明基于64位Windows上的Visual Studio 2019。

> git clone --recursive https://github.com/awslabs/aws-crt-php.git
> git clone https://github.com/microsoft/php-sdk-binary-tools.git C:\php-sdk
> C:\php-sdk\phpsdk-vs16-x64.bat

C:\php-sdk\
$ cd <your-path-to-aws-crt-php>

<your-path-to-aws-crt-php>\
$ phpize

# --with-prefix only required when your php runtime in system path is different than the runtime you wish to use.
<your-path-to-aws-crt-php>\
$ configure --enable-awscrt=shared --with-prefix=<your-path-to-php-prefix>

<your-path-to-aws-crt-php>\
$ nmake

<your-path-to-aws-crt-php>\
$ nmake generate-php-ini

# check .\php-win.ini, it now has the full path to php_awscrt.dll that you can manually load to your php runtime, or you can run the following command to run tests and load the required native extension for awscrt.
<your-path-to-aws-crt-php>\
$ .\dev-scripts\run_tests.bat <your-path-to-php-binary>

注意:对于VS2017,Cmake将默认构建为Win32,请参阅这里。如果您正在构建x64 php,则可以设置环境变量如下,让cmake选择x64编译器。

set CMAKE_GENERATOR=Visual Studio 15 2017
set CMAKE_GENERATOR_PLATFORM=x64

调试

使用PHPBrew来构建和管理多个PHP版本很有帮助。

注意:您必须使用调试构建的PHP来调试本机扩展。有关更多信息,请参阅PHP 内部书

# PHP 8 example
$ phpbrew install --stdout -j 8 8.0 +default -- CFLAGS=-Wno-error --disable-cgi --enable-debug
# PHP 5.5 example
$ phpbrew install --stdout -j 8 5.5 +default -openssl -mbstring -- CFLAGS="-w -Wno-error" --enable-debug --with-zlib=/usr/local/opt/zlib
$ phpbrew switch php-8.0.6 # or whatever version is current, it'll be at the end of the build output
$ phpize
$ ./configure
$ make CMAKE_BUILD_TYPE=Debug

确保从您的调试器启动的php是which php的结果,而不仅仅是系统默认的php。

安全

有关更多信息,请参阅CONTRIBUTING

已知的OpenSSL相关问题(仅限Unix)

  • 当您的php加载的openssl版本与您的系统openssl版本不同时,awscrt可能无法加载或异常崩溃。您可以通过以下方式找到php链接的openssl版本: php -i | grep 'OpenSSL',以及从构建日志中链接的awscrt,它将是Found OpenSSL: * (found version *)

解决这些问题的最简单方法是构建源代码,并从aws-lc获取awscrt依赖。要执行此操作,请使用此处的相同说明,但使用USE_OPENSSL=OFF make而不是make

许可证

本项目采用Apache-2.0许可证。