猿问

Elastic Beanstalk 中的 PHP Mailer 类无法识别

据我了解,如果您composer.json在根目录中包含一个文件并且不包含供应商文件,那么 Composer 将自动处理 JSON 指令中的库。


该composer.json文件是 PHPMailer Github 上当前的 51 行 json 文件,它位于我的 EB 根文件夹中,其中包含/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 致命错误:未捕获的错误:在 /var/app/current/public/phpHead.php:64\n 堆栈跟踪中找不到类 'PHPMailer\PHPMailer\PHPMailer':\n#0 /var/app/current/public/index .php(3): include()\n#1 {main}\n 在第 64 行的 /var/app/current/public/phpHead.php 中抛出


我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"

    },


杨__羊羊
浏览 104回答 1
1回答

蛊毒传说

我没有使用过 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"    }}在任何情况下,您都应该离线尝试您的代码(包括原始依赖项安装),然后再将其上传到 EB。如果您尝试composer install离线运行和运行项目,您会遇到同样的问题。在部署之前运行您的基本项目。
随时随地看视频慕课网APP
我要回答