# 在云托管中如何安装 PHP 的 SG11 扩展

SourceGuardian 安全组件是 PHP 中较为重要和安全级别较高的安全组件，目前大部分 php 官方镜像未安装或启用 SG11，所以如果你的项目需要此组件，则可以参照此文档

## 一、配置 Dockerfile

在你原有的 Dockerfile 中，FROM 下面一行添加下述命令

``` dockerfile
RUN PHP_VERSION=$(php -v | head -n1 | cut -d' ' -f2 | cut -d. -f1-2) \
    && mkdir -p /tmp/sourceguardian \
    && cd /tmp/sourceguardian \
    && curl -Os https://www.sourceguardian.com/loaders/download/loaders.linux-x86_64.tar.gz \
    && tar xzf loaders.linux-x86_64.tar.gz \
    && cp ixed.${PHP_VERSION}.lin "$(php -i | grep '^extension_dir =' | cut -d' ' -f3)/sourceguardian.so" \
    && echo "extension=sourceguardian.so" > /usr/local/etc/php/conf.d/15-sourceguardian.ini \
    && rm -rf /tmp/sourceguardian
```

注意要放在 COPY 你的代码之前，避免每次构建重新剥离层。

## 二、验证是否开启

``` php
<?php
echo phpinfo();
```

当访问时查看是否存在如下信息，如果有则证明添加成功

![](https://res8.wxqcloud.qq.com.cn/wxdoc/909f8855-dbf7-4e01-8e80-f9ebed58db0d.png)

## 三、完整示例

新建一个文件夹，文件夹下分别建立如下文件

1. Dockerfile

``` Dockerfile
FROM php:7.3-apache

RUN PHP_VERSION=$(php -v | head -n1 | cut -d' ' -f2 | cut -d. -f1-2) \
    && mkdir -p /tmp/sourceguardian \
    && cd /tmp/sourceguardian \
    && curl -Os https://www.sourceguardian.com/loaders/download/loaders.linux-x86_64.tar.gz \
    && tar xzf loaders.linux-x86_64.tar.gz \
    && cp ixed.${PHP_VERSION}.lin "$(php -i | grep '^extension_dir =' | cut -d' ' -f3)/sourceguardian.so" \
    && echo "extension=sourceguardian.so" > /usr/local/etc/php/conf.d/15-sourceguardian.ini \
    && rm -rf /tmp/sourceguardian

COPY index.php /var/www/html/

RUN mv "$PHP_INI_DIR/php.ini-development" "$PHP_INI_DIR/php.ini"

CMD ["apachectl", "-DFOREGROUND"]
```

2. index.php

``` php
<?php
echo phpinfo();
```

将文件夹部署到微信云托管中即可，部署过程可以参考[此文档](/miniprogram/dev/wxcloudservice/wxcloudrun/src/quickstart/custom/index)
