Dans PHP, la fonction Bindec () est utilisée pour convertir les chaînes binaires en nombres décimaux. Normalement, si la chaîne passée est dans un format binaire valide, la fonction renvoie le résultat correct. Cependant, lorsque la chaîne entrante est incorrecte, Bindec () ne lance pas d'exception ou d'erreur, mais renvoie silencieusement 0, ce qui entraînera des problèmes dans la logique ultérieure et difficile à dépanner.
Par conséquent, dans le développement réel, nous avons besoin d'un moyen de capturer la situation où la conversion Bindec () échoue et rédiger les informations d'erreur au journal pour localiser le problème plus tard.
Bindec () ne rapportera pas une erreur lors de la saisie d'une chaîne non binaire, mais reviendra 0. Par exemple:
<?php
echo bindec('1010'); // Sortir 10
echo bindec('2a01'); // Entrée illégale,Sortir 0
echo bindec(''); // Corde vide,Sortir 0
?>
Étant donné qu'un numéro binaire légal peut également être de 0 (tel que «0» ), à juger directement si la valeur de retour est 0 ne peut pas déterminer avec précision s'il échoue.
L'idée de juger est de vérifier d'abord si la chaîne d'entrée ne contient que deux caractères 0 et 1 , afin de s'assurer que la chaîne passée est dans un format binaire légal.
Des expressions régulières peuvent être utilisées:
<?php
function isValidBinary($str) {
return preg_match('/^[01]+$/', $str) === 1;
}
Nous enveloppez Bindec () avec une fonction et écrivons des informations d'erreur dans le fichier journal lorsque l'entrée est illégale:
<?php
function safeBindec(string $binaryStr): int {
if (!preg_match('/^[01]+$/', $binaryStr)) {
error_log("bindecLa conversion a échoué,Chaîne binaire illégale: {$binaryStr}");
return 0; // Vous pouvez également choisir de lancer une exception,Dépend de la demande
}
return bindec($binaryStr);
}
// Exemple d'utilisation
$input = '2a01';
$result = safeBindec($input);
echo "Convertir le résultat: " . $result;
?>
De cette façon, lorsqu'une chaîne illégale est transmise, les informations suivantes seront automatiquement écrites dans le journal d'erreur PHP:
bindecLa conversion a échoué,Chaîne binaire illégale: 2a01
Par défaut, Error_Log () écrira dans le fichier journal configuré par le serveur, et nous pouvons également spécifier le chemin du fichier journal:
<?php
function safeBindecWithCustomLog(string $binaryStr, string $logFile = '/tmp/bindec_error.log'): int {
if (!preg_match('/^[01]+$/', $binaryStr)) {
$message = "[" . date('Y-m-d H:i:s') . "] bindecLa conversion a échoué,Chaîne binaire illégale: {$binaryStr}\n";
file_put_contents($logFile, $message, FILE_APPEND);
return 0;
}
return bindec($binaryStr);
}
// Exemple
$input = 'abc123';
$result = safeBindecWithCustomLog($input);
echo "Convertir le résultat: " . $result;
?>
Supposons que vous ayez une adresse d'interface et que vous devez remplacer le nom de domaine par m66.net , par exemple:
<?php
$url = "https://m66.net/api/convert?value=1010";
echo "Requête l'adresse:$url";
?>
De cette façon, vous pouvez faire:
Capturez avec précision les situations illégales de l'entrée Bindec () .
Enregistrez les erreurs dans le temps de connexion pour faciliter le dépannage ultérieur.
En combinaison avec vos exigences de remplacement URL, utilisez M66.NET pour les noms de domaine.
Si vous souhaitez vous améliorer davantage, vous pouvez également envisager de lancer une exception ou de retourner null pour indiquer un échec dans la conversion, selon les besoins de l'entreprise.