class AmazonApiRateLimiter
{
/**
* Minimalna przerwa między zapytaniami (sekundy).
*/
const INTERVAL_SECONDS = 2;
/**
* Nazwa pliku blokady w katalogu log/.
*/
const LOCK_FILENAME = 'amazon_api_rate.lock';
/**
* @var string Pełna ścieżka do pliku blokady
*/
private $lockFilePath;
/**
* @var bool Tryb debug
*/
private $debug;
public function __construct($debug = false)
{
$this->debug = $debug;
$this->lockFilePath = MT_ROOT . '/../log/' . self::LOCK_FILENAME;
}
/**
* Czeka, jeśli ostatnie zapytanie było wykonane wcześniej niż INTERVAL_SECONDS temu.
*
* Musi być wywołane bezpośrednio przed każdym zapytaniem do Amazon API.
* Blokuje inne procesy (flock LOCK_EX) na czas weryfikacji i ewentualnego czekania,
* dzięki czemu kolejka zapytań jest respektowana globalnie.
*
* @return void
*/
public function wait()
{
$fh = fopen($this->lockFilePath, 'c+');
if ($fh === false) {
$this->debug('[DEBUG AmazonApiRateLimiter] Nie można otworzyć pliku blokady: ' . $this->lockFilePath);
return;
}
// Zablokuj - inne procesy czekają tutaj
flock($fh, LOCK_EX);
// Odczytaj czas ostatniego wywołania API
rewind($fh);
$content = fread($fh, 32);
$lastCall = (float)$content;
$now = microtime(true);
$elapsed = $now - $lastCall;
$waitTime = self::INTERVAL_SECONDS - $elapsed;
if ($waitTime > 0) {
$waitMicroseconds = (int)($waitTime * 1000000);
$this->debug('[DEBUG AmazonApiRateLimiter] Rate limit: czekam ' . round($waitTime, 3) . 's przed zapytaniem do API.');
usleep($waitMicroseconds);
}
// Zapisz aktualny timestamp jako czas ostatniego wywołania
ftruncate($fh, 0);
rewind($fh);
fwrite($fh, microtime(true));
fflush($fh);
// Zwolnij blokadę - następny proces może wejść
flock($fh, LOCK_UN);
fclose($fh);
}
/**
* Wypisuje komunikat diagnostyczny na stdout, jeśli tryb debug jest włączony.
*
* @param string $msg
* @return void
*/
private function debug($msg)
{
if ($this->debug) {
echo $msg . "\n";
}
}
}
?>
|
Opinioni degli utenti: 0
|
Opinioni degli utenti: 0
|
|
|
|
|
Tipo: |
Tattile | Tattile |
|
Resistenza all’acqua e alla polvere |
IP53 |  |
|
Dimensioni |
162.90 x 76.00 x 8.98 mm | 162.53 x 74.67 x 8.66 mm |
|
Peso: |
208.40 g | 210.80 g |
|
Diagonale dello schermo |
6.67" | 6.67" |
|
Display |
A colori / OLED 1,07G di colori 120 Hz 1080 x 2400 px (6.67") 395 ppi | A colori / AMOLED 68,7G di colori 120 Hz 1220 x 2712 px (6.67") 446 ppi |
|
Protezione dello schermo |
Corning Gorilla Glass Acquista protezione per lo schermo | Corning Gorilla Glass Acquista protezione per lo schermo |
|
Display supplementare: |
 |  |
|
Protezione dello schermo addizionale |
 |  |
|
Batteria standard: |
Li-Ion 5000 mAhAcquista power bank | Li-Po 6200 mAhAcquista power bank |
|
Caricamento rapido |
 | USB Power Delivery |
|
Caricamento senza fili |
 |  |
|
Memoria interna: |
256 GB | 256 GB, 512 GB |
|
Memoria RAM |
8 GB, 12 GB | 12 GB, 16 GB |
|
Scheda di memoria |
 |  |
|
Sistema operativo |
Android 12 | Android 14 |
|
Interfaccia: |
MIUI 13 | HyperOS |
|
Processore: |
MediaTek Dimensity 1080 MT6877TT | Qualcomm Snapdragon 7s Gen 2 SM7435-AB |
|
Clock del processore |
2600 MHz | 2500 MHz |
|
GPU |
ARM Mali-G68 MC4 | Adreno 710 |
|
Schermo tattile: |
 |  |
|
Due carte SIM: |
 |  |
|
Standard delle schede SIM |
DualSIM(nanoSIM, nanoSIM) | DualSIM(nanoSIM, nanoSIM) |
|
Modo DualSIM |
dual standby | dual standby |
|
Dual SIM ibrida |
 |  |
|
Introdotto sul mercato: |
4 trimestre 2022 | 3 trimestre 2024 |
|
Altri nomi di questo telefono |
Note 12 Pro+ 5G; 22101316UG; Xiaomi Redmi Note 12 Pro+ | Xiaomi Redmi Note 14 Pro+ |
|
Standard GSM: |
850 900 1800 1900 | 850 900 1800 |
|
Standard UMTS |
850 900 1900 2100 | 850 900 2100 |
|
Standard LTE |
FDD LTE: 2100, 1800, 900, 850, 800 TDD LTE: 2600, 2500, 2300, 2100, 1900 | FDD LTE: 2100, 1800, 900, 850, 700 TDD LTE: 3600, 3500, 2600, 2500, 2300, 2100, 1900 |
|
Standard 5G |
FDD 5G: 2100, 1800, 900, 850, 700 TDD 5G: 3700, 3500, 2600, 2500 | FDD 5G: 2100, 1800, 900, 850, 700 TDD 5G: 3700, 3500, 2600, 2500, 2300 |
|
Standard CDMA |
 |  |
|
Standard TD-SCDMA |
 |  |
|
Standard UMA: |
 |  |
P U B B L I C I T À
|
Prima fotocamera |
 |  |
|
Tipo di fotocamera |
Obiettivo standard | Obiettivo standard |
|
Modello della matrice di fotocamera |
 | OmniVision Light Fusion 800 |
|
Matrice |
200 Mpx | 50 Mpx |
|
Dimensione del sensore |
1/1,4 | 1/1,55 |
|
Dimensione del pixel |
 | 1 µm |
|
Zoom ottico |
 |  |
|
Numero di obiettivi |
7 | 6 |
|
Lunghezza focale |
24 mm |  |
|
Flash |
2x LED | LED |
|
Dual-color LED |
 |  |
|
Risoluzione video |
3840x2160 px | 3840x2160 px |
|
Formato video |
H.264, H.265, MPEG4 - 30 fps | H.264, H.265, MPEG4 - 30 fps |
|
Supplementare |
AF, OIS, f/1.65 | AF, OIS, f/1.6 |
|
Seconda fotocamera |
 |  |
|
Tipo di fotocamera |
Obiettivo grandangolare | Teleobiettivo |
|
Matrice |
8 Mpx | 50 Mpx |
|
Dimensione del sensore |
1/4 |  |
|
Risoluzione |
3264x2448 px |  |
|
Zoom ottico |
 |  |
|
Zoom senza perdita |
 | 2,5x |
|
Numero di obiettivi |
 | 5 |
|
Campo visivo |
119 ° |  |
|
Lunghezza focale |
 | 60 mm |
|
Flash |
2x LED | LED |
|
Dual-color LED |
 |  |
|
Formato video |
H.264, H.265, MPEG4 |  |
|
Supplementare |
FF, f/2.2 | AF, f/2.0 |
|
Terza fotocamera |
 |  |
|
Tipo di fotocamera |
Obiettivo macro | Obiettivo grandangolare |
|
Matrice |
2 Mpx | 8 Mpx |
|
Dimensione del sensore |
1/5 |  |
|
Dimensione del pixel |
1,75 µm |  |
|
Risoluzione |
1600x1200 px |  |
|
Zoom ottico |
 |  |
|
Numero di obiettivi |
3 |  |
|
Campo visivo |
 | 120 ° |
|
Flash |
2x LED |  |
|
Dual-color LED |
 |  |
|
Formato video |
H.264, H.265, MPEG4 |  |
|
Supplementare |
FF, f/2.4 | FF, f/2.2 |
P U B B L I C I T À