我无法将 MailParse PHP 扩展 (https://pecl.php.net/package/mailparse) 添加到运行 PHP 7 的 Elastic Beanstalk 实例。我的目标是将其添加到启动序列中以便在创建实例时始终安装它。
我的问题是 Amazon 的 Linux for EB 版本不提供 PECL,所以我不确定如何加载它。
我尝试过采用各种方法来安装其他 php 扩展/模块,但没有取得任何成功。
https://packagist.org/packages/php-mime-mail-parser/php-mime-mail-parser - 我尝试通过我的composer.json文件包含此内容,但它失败了,因为“ext-mailparse”不是没有安装。
http://wiki.cerbweb.com/Installing_PHP_Mailparse_Ubuntu - 我尝试运行这些命令来安装扩展,但安装依赖项的第一个命令失败了。
https://serverpilot.io/community/articles/how-to-install-the-php-mailparse-extension.html - “sudo:apt-get:找不到命令”
我有一种感觉,有一种更简单的方法可以完成这件事,但我被困住了。有人可以帮忙吗?
创建两个文件:
.ebextensions/01mailparse.config
commands:
01install_mailparse:
command: "pecl7 install --force mailparse"
注意
--force
标志的使用。我添加了这一点,因为有时 AWS EB 会自动重新部署应用程序,如果发现扩展已安装,PECL 就会失败。
.ebextensions/02prioritize.config
commands:
01change_mailparse_load_priority:
command: "sed '/extension=\"mailparse.so\"/d' /etc/php.ini > /etc/php.ini && echo 'extension=\"mailparse.so\"' > /etc/php-7.0.d/zz_mailparse.ini"
这将从
php.ini
文件中删除 mailparse 扩展注册(PECL 在顶部添加了这一行,很奇怪)并将其注册为在列表末尾加载(zz 前缀)。
请注意,我使用了两个文件。由于某种原因,在同一个文件上使用两个命令会生成部署文件。如果有人能澄清这一点,我将不胜感激。
要添加到
@Mauro
的答案,以下内容允许您安装 mailparse 并从单个文件中的 /etc/php.ini 中删除扩展名。
.ebextensions/01_mailparse.config(PHP 7.x)
commands:
01_mailparse_install:
command: |
pecl7 install --force mailparse
sed -i '/extension="mailparse.so"/d' /etc/php.ini
files:
"/etc/php.d/mailparse.ini":
mode: "000644"
owner: root
group: root
content: |
extension="mailparse.so"
.ebextensions/01_mailparse.config(PHP 5.6)
commands:
01_mailparse_install:
command: |
pecl install --force mailparse-2.1.6
sed -i '/extension="mailparse.so"/d' /etc/php.ini
files:
"/etc/php.d/mailparse.ini":
mode: "000644"
owner: root
group: root
content: |
extension="mailparse.so"
|
允许多行值。我修改了 sed
命令并添加了文件块,以允许它在多个 PHP 版本上运行而无需太多更改。
这对我在 Amazon Linux 2 上有用
/.platform/hooks/postdeploy/01_install_mailparse.sh
#!/bin/bash
if ! php -m | grep -q 'mailparse'; then
echo "mailparse not found. Installing..."
sudo yum install -y re2c
sudo yum install -y php-cli
sudo yum install -y php-pear
sudo yum install -y php-devel
sudo pecl channel-update pecl.php.net
sudo pecl install mailparse
sudo echo "extension=mailparse.so" | tee /etc/php.d/mailparse.ini
sudo systemctl restart php-fpm
sudo systemctl restart nginx
else
echo "mailparse is already installed."
fi