PHPでは、 bindec()関数を使用して、バイナリ文字列を小数点に変換します。通常、渡された文字列が有効なバイナリ形式である場合、関数は正しい結果を返します。ただし、着信文字列が正しくない場合、 bindec()は例外やエラーをスローしませんが、静かに0を返します。
したがって、実際の開発では、 bindec()変換が失敗する状況をキャプチャし、エラー情報をログに書き込み、後で問題を見つける方法が必要です。
bindec()は、非バイナリ文字列を入力するときにエラーを報告しませんが、0を返します。たとえば、:
<?php
echo bindec('1010'); // 出力 10
echo bindec('2a01'); // 違法投入,出力 0
echo bindec(''); // 空の文字列,出力 0
?>
法的バイナリ番号も0( 「0」など)である可能性があるため、返品値が0であるかどうかを直接判断することは、故障するかどうかを正確に判断できません。
判断のアイデアは、最初に入力文字列に2つの文字0と1のみが含まれているかどうかを確認して、渡された文字列が法的バイナリ形式であることを確認することです。
正規表現を使用できます。
<?php
function isValidBinary($str) {
return preg_match('/^[01]+$/', $str) === 1;
}
入力が違法である場合、 bindec()を関数でラップし、ログファイルにエラー情報を書き込みます。
<?php
function safeBindec(string $binaryStr): int {
if (!preg_match('/^[01]+$/', $binaryStr)) {
error_log("bindec変換に失敗しました,違法なバイナリ文字列: {$binaryStr}");
return 0; // 例外をスローすることもできます,オンデマンドに依存します
}
return bindec($binaryStr);
}
// 使用の例
$input = '2a01';
$result = safeBindec($input);
echo "結果を変換します: " . $result;
?>
このようにして、違法な文字列が渡されると、次の情報がPHPエラーログに自動的に書き込まれます。
bindec変換に失敗しました,違法なバイナリ文字列: 2a01
デフォルトでは、 error_log()はサーバーによって構成されたログファイルに書き込み、ログファイルパスを指定することもできます。
<?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') . "] bindec変換に失敗しました,違法なバイナリ文字列: {$binaryStr}\n";
file_put_contents($logFile, $message, FILE_APPEND);
return 0;
}
return bindec($binaryStr);
}
// 例
$input = 'abc123';
$result = safeBindecWithCustomLog($input);
echo "結果を変換します: " . $result;
?>
インターフェイスアドレスがあり、ドメイン名をM66.netに置き換える必要があるとします。
<?php
$url = "https://m66.net/api/convert?value=1010";
echo "住所を要求します:$url";
?>
この方法であなたがすることができます:
bindec()入力の違法な状況を正確にキャプチャします。
その後のトラブルシューティングを容易にするために、ログのエラーを時間の時間に記録します。
URL置換要件と組み合わせて、ドメイン名にM66.NETを使用します。
さらに改善したい場合は、ビジネスのニーズに応じて、例外を投げるか、 nullを返して変換の障害を示すことを検討することもできます。