Serverless应用引擎SAE(Serverless App Engine)支持多种PHP运行时环境,您可以根据实际需求选择。

运行时简介

在线应用:Nginx结合PHP-FPM

SAE针对PHP Web应用,默认提供LNMP(Linux+Nginx+MySQL+PHP)的运行时环境,包含如下内容:
  • 使用官方PHP-FPM基础镜像。
  • 内置官方Nginx。
  • 内置常见PHP扩展。
若您的应用依赖其他资源,可使用如下阿里云其他产品:

应用监控:ARMS

针对PHP 5.4~7.3版本的SAE应用,您可以通过开启应用监控,获得应用间调用链Tracing、MySQL和Redis资源访问延迟等更详细的监控信息。更多信息,请参见以下文档:

PHP运行时说明

软件版本

当前公开可用的PHP环境说明如下。如果您需要更高版本的PHP环境,提交工单加入钉钉群反馈。

运行环境 更新时间 PHP版本 Nginx版本 操作系统版本 说明
PHP-FPM 7.3 2021-12-27 7.3.32 1.18.0 Debian 11.0
  • 支持内置字体。
  • 支持内置PHP官方扩展。
  • 支持内置PHP PECL扩展。
PHP-FPM 7.2 2021-09-17 7.2.34 1.18.0 Debian 10.7
PHP-FPM 7.1 2021-09-17 7.1.33 1.18.0 Debian 10.2
PHP-FPM 7.0 2021-09-17 7.0.33 1.18.0 Debian 9.6
PHP-FPM 5.6 2021-09-17 5.6.40 1.18.0 Debian 9.6
PHP-FPM 5.5 2021-09-17 5.5.38 1.18.0 Debian 8.5
PHP-FPM 5.4 2021-09-17 5.4.45 1.18.0 Debian 8.2

系统目录

SAE PHP环境默认使用如下目录,提供软件包部署:

类型 路径 说明
目录 /home/admin/app/ 软件包部署默认目录。
目录 /home/admin/app/nginx/
  • Nginx站点默认目录,默认对应Demo包中./nginx/
  • 支持Nginxserver {}配置。具体信息,请参见ngx_http_core_module
目录 /home/admin/app/php/ PHP应用程序默认目录,默认对应Demo包中./php/
文件 /usr/local/etc/php.ini SAE推荐php.ini配置路径。具体信息,请参见设置PHP应用配置文件

官方PHP-FPM默认配置如下:

类型 路径 说明
目录 /usr/local/etc/php PHP_INI_DIR
目录 /usr/local/etc/php/conf.d/ PHP内置扩展配置目录,存放扩展默认ini文件。
文件 /usr/local/etc/php-fpm.conf PHP-FPM默认配置文件。具体信息,请参见FastCGI进程管理器(FPM)

官方Nginx默认配置如下:

类型 路径 说明
文件 /usr/sbin/nginx Nginx官方程序。
目录 /etc/nginx/ Nginx默认配置目录。
文件 /etc/nginx/nginx.conf Nginx默认配置文件nginx.conf,包含http {}配置。其中http {}默认引用/home/admin/app/nginx/配置。

内置扩展

SAE提供的PHP环境支持以下扩展:

相关权限

官方PHP-FPM与Nginx默认使用www-data用户运行应用。权限相关说明如下:

服务 权限USER GROUP 说明
PHP-FPM 进程
www-data www-data
PHP默认,配置文件路径为/usr/local/etc/php-fpm.conf
Nginx 进程
www-data www-data
Nginx默认,配置文件路径为/etc/nginx/nginx.conf
文件目录 目录
root root
代码包部署目录,配置目录为/home/admin/app/。示例如下:
drwxrwxrwx 2 root root 4096 May 13  2021 nginx
drwxrwxrwx 1 root root 4096 Apr  8 11:45 php
注意 建议您不要修改用户,否则可能会出现应用运行失败的情况。

PHP扩展支持

官方与PECL扩展

您可以在部署应用时配置php.ini文件来扩展内置,包括官方与PECL扩展。具体操作,请参见设置PHP应用配置文件

在Webshell内执行以下命令,获取具体的内置扩展。关于如何打开Webshell,请参见查看Webshell
php -m

不同运行环境的扩展内置支持,输出示例如下:

[PHP Modules]
amqp
ARMS
bcmath
bz2
calendar
Core
ctype
curl
date
dom
exif
fileinfo
filter
ftp
gettext
gmp
hash
iconv
igbinary
imagick
json
libxml
mbstring
mcrypt
memcached
mongodb
msgpack
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
readline
redis
Reflection
session
shmop
SimpleXML
soap
sockets
sodium
SPL
sqlite3
standard
swoole
sysvmsg
sysvsem
sysvshm
timezonedb
tokenizer
xdebug
xml
xmlreader
xmlrpc
xmlwriter
yaml
Zend OPcache
zip
zlib

[Zend Modules]
Xdebug
Zend OPcache
     

[PHP Modules]
amqp
ARMS
bcmath
bz2
calendar
Core
ctype
curl
date
dom
exif
fileinfo
filter
ftp
gettext
gmp
hash
iconv
igbinary
imagick
json
libxml
mbstring
mcrypt
memcached
mongodb
msgpack
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
readline
redis
Reflection
session
shmop
SimpleXML
soap
sockets
sodium
SPL
sqlite3
standard
swoole
sysvmsg
sysvsem
sysvshm
timezonedb
tokenizer
xdebug
xml
xmlreader
xmlrpc
xmlwriter
yaml
Zend OPcache
zip
zlib

[Zend Modules]
Xdebug
Zend OPcache
     

[PHP Modules]
amqp
ARMS
bcmath
bz2
calendar
Core
ctype
curl
date
dom
exif
fileinfo
filter
ftp
gettext
gmp
hash
iconv
igbinary
imagick
json
libxml
mbstring
mcrypt
memcached
mongodb
msgpack
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
readline
redis
Reflection
session
shmop
SimpleXML
soap
sockets
sodium
SPL
sqlite3
standard
swoole
sysvmsg
sysvsem
sysvshm
timezonedb
tokenizer
xdebug
xml
xmlreader
xmlrpc
xmlwriter
yaml
Zend OPcache
zip
zlib

[Zend Modules]
Xdebug
Zend OPcache
     

[PHP Modules]
amqp
ARMS
bcmath
bz2
calendar
Core
ctype
curl
date
dom
exif
fileinfo
filter
ftp
gettext
gmp
hash
iconv
igbinary
imagick
json
libxml
mbstring
memcached
mongodb
msgpack
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
readline
redis
Reflection
session
shmop
SimpleXML
soap
sockets
sodium
SPL
sqlite3
standard
swoole
sysvmsg
sysvsem
sysvshm
timezonedb
tokenizer
xdebug
xml
xmlreader
xmlrpc
xmlwriter
yaml
Zend OPcache
zip
zlib

[Zend Modules]
Xdebug
Zend OPcache
     

[PHP Modules]
amqp
ARMS
bcmath
bz2
calendar
Core
ctype
curl
date
dom
exif
fileinfo
filter
ftp
gettext
gmp
hash
iconv
igbinary
imagick
json
libxml
mbstring
memcached
mongodb
msgpack
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
readline
redis
Reflection
session
shmop
SimpleXML
soap
sockets
sodium
SPL
sqlite3
standard
swoole
sysvmsg
sysvsem
sysvshm
timezonedb
tokenizer
xdebug
xml
xmlreader
xmlrpc
xmlwriter
yaml
Zend OPcache
zip
zlib

[Zend Modules]
Xdebug
Zend OPcache
     

[PHP Modules]
amqp
ARMS
bcmath
bz2
calendar
Core
ctype
curl
date
dom
exif
fileinfo
filter
ftp
gettext
gmp
hash
iconv
igbinary
imagick
json
libxml
mbstring
memcached
mongodb
msgpack
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
readline
redis
Reflection
session
shmop
SimpleXML
soap
sockets
sodium
SPL
sqlite3
standard
swoole
sysvmsg
sysvsem
sysvshm
timezonedb
tokenizer
xdebug
xml
xmlreader
xmlrpc
xmlwriter
yaml
Zend OPcache
zip
zlib

[Zend Modules]
Xdebug
Zend OPcache
     

[PHP Modules]
amqp
ARMS
bcmath
bz2
calendar
Core
ctype
curl
date
dom
ereg
exif
fileinfo
filter
ftp
gettext
gmp
hash
iconv
igbinary
imagick
json
libxml
mbstring
memcached
mongodb
msgpack
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
readline
recode
redis
Reflection
session
shmop
SimpleXML
soap
sockets
SPL
sqlite3
standard
swoole
sysvmsg
sysvsem
sysvshm
timezonedb
tokenizer
xdebug
xml
xmlreader
xmlrpc
xmlwriter
yaml
zip
zlib

[Zend Modules]
Xdebug
     

通过控制台与API安装扩展

通过SAE控制台或API,可以开启PHP官方扩展,或安装制定版本PECL扩展。具体操作,请参见在SAE控制台使用ZIP包部署PHP应用

安装第三方扩展

本文以PHP-FPM 7.3环境,源码编译安装YAML扩展为例,演示如何安装第三方扩展。

  1. 创建一个运行环境为PHP 7.3的SAE应用。
  2. 开通公网访问。具体操作,请参见部署在SAE上的应用如何访问公网
  3. 通过Webshell登录实例,执行以下命令安装并编译扩展。
    # 获取源码
    wget https://pecl.php.net/get/yaml-2.2.2.tgz
    tar -zxvf yaml-2.2.2.tgz
    # 编译安装
    cd yaml-2.2.2 && \
    phpize && \
    ./configure && \
    make && make install
  4. 将扩展下载到本地。具体操作,请参见通过日志上传下载诊断应用
    扩展地址如下:
    /home/admin/yaml-2.2.2/modules/yaml.so
  5. 将扩展打包到ZIP包中。ZIP包结构如下:
    .
    ├── nginx
    │   ├── default.conf
    │   ├── fastcgi_params
    │   ├── global
    │   └── root.dir
    ├── php
    │   ├── index.php
    └── extensions
        └── yaml.so
  6. 部署应用,上传新ZIP包,并添加php.ini配置启用扩展。
    extension=/home/admin/app/extensions/yaml.so
  7. 通过Webshell登录实例,确认扩展加载成功。
    # php -m | grep yaml
    yaml

扩展增强

默认开启WebP、JPEG、PNG、zlib、XPM和FreeType支持。具体信息,请参见GD和图像处理函数

常见配置说明

默认服务端口

SAE配置的Nginx、PHP-FPM程序默认的服务端口值如下:

程序 端口
Nginx 80
PHP-FPM 127.0.0.1:9000

PHP-FPM日志:标准输出

  • PHP-FPM日志,默认输出到实时日志。配置如下,配置文件路径为/usr/local/etc/php-fpm.d/docker.conf
    [global]
    error_log = /proc/self/fd/2
    log_limit = 8192
    
    [www]
    access.log = /proc/self/fd/2
  • PHP错误日志,默认未配置展示。配置如下,来源php.ini文件:
    error_log => no value => no value
    log_errors => Off => Off
    log_errors_max_len => 1024 => 1024
  • 如需开启错误日志输出到实时日志,请在创建或部署应用时配置php.ini配置,并指向如下路径:
    log_errors = on
    error_log = /proc/self/fd/2

Nginx日志:标准输出

  • Nginx日志,默认输出到实时日志。配置如下,配置文件路径为./nginx/default.conf
    #access_log /dev/stdout;
    error_log stderr;
  • 可开启access_log,默认输出到实时日志。

文件缓存:静态文件、图片、媒体

针对PHP代码,您可以配置php.ini开启或关闭OPcache。SAE默认开启OPcache。具体配置,请参考OPcache运行时配置
  • 开启OPcache:适用于在线网站,提升代码执行速度,降低磁盘IO。
  • 关闭OPcache:适用于调试场景,代码变更可实时生效。
php.ini配置如下:
; 开启 OPcache
opcache.enable=1
; 关闭 OPcache
;opcache.enable=0

文件缓存:PHP代码

针对大量静态文件,例如图片、视频、CSS和JS文件等,您可以开启或关闭Nginx静态文件缓存。具体配置,请参见DemoModule ngx_http_headers_module

  • 开启静态资源缓存:适用于在线服务、大量媒体文件站点等场景,提升带宽吞吐能力、降低IOPS读取压力。
  • 关闭静态资源缓存:适用于远程调试、上传下载等场景,可实时访问文件。
./nginx/default.conf配置如下:
    # 静态资源缓存
    location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ {
        # 关闭缓存
        #expires off;
        # 开启缓存
        expires 1s;
    }

增强说明

热重启服务

  • 通过ConfigMap,可以动态配置和修改文件内容。
  • 通过Webshell,可以动态重启服务。
    • 热重启Nginx(不停服)
      # 测试配置文件有效性
      nginx -t
      # 动态重启
      nginx -s reload
    • 热重启php-fpm(有一定概率断流,需要检查php.ini配置
      ps uax | grep 'php-fpm: master' | grep -v grep | awk '{print $2}' | xargs kill -USR2

上传下载

SAE支持多种上传下载文件的方式,您可以按需选择: