据我了解,如果您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"
},
蛊毒传说