Codeigniter-4如何从共享托管服务器上的供应商文件夹访问/加载包



我有一个基于codeigniter 4的应用程序,该应用程序是用流浪者和VirtualBox VM在本地开发的。然后我把它移到了一个共享的托管环境中,这个环境基于litespeed服务器和cpanel。

该应用程序使用某些外部包,如phpmailer、sendgrid和googleoauth,我在本地开发环境中使用composer安装了它们。因此,它们是由composer安装在供应商文件夹中的。

当切换到共享主机时,我已经将codeigniter安装从public_html文件夹向上移动了一级,在一个名为ci4的专用文件夹中,并且根据文档的指示,我在index.php前端控制器中更改了$pathsConfig变量,该变量指示ci4安装的新文件夹。

在共享托管服务器上,我无法访问composer,我只是将供应商文件夹从本地计算机复制到共享服务器(在ci4文件夹中(。

该应用程序运行良好,直到我使用了一个助手,该助手具有基于PHPMailer外部包发送电子邮件的功能。我收到一个类'PHPMailer\PHPMailer'未找到错误。应用程序似乎找不到de PHPMailer包。助手看起来像这样:

require_once ROOTPATH . 'vendor/autoload.php';
use PHPMailerPHPMailer;
use PHPMailerException;
function send_email($email, $subject, $body, $altbody)
{

$config = config("Custom");
try {
$mail = new PHPMailer(true);
// Server Settings
$mail->isSMTP();
$mail->SMTPDebug = 0; // change this to 0 in production environment
$mail->Timeout = 30;
$mail->Host = 'email-smtp.eu-central-1.amazonaws.com';
$mail->Port = '587';
$mail->SMTPAuth = true;
$mail->Username = $config->aws_smtp_user; 
$mail->Password = $config->aws_smtp_password; 
$mail->SMTPSecure = 'tls';
//$mail->SMTPAutoTLS = false;
// Recipients
$mail->setFrom($email, 'Contact Form');
$mail->addAddress('example@domain.com');
// Content
$mail->Subject = $subject;
$mail->msgHTML($body);
$mail->AltBody = $altbody;
$mail->send();
return ["flag" => true];
} catch (Exception $e) {
//print_r($mail->ErrorInfo);
return ["flag" => false, "error" => $mail->ErrorInfo];
}
}

使用受保护的$helper变量将帮助程序自动加载到BaseController中。

在Autoload.php配置文件中,我已将PHPMailer源文件夹添加到$psr4变量中

public $psr4 = [
APP_NAMESPACE => APPPATH, // For custom app namespace
'Config'      => APPPATH . 'Config',
'PHPMailer' => ROOTPATH . 'vendor/phpmailer/phpmailer/src/'
];

所以我的第一个问题是,如果在共享主机上复制供应商是一个好方法,或者我需要访问composer并运行composer install命令吗?

如果我可以复制供应商文件夹,为什么codeigniter 4没有看到位于该文件夹中的第三个包,我该如何解决这个问题?

我的文件夹结构如下:

/home
bin
/ci4
app
tests
vendor
writable
.env
.composer.json
.composer.lock
etc
logs
/public_html
css
images
js
webfonts
.htaccess
index.php
public_ftp
tmp
var   

非常感谢!

如果您使用composer安装库,则需要将所有供应商文件夹移动到主机,但如果手动安装,则需要调用库的namesapce

public $psr4 = [
APP_NAMESPACE => APPPATH, // For custom app namespace
'Config'      => APPPATH . 'Config',
'PHPMailer' => ROOTPATH .  
'My'=>ROOTPATH .  'thirdParty/My/src'
];

最新更新