Yii
- 11 ответов
- 0 вопросов
8
Вклад в тег
tap
не подходило из-за отключения DHCP на роутере2.https://git.io/vpn
, который пришлось редактировать для замены зашитой в нем сети 10.8.0.0
на другую в связи с наличием пересечения данной сети с другой на одном из роутеров.>>> wget https://git.io/vpn -O openvpn-install.sh
>>> sudo bash openvpn-install.sh
UDP
.nano /etc/openvpn/server/server.conf
, удаляем все строки, начинающиеся на push
, и добавляем следующее:ifconfig-pool-persist ipp.txt
client-config-dir /etc/openvpn/server/ccd
client-to-client
route 192.168.0.0 255.255.255.0
push 'route 192.168.0.0 255.255.255.0'
route 192.168.1.0 255.255.255.0
push 'route 192.168.1.0 255.255.255.0'
192.168.0.0/24
) клиента.sudo mkdir /etc/openvpn/server/ccd
.iroute 192.168.0.0 255.255.255.0
iroute 192.168.1.0 255.255.255.0
1
, соответствующую опции 1) Add a new client
.>>> sudo bash openvpn-install.sh
push 'route ...'
. // избавляемся от возможных дубликатов
$numbers = collect($numbers)->unique();
// pluck('num') вернет нам список значений атрибута num, а не список моделей
$existingNumbers = Model::query()->whereIn('num', $numbers->toArray())->pluck('num');
// с помощью diff получаем элементы, которых нет в $existingNumbers
$newNumbers = $existingNumbers->diff($numbers)->mapWithKeys(function ($value, $key) {
// ['one', 'two'] => [['num' => 'one'], ['num' => 'two']]
return [$key => ['num' => $value]];
});
Model::query()->getConnection()->transaction(function () use ($newNumbers) {
Model::query()->insert($newNumbers->toArray());
});
// избавляемся от возможных дубликатов
$newNumbers = collect($numbers)->unique();
Model::query()->toBase()->whereIn('num', $numbers->toArray())
->chunk(500000, function ($existingNumbers) use (&$newNumbers) {
// с помощью diff получаем элементы, которых нет в $existingNumbers
$newNumbers = $newNumbers->diff($existingNumbers);
});
// ['one', 'two'] => [['num' => 'one'], ['num' => 'two']]
$newNumbers = $newNumbers->mapWithKeys(function ($value, $key) {
return [$key => ['num' => $value]];
});
Model::query()->getConnection()->transaction(function () use ($newNumbers) {
Model::query()->insert($newNumbers->toArray());
});
ON CONFLICT
, если СУБД поддерживает подобное. Например, у SQLite - ON CONFLICT DO
, у MySQL - INSERT IGNORE
. Это позволит избавиться от выгрузки данных из БД, что уменьшит потребление памяти приложением и сократит количество запросов.Query::insertOrIgnore()
, который будет глушить все ошибки от некоторых БД, но для некоторых не поддерживается. Поддерживаемые БД: MySQL, SQLite, PostreSQL.$numbers = collect($numbers)->unique()->mapWithKeys(function ($value, $key) {
return [$key => ['num' => $value]];
});
Model::query()->getConnection()->transaction(function () use ($numbers) {
Model::query()->insertOrIgnore($numbers->toArray());
});
$utms = [
'utm_source' => $_POST['utm_source'] ?? null,
'utm_medium' => $_POST['utm_medium'] ?? null,
'utm_campaign' => $_POST['utm_campaign'] ?? null,
'utm_term' => $_POST['utm_term'] ?? null,
'utm_content' => $_POST['utm_content'] ?? null,
];
// отфильтрует значения по empty
$utms = array_filter($utms);
// отфильтрует только null
$utms = array_filter($utms, fn($val) => $vall !== null)