<?php
$str = 'https://testy-dlya-medsester.ru/nmo/2892-nastavnichestvo-kak-metod-adaptatsii-molodykh-spetsialistov-v-sestrinskoj-deelnosti/Question-2892-3ecd193a222eb56c35ec4cb7895ee08a';
$result = explode('/Question-', $str, 2)[0] ?? '';
var_dump($result);
$schedule->job(new SyncChangesFrom1C)
->everyMinute()
->withoutOverlapping()
->runInBackground();
while(true) {
//делаем работу
sleep(10);
}
return 0;
withoutOverlapping()
по умолчанию ставит лок на 24 часа (на 1440 минут) и если скрипт крутится больше этого времени то будет запущен второй экземпляр. <?php
$emails = [
'test@mail.com', 'te.st@mail.com', 'test+test@mail.com'
];
foreach($emails as $email) {
echo $email.' -> '.normalize_email($email)."\n";
}
//test@mail.com -> test@mail.com
//te.st@mail.com -> test@mail.com
//test+test@mail.com -> test@mail.com
function normalize_email(string $email): string
{
$email = mb_strtolower($email);
$email_parts = explode('@', $email, 2);
//для случаев email+чтоугодно@mail.com
if(str_contains($email_parts[0], '+')) {
$ex = explode('+', $email_parts[0]);
$email_parts[0] = end($ex);
}
$email_parts[0] = preg_replace('![^a-zA-Z0-9а-яА-ЯёË]+!u', '', $email_parts[0]);
return $email_parts[0].'@'.$email_parts[1];
}
file_put_contents(APP_PATH . '/conf/uniq_id.txt', $numb);
//логируем стек вызовов
ob_start();
debug_print_backtrace();
$trace = ob_get_contents();
ob_end_clean();
file_put_contents(APP_PATH . '/conf/backtrace.txt', $trace, FILE_APPEND);
increment
и decrement
для изменеия балансаpublic function updateBalance($bet_amount): void
{
$this->decrement('balance', $bet_amount);
}
UPDATE `users` SET `balance` = `balance` - $bet_amount WHERE id = ...
lockForUpdate()
чтобы исключить любые конфликты на уровне БД и тогда redis-локи в принципе можно убрать. try_files
location / {
try_files $uri $uri/ /index.php?$query_string;
}
$_SERVER['REQUEST_URI']
prepareForValidation()
https://promokod.pikabu.ru/shops/5ka
curl -L -I "https://promokod.pikabu.ru/shops/5ka"
HTTP/1.1 200 OK
Server: nginx
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
Cache-Control: no-cache, private
Date: Fri, 06 Oct 2023 12:56:29 GMT
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 58
Set-Cookie: XSRF-TOKEN=eyJpdiI6ImZuTllpTWRIb2ZDalF5.......TkyOWY3In0%3D; expires=Fri, 13-Oct-2023 12:56:29 GMT; Max-Age=604800; path=/