<?php
if (isset($_POST['savenewcfg'])) {
$template = '<?php
class config {
{{CONTENT}}
}';
$content = '';
foreach ($_REQUEST as $key => $value) {
if($key === 'savenewcfg') {
continue;
}
$content .= 'public $'.$key.' = \''.str_replace("'", "\'", $value).'\'; '."\n";
}
file_put_contents(
$configFile,
str_replace('{{CONTENT}}', $content, $template)
);
}
<?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];
}
offset()
и limit()
для загружаемых реляций 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']