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";
}
}
}
?>
|
Avis des utilisateurs: 0
|
Avis des utilisateurs: 0
|
|
|
|
|
Type |
Écran tactile | Écran tactile |
|
Dimensions |
141.50 x 71.00 x 9.00 mm | 143.70 x 70.95 x 8.20 mm |
|
Poids |
175.00 g | 143.00 g |
|
Diagonale de l’écran |
4.97" | 5.00" |
|
Écran |
Couleur / IPS TFT 16,7M couleurs 1080 x 1920 px (4.97") 443 ppi | Couleur / IPS TFT 16M couleurs 720 x 1280 px (5.00") 294 ppi |
|
Protection de l’écran |
Corning Gorilla Glass Acheter une protection d'écran | Acheter une protection d'écran |
|
Deuxième écran |
 |  |
|
Protection de l’écran additionne |
 |  |
|
Autonomie en parole |
 | 2G: 1140 minutes (19.0 h) |
|
Autonomie en veille |
 | 2G: 363 Jusqu'à hrs (15.1 jours) |
|
Temps maximal de lecture |
nd | Video: 12 h (0.5 jours) |
|
Temps maximal de naviguer sur Internet |
nd | 4G: 10 h (0.4 jours) |
|
Type de batterie |
Li-Ion 2450 mAhAcheter un power bank | Li-Ion 3020 mAhAcheter un power bank |
|
Chargement rapide |
 |  |
|
Chargement sans fil |
 |  |
|
Mémoire interne |
64 GB | 16 GB, 32 GB |
|
Mémoire pour utilisateur |
 | 8 GB, 22 GB |
|
Mémoire RAM |
4 GB | 2 GB, 3 GB |
|
Carte mémoire |
 microSD, microSDHC, microSDXC à 256 GBAcheter une carte SD |  microSD, microSDHC, microSDXC à 128 GBAcheter une carte SD |
|
Système d'exploitation |
Android 8.1 Oreo | Android 7.0 Nougat |
|
Interface utilisateur |
- | EMUI 5.1 |
|
Processeur |
MediaTek Helio X27 MT6797X | Qualcomm Snapdragon 430 8937 |
|
Vitesse d'horloge |
2600 MHz | 1400 MHz |
|
GPU |
ARM Mali-T880 MP4 @875 MHz | Adreno 505 |
|
Écran tactile |
 |  |
|
Double SIM |
 |  |
|
Standard des cartes SIM |
DualSIM(nanoSIM, nanoSIM) | DualSIM(nanoSIM, nanoSIM) |
|
Mode DualSIM |
dual standby | dual standby |
|
Hybrid DualSIM |
 | nanoSIM, microSD |
|
Date de sortie |
 | II. trimestre 2017 |
|
Noms alternatifs |
- | DLI-AL10; DLI-AL10A; DLI-AL10B; DLI-TL20; Delhi |
|
Standard GSM |
850 900 1800 1900 | 850 900 1800 1900 |
|
Standard UMTS (3G) |
850 900 1900 2100 | 900 2100 |
|
Standard LTE |
FDD LTE: 2600, 2100, 1800, 800 TDD LTE: 2600, 2500, 2300, 1900 | FDD LTE: 2100, 1800, 850 TDD LTE: 2600, 2500, 2300, 1900 |
|
Standard 5G |
 |  |
|
Standard CDMA |
 | 850 |
|
Standard TD-SCDMA |
1900 2000 | 1900 2000 |
|
Standard UMA |
 |  |
P U B L I C I T É
|
Premier appareil |
 |  |
|
Type de caméra |
La norme |  |
|
Capteur photo |
16 Mpx | 13 Mpx |
|
Taille du capteur |
1/2,4 |  |
|
Résolution |
 | 4128x3096 px |
|
Zoom optique |
 |  |
|
Zoom numérique |
4x |  |
|
Distance focale |
22 mm |  |
|
Flash |
LED | LED |
|
Lampe flash dual-color LED |
 |  |
|
Résolution vidéo |
3840x2160 px | 1920x1080 px |
|
Formats vidéo |
H.264, H.265, MPEG4 | MPEG4, H.263, H.264 |
|
Supplémentaire |
AF, f/2.0 | - |
|
Deuxième appareil |
 |  |
|
Type de caméra |
La norme | nd |
|
Capteur photo |
16 Mpx | nd |
|
Taille du capteur |
1/2,4 | nd |
|
Zoom optique |
 | nd |
|
Zoom numérique |
4x | nd |
|
Distance focale |
22 mm | nd |
|
Flash |
LED | nd |
|
Lampe flash dual-color LED |
 | nd |
|
Résolution vidéo |
3840x2160 px | nd |
|
Formats vidéo |
H.264, H.265, MPEG4 | nd |
|
Supplémentaire |
AF, f/2.0 | nd |
P U B L I C I T É