我正在配置CakePHP电子邮件,但在使用环境变量方面遇到了麻烦。我可以在使用标准格式(由CakePHP“Cookbook”提供)时使用电子邮件功能,但出于安全考虑,我更倾向于使用环境变量作为用户名和密码字段。
这有效:
public $gmail = array(
'host' => 'ssl://smtp.gmail.com',
'port' => 465,
'username' => 'my@gmail.com',
'password' => 'secret',
'transport' => 'Smtp'
);
然而,这不是:
public $gmail = array(
'host' => 'ssl://smtp.gmail.com',
'port' => 465,
'username' => getenv('USERNAME'),
'password' => getenv('PASSWORD'),
'transport' => 'Smtp'
);
变量设置正确,因为我可以使用“echo”将它们打印到屏幕上。我也试过这个,但无济于事:
$env_username = getenv('USERNAME');
$env_password = getenv('PASSWORD');
class EmailConfig {
public $gmail = array(
'host' => 'ssl://smtp.gmail.com',
'port' => 465,
'username' => $env_username,
'password' => $env_password,
'transport' => 'Smtp'
);
}
任何人都知道我做错了什么?感谢。
答案 0 :(得分:3)
类成员只能使用可在编译时计算的常量值进行初始化(布尔值,数字,字符串等)。
<强> http://www.php.net/manual/en/language.oop5.properties.php 强>
如上所述,您可以在类构造函数中定义动态配置数据:
<强> http://book.cakephp.org/2.0/en/core-utility-libraries/email.html#configuration 强>
class EmailConfig {
public $gmail = array(
'host' => 'ssl://smtp.gmail.com',
'port' => 465,
'username' => null,
'password' => null,
'transport' => 'Smtp'
);
public function __construct() {
$this->gmail['username'] = getenv('USERNAME');
$this->gmail['password'] = getenv('PASSWORD');
}
}
答案 1 :(得分:0)
尝试在config \ core中设置变量,例如
Configure::write('MyEmailConfig1', array(
username => 'SetYourUsername',
password => 'SetYourPassword'
));
然后你可以从你的config \ email中读取它。这样的事情......
public $gmail = array(
'host' => 'ssl://smtp.gmail.com',
'port' => 465,
'username' => Configure::read('MyEmailConfig1.username'),
'password' => Configure::read('MyEmailConfig1.password'),
'transport' => 'Smtp'
);