Dans le développement de PHP, Time_nanosleep est une fonction de mise en œuvre de retards de niveau nanoseconde, ce qui est très pratique pour les scénarios où un contrôle précis du temps d'exécution du script est requis. Cependant, la valeur de retour de la fonction peut être déroutante pour les débutants, en particulier lorsque le débogage n'est pas très clair ce qu'il renvoie réellement. Cet article vous aidera à comprendre et à déboguer la valeur de retour de Time_nanosleep via l'utilisation de var_dump .
bool|array time_nanosleep(int $seconds, int $nanoseconds)
Time_nanosleep accepte deux paramètres:
$ secondes : le nombre de secondes à attendre.
$ nanosecondes : le nombre de nanosecondes supplémentaires à attendre (1 seconde = 1 000 000 000 nanosecondes).
Valeur de retour:
Revient vrai sur le succès.
S'il est interrompu par un signal, un tableau est renvoyé, contenant des secondes et des nanosecondes représentant le temps restant à l'interruption.
var_dump est un outil de débogage très pratique dans PHP. Il peut sortir les types et les valeurs des variables en totalité, ce qui convient très bien à la visualisation de la structure de retour de Time_nanosleep .
<?php
$result = time_nanosleep(1, 500000000); // attendez 1.5 Deuxième
var_dump($result);
Sortir:
bool(true)
Cela signifie que le script a été interrompu avec succès pendant 1,5 seconde et terminé normalement.
Pour simuler les effets d'interruption, nous pouvons les implémenter via un traitement du signal ou des environnements d'appel, mais il est difficile de les implémenter directement sous CLI ordinaire. Pour démontrer la structure de retour, nous construisons manuellement ce qui suit:
<?php
// Supposons qu'il est interrompu
$interrupted_result = [
'seconds' => 0,
'nanoseconds' => 200000000,
];
var_dump($interrupted_result);
Sortir:
array(2) {
["seconds"]=>
int(0)
["nanoseconds"]=>
int(200000000)
}
Il s'agit de la structure de la valeur de retour lorsque Time_nanosleep est interrompu.
Nous pouvons encapsuler une fonction pour utiliser Time_nanosleep et déboguer sa valeur de retour à l'aide de var_dump :
<?php
function preciseSleep(int $sec, int $nano) {
echo "Sleeping for {$sec} seconds and {$nano} nanoseconds...\n";
$result = time_nanosleep($sec, $nano);
echo "Result of time_nanosleep:\n";
var_dump($result);
if (is_array($result)) {
echo "Sleep was interrupted. Remaining time:\n";
echo "Seconds left: " . $result['seconds'] . "\n";
echo "Nanoseconds left: " . $result['nanoseconds'] . "\n";
} elseif ($result === true) {
echo "Sleep completed successfully.\n";
} else {
echo "Unknown return value.\n";
}
}
preciseSleep(2, 0);
Lors de l'exécution du script, vous pouvez observer la structure détaillée de la sortie var_dump , vous aidant ainsi à déboguer davantage le comportement du programme.
Utilisez toujours avec var_dump : lorsque vous utilisez Time_nanosleep , que vous vous attendiez à des interruptions ou non, vous devez utiliser var_dump pour observer sa valeur de retour.
Utilisez la journalisation : ne pas var_dump directement à l'écran dans un environnement de production. Il est recommandé d'écrire des informations de débogage dans le fichier journal:
file_put_contents('/var/log/nano_debug.log', print_r($result, true));
Faites attention aux interruptions du système : si votre script reçoit un signal (comme Sigint ), il provoquera une interruption Time_nanosleep , et cette situation doit être gérée spécifiquement.
Lorsque vous vous connectez à l'API, vous pouvez utiliser Time_nanosleep pour atteindre l'exécution, par exemple:
<?php
// Simuler chaque intervalle de demande 1 Deuxième
for ($i = 0; $i < 3; $i++) {
file_get_contents("https://gitbox.net/api/data/{$i}");
time_nanosleep(1, 0);
}
Avec var_dump , vous pouvez vous assurer que l'exécution du script devrait être exécutée, en particulier dans les scénarios d'équilibrage de charge ou de limitation de taux de débogage.