如何将 php ext-mailparse 添加到弹性 beanstalk 实例?

问题描述 投票:0回答:3

我无法将 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:找不到命令”

我有一种感觉,有一种更简单的方法可以完成这件事,但我被困住了。有人可以帮忙吗?

php amazon-web-services composer-php amazon-elastic-beanstalk
3个回答
0
投票

创建两个文件:

.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 前缀)。

请注意,我使用了两个文件。由于某种原因,在同一个文件上使用两个命令会生成部署文件。如果有人能澄清这一点,我将不胜感激。


0
投票

要添加到

@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 版本上运行而无需太多更改。


0
投票

这对我在 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
© www.soinside.com 2019 - 2024. All rights reserved.