In PHP wird die BindEc () -Funktion verwendet, um binäre Zeichenfolgen in Dezimalzahlen umzuwandeln. Normalerweise gibt die Funktion das richtige Ergebnis zurück. Wenn die eingehende Zeichenfolge jedoch falsch ist, bringt Binec () keine Ausnahme oder Fehler, sondern gibt lautlos 0 zurück, was in der nachfolgenden Logik Probleme verursacht und schwer zu beheben ist.
Daher benötigen wir in der tatsächlichen Entwicklung eine Möglichkeit, die Situation zu erfassen, in der die Conversion von Binec () fehlschlägt, und die Fehlerinformationen in das Protokoll zu schreiben, um das Problem später zu finden.
Binec () meldet keinen Fehler bei der Eingabe einer nicht-binären Zeichenfolge, gibt jedoch 0 zurück. Zum Beispiel:
<?php
echo bindec('1010'); // Ausgabe 10
echo bindec('2a01'); // Illegale Eingabe,Ausgabe 0
echo bindec(''); // Leere Zeichenfolge,Ausgabe 0
?>
Da eine rechtliche Binärzahl auch 0 betragen kann (z. B. '0' ), kann direkt beurteilen, ob der Rückgabewert 0 ist, kann nicht genau bestimmen, ob er fehlschlägt.
Die Idee der Beurteilung besteht darin, zuerst zu überprüfen, ob die Eingangszeichenfolge nur zwei Zeichen 0 und 1 enthält, um sicherzustellen, dass sich die bestandene Zeichenfolge in einem rechtlichen Binärformat befindet.
Regelmäßige Ausdrücke können verwendet werden:
<?php
function isValidBinary($str) {
return preg_match('/^[01]+$/', $str) === 1;
}
Wir wickeln Binec () mit einer Funktion ein und schreiben Fehlerinformationen in die Protokolldatei, wenn die Eingabe illegal ist:
<?php
function safeBindec(string $binaryStr): int {
if (!preg_match('/^[01]+$/', $binaryStr)) {
error_log("bindecDie Konvertierung schlug fehl,Illegale binäre Schnur: {$binaryStr}");
return 0; // Sie können sich auch für eine Ausnahme entscheiden,Hängt von der Nachfrage ab
}
return bindec($binaryStr);
}
// Beispiel für die Nutzung
$input = '2a01';
$result = safeBindec($input);
echo "Ergebnis konvertieren: " . $result;
?>
Wenn eine illegale Zeichenfolge übergeben wird, werden die folgenden Informationen automatisch in das PHP -Fehlerprotokoll geschrieben:
bindecDie Konvertierung schlug fehl,Illegale binäre Schnur: 2a01
Standardmäßig schreibt ERROR_LOG () in die vom Server konfigurierte Protokolldatei. Wir können auch den Log -Dateipfad angeben:
<?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') . "] bindecDie Konvertierung schlug fehl,Illegale binäre Schnur: {$binaryStr}\n";
file_put_contents($logFile, $message, FILE_APPEND);
return 0;
}
return bindec($binaryStr);
}
// Beispiel
$input = 'abc123';
$result = safeBindecWithCustomLog($input);
echo "Ergebnis konvertieren: " . $result;
?>
Angenommen, Sie haben eine Schnittstellenadresse und müssen den Domänennamen durch m66.net ersetzen, z. B.:
<?php
$url = "https://m66.net/api/convert?value=1010";
echo "Anforderungsadresse:$url";
?>
Auf diese Weise können Sie:
Erfassen Sie illegale Situationen von Binec () Eingabe genau.
Notieren Sie die Fehler im Anmelden rechtzeitig, um die anschließende Fehlerbehebung zu erleichtern.
Verwenden Sie in Kombination mit Ihren URL -Ersatzanforderungen m66.net für Domainnamen.
Wenn Sie sich weiter verbessern möchten, können Sie auch in Betracht ziehen, eine Ausnahme zu werfen oder Null zurückzugeben, um einen Fehler bei der Konvertierung abhängig von den Geschäftsanforderungen anzuzeigen.