<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
// 1. Создаем уникальный ключ для этого конкретного запроса
$lockKey = 'request_lock:' . md5(json_encode($_REQUEST));
// 2. Пытаемся захватить ключ на 10 секунд
// Эта команда атомарная: только один процесс из двух победит.
$isLockAcquired = $redis->set($lockKey, '1', ['nx', 'ex' => 10]);
if ($isLockAcquired) {
// КЛЮЧ НАШ! Делаем свою работу
try {
// ... обращаемся к стороннему сервису, запускаем worker.php или ваще что угодно ...
// отвечаем клиенту об успехе операции
http_response_code(200);
echo json_encode(['status' => 'success']);
} catch(\Throwable $e) {
// Освобождаем ключ для будущих запросов в случае ошибки, чтобы не ждать 10с для переотправки.
$redis->del($lockKey);
// отвечаем клиенту, что произошла ошибка
http_response_code(500);
echo json_encode(['status' => 'error']);
}
} else {
// КЛЮЧ УЖЕ КЕМ-ТО ЗАНЯТ. Ничего не делаем.
// Просто отвечаем клиенту, что все ок или что запрос дублируется.
http_response_code(429); // Too Many Requests
echo json_encode(['status' => 'error', 'message' => 'Request already in progress']);
exit;
}
.get(0)
вернёт DOM-ноду, а не jQuery-объект. https://api.jquery.com/get/.eq(0)
https://api.jquery.com/eq/ $.ajax({
url: 'www.expample.ru/file.php',
type: 'POST',
data: { data: getSaveData() }, // переменная data не нужна
// ...
})
$.ajax({
url: 'www.expample.ru/file.php',
type: 'POST',
data: { data: $(form).serialize() },
// ...
})
$.ajax({
url: 'www.expample.ru/file.php',
type: 'POST',
data: { data: new FormData(form) },
// ...
})
const $form = $("#idForm");
$form.on('submit', function(evt) {
evt.preventDefault(); // отмена обычной отправки
$.ajax({
type: "POST",
url: $form.attr('action'),
data: $form.serialize(),
// ...
const form = document.getElementById('myForm');
form.addEventListener('submit', function(evt){
evt.preventDefault();
fetch(form.action, {
method: 'POST',
body: new FormData(form)
});
});
'Authorization:'
curl_setopt($curlhandle, CURLOPT_VERBOSE, true);
<?php
class KeysReplacer {
public $default = [
'id' => 'id',
'full_address' => 'adress',
'floorall' => 'floorall',
'build_year' => 'build_year',
];
public $services = [
'service_1' => [
'id' => 'internal_id',
'full_address' => 'locality',
'floorall' => 'floorall',
'build_year' => 'build_date'
],
'service_2' => [
'id' => 'ид',
'full_address' => 'полный_адрес',
'floorall' => 'этажность',
'build_year' => 'год_постройки'
],
];
public function __invoke($item, $from = null)
{
$result = [];
foreach($item as $key => $value){
$result[$from && isset($this->services[$from][$key])
? $this->services[$from][$key]
: $this->default[$key]] = $value;
}
return json_encode($result, JSON_UNESCAPED_UNICODE);
}
}
function getItem(){
return [
'id' => 1,
'full_address' => 'г. Москва',
'floorall' => 18,
'build_year' => 1990
];
}
$item = getItem();
$responseNormalizer = new KeysReplacer;
$response_0 = $responseNormalizer($item);
$response_1 = $responseNormalizer($item, 'service_1');
$response_2 = $responseNormalizer($item, 'service_2');
var_dump($response_0); // string(68) "{"id":1,"adress":"г. Москва","floorall":18,"build_year":1990}"
var_dump($response_1); // string(79) "{"internal_id":1,"locality":"г. Москва","floorall":18,"build_date":1990}"
var_dump($response_2); // string(112) "{"ид":1,"полный_адрес":"г. Москва","этажность":18,"год_постройки":1990}"
ssh username@old 'tar c .' | tar xvf - -C /home/username
class Base {
public function test($string){
// Что то делаем.
return $this;
}
public function chek($string){
// Что то делаем.
return $this;
}
public function hello(){
// Что то делаем.
return $this;
}
}
$base
->test('string1')
->chek('string')
->hello();
$dealsMap = array_combine(array_column($deals, 'id'), $deals);
print_r($dealsMap);
foreach ($ads as $ad) {
$idDeal = $ad['idDeal'];
if (!isset($dealsMap[$idDeal]['dateStop'])
|| ($dealsMap[$idDeal]['dateStop'] < $ad['dateStop'])) {
$dealsMap[$idDeal]['dateStop'] = $ad['dateStop'];
}
}
print_r($dealsMap);
array_column
много одинаковых значений, но с разными ключами. array_flip
для таких значений возвращает последний найденный ключ (например, 12856 вместо 32 в вашем случае).
Если значение встречается несколько раз, для обработки будет использоваться последний встреченный ключ, а все остальные будут потеряны.