PHP Класс почтовика в Elasti c Бобовый стебель не распознан - PullRequest
1 голос
/ 02 марта 2020

Насколько я понимаю, с Elasti c Beanstalk, если вы включите файл composer.json в каталог root и НЕ включите файл поставщика, то composer автоматически обработает библиотеку из инструкций JSON.

Файл composer.json соответствует текущему 51-строчному файлу json в PHPMailer Github и находится в моей папке EB root с /public и .ebextensions

Тогда У меня есть сценарий PHP (public/phphead.php), скопированный из AWS документов

// Import PHPMailer classes into the global namespace

// These must be at the top of your script, not inside a function
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

// If necessary, modify the path in the require statement below to refer to the
// location of your Composer autoload.php file.
require '../vendor/autoload.php';

// requiring /vendor/autoload.php would throw a fatal error and so I presume this is where composer creates the vendor dir. no more fatal errors have been thrown and I have been looking to confirm this is the right location but I have only the lack of errors to make me think composer is found and working...
// ....
$mail = new PHPMailer(); //LINE 64 as per error log

Вывод журнала ошибок из EB:

PHP Неустранимая ошибка: Неопределенная ошибка: класс «PHPMailer \ PHPMailer \ PHPMailer» не найден в /var/app/current/public/phpHead.php:64\nStack trace: \ n # 0 /var/app/current/public/index.php (3): include () \ n # 1 {main} \ n добавляется в /var/app/current/public/phpHead.php в строку 64

composer.json Я использую (так же, как файл PHPMailer composer.json, взятый из GitHub):

{
    "name": "phpmailer/phpmailer",
    "type": "library",
    "description": "PHPMailer is a full-featured email creation and transfer class for PHP",
    "authors": [
        {
            "name": "Marcus Bointon",
            "email": "phpmailer@synchromedia.co.uk"
        },
        {
            "name": "Jim Jagielski",
            "email": "jimjag@gmail.com"
        },
        {
            "name": "Andy Prevost",
            "email": "codeworxtech@users.sourceforge.net"
        },
        {
            "name": "Brent R. Matzelle"
        }
    ],
    "require": {
        "php": ">=5.5.0",
        "ext-ctype": "*",
        "ext-filter": "*"
    },
    "require-dev": {
        "friendsofphp/php-cs-fixer": "^2.2",
        "phpunit/phpunit": "^4.8 || ^5.7",
        "doctrine/annotations": "^1.2"
    },
    "suggest": {
        "psr/log": "For optional PSR-3 debug logging",
        "league/oauth2-google": "Needed for Google XOAUTH2 authentication",
        "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication",
        "stevenmaguire/oauth2-microsoft": "Needed for Microsoft XOAUTH2 authentication",
        "ext-mbstring": "Needed to send email in multibyte encoding charset",
        "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)"
    },
    "autoload": {
        "psr-4": {
            "PHPMailer\\PHPMailer\\": "src/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "PHPMailer\\Test\\": "test/"
        }
    },
    "license": "LGPL-2.1-only"
}

1 Ответ

2 голосов
/ 02 марта 2020

Я не использовал EB, но исходя из вашего предположения, что при необходимости он будет запускаться composer install, вам необходимо указать действительный composer.json.

Вы включаете пакет composer. json. Таким образом, вы устанавливаете зависимости PHPMailer, но не сам PHPMailer.

Вам необходимо создать собственный файл composer.json для вашего проекта / приложения, где вы объявляете PHPMailer зависимостью для вашего приложения.

Например:

{
  "name": "your/app",
  "type": "project",
  "description": "",
  "license": "CC-0",
  "require": {
    "phpmailer/phpmailer": "~6.1"
    }
}

В любом случае вам следует попробовать свой код (включая установку исходных зависимостей) offline , прежде чем загружать его в EB.

Если вы попытавшись запустить composer install и запустить свой проект в автономном режиме, вы столкнулись бы с той же проблемой. Получите ваш базовый c проект с до развертывания.

...