Влияет ли изменение одно-почтовой программы в PHP (Laravel) на запросы других пользователей? - PullRequest
1 голос
/ 19 июня 2019

Класс Laravel 5.3 Mailer настроен как одноэлементный в соответствии с этой статьей https://laravel -news.com / разрешение пользователям отправлять электронную почту вместе со своими собственными smtp-settings-in- Laravel

Предположим, что пользователь в запросе устанавливает Mail :: setSwiftMailer на другой сервер для отправки почты через свой почтовый сервер / аккаунт.

$transport = Swift_SmtpTransport::newInstance('smtp.gmail.com', 465, 'ssl');
$transport->setUsername('your_gmail_username');
$transport->setPassword('your_gmail_password');

$gmail = new Swift_Mailer($transport);

// Set the mailer as gmail
Mail::setSwiftMailer($gmail);

Влияет ли это на других пользователей? Насколько я понял, обычные синглтон-характеристики не применяются в PHP http://blog.gordon -oheim.biz / 2011-01-17-Почему-синглетоны-не-использовать-в-PHP /

Синглтон, созданный в одном Запросе, живет именно для этого запроса. Синглтон, созданный в другом запросе, выполненном в то же время, будет по-прежнему быть совершенно другим примером. И это займет его собственный объем памяти. Эти случаи не связаны друг с другом. Они есть полностью изолирован, потому что PHP является архитектурой Shared-Nothing. Вы не имеют ни одного уникального экземпляра, но много подобных экземпляров в параллельные процессы.

Значит ли изменение почтового сервера для функции singleton изменит почтовый сервер для других пользователей?

Влияет ли изменение конфигурации Laravel на других пользователей? Я предполагаю, по крайней мере, здесь ответ да.

Config::set('mail', ['driver' => $mail->driver, 'host' => $mail->host, 'port' => $mail->port, ...]);

Ответы [ 2 ]

0 голосов
/ 19 июня 2019

Взгляните на самую простую реализацию Singleton:

class Singleton {
    protected static $_instance = null;

    public static function newInstance()
    {
        if (null === self::$_instance)
        {
            self::$_instance = new self;
        }
        return self::$_instance;
    }

    // disallowed
    protected function __clone() {}

    // disallowed
    protected function __construct() {}
}

Он гарантирует, что существует только один экземпляр этого в этом одном и том же запросе.

Таким образом, ваш Swift_SmtpTransport является Singleton:

$transport = Swift_SmtpTransport::newInstance('smtp.gmail.com', 465, 'ssl');

Это означает, что каждый экземпляр Swift_SmtpTransport - это тот, который вы только что создали (для этого запроса) (это не означает, что вы можетене изменять свойства - возможно, экземпляр имеет методы получения и установки после его создания).

А теперь давайте посмотрим, что вы уже обнаружили:

Синглтонсозданный в одном Запросе живет именно для этого запроса.

Так что на запрос и запрос также не влияет на другиезапросы .Так что нет, я не думаю, что это влияет на других пользователей.Даже если вы измените конфигурацию в соответствии с одним запросом .

Для получения дополнительной информации также читайте: Одновременные запросы к PHP-скрипту - для каждого запроса создается новый независимый процесс, который не имеет ничего общего с остальными.Единственное, что они могут блокировать друг друга.

Документация Laravel гласит:

Значения конфигурации, установленные во время выполнения, устанавливаются только для текущего запроса, ине будут перенесены на последующие запросы.

0 голосов
/ 19 июня 2019

В обычном php каждый запрос - это другой экземпляр.ничто в унаследованном (переменном) от экземпляра к другому (от запроса к другому).

В этом же случае почтовый ящик является единственным в течение своей жизни

...