ランダムな検証コードは、最近の Web サイトで悪意のある攻撃や詐欺を防ぐ一般的な方法です。多くの Web サイトでは、ログイン、登録、パスワードの取得などのページでランダムな検証コードが使用されています。その中でも、PHP は一般的に使用されるバックエンド プログラミング言語として、ランダムな検証コードを生成するためによく使用されます。ただし、ランダムな検証コードを生成できないという共通の問題が発生することがあります。では、このエラーの正確な原因は何でしょうか?この記事では、ランダムな検証コードが生成できない理由を分析し、考えられる解決策を示します。
PHP では、関数を使用してランダムな検証コードを生成できます。たとえば、mt_rand() 関数を使用して、5 桁のランダムな確認コードを生成できます。
$code = mt_rand(10000,99999);
このコードは、10000 ~ 99999 の範囲のランダムな整数を生成します。ただし、一部の PHP 関数には呼び出しエラーまたはロジック エラーがあり、検証コードの生成に失敗します。この時点で、コード内の関数に問題があるかどうかを確認する必要があります。
まず、echo または var_dump() 関数を使用して、検証コード生成関数の結果を出力します。
$code = mt_rand(10000,99999); echo $code;
何も出力が表示されない場合は、検証コード生成関数に問題がある可能性があります。この時点で、問題だけをトラブルシューティングするために、他のコードをコメント アウトして、検証コード生成関数だけを実行するように試みることができます。
検証コード生成機能自体に問題がある場合は、他の検証コード生成機能を利用することも検討できます。たとえば、rand()、random_int()、その他の関数を使用できます。
ランダムな認証コードを生成した後、ユーザーが確認できるようにWebページに認証コードを出力する必要があります。入力。その中で、PHP の imagestring() 関数を使用して検証コードを出力できます。
header("Content-type: image/jpeg"); $im = imagecreatetruecolor(60, 20); $white = imagecolorallocate($im, 255, 255, 255); $black = imagecolorallocate($im, 0, 0, 0); imagefill($im, 0, 0, $white); imagestring($im, 5, 10, 5, $code, $black); imagejpeg($im); imagedestroy($im);
このコードは、60*20 ピクセルの検証コード画像を生成し、Web ページに出力します。ただし、一部の PHP 関数には呼び出しエラーや論理エラーが発生し、検証コードが出力されません。この時点で、コード内の関数に問題があるかどうかを確認する必要があります。
まず、echo または var_dump() 関数を使用して、検証コード出力関数の結果を出力します。
header("Content-type: image/jpeg"); $im = imagecreatetruecolor(60, 20); $white = imagecolorallocate($im, 255, 255, 255); $black = imagecolorallocate($im, 0, 0, 0); imagefill($im, 0, 0, $white); imagestring($im, 5, 10, 5, $code, $black); imagejpeg($im); imagedestroy($im);
出力が表示されない場合は、検証コード出力関数に問題がある可能性があります。この時点で、他のコードをコメントアウトして、検証コード出力関数だけを実行して、問題だけをトラブルシューティングすることができます。
認証コード出力機能自体に問題がある場合は、他の認証コード出力機能を利用することも検討できます。たとえば、imagepng() や imagegif() などの関数を使用できます。
PHP では、検証コード イメージの生成と出力に GD ライブラリを使用します。 GD ライブラリが存在しない、またはインストールされていない場合、検証コードを生成して出力することができません。この時点で、GD ライブラリがサーバーにインストールされているかどうかを確認する必要があります。
PHP 環境で phpinfo() 関数を実行して、GD ライブラリが存在するかどうかを確認できます。
phpinfo() 関数を実行すると、gd、gd-jpeg、gd-png、gd-gif などの関連する拡張子があるかどうかを確認できます。これらの拡張機能が利用できない場合は、サーバーに GD ライブラリをインストールする必要があります。 Ubuntu では、次のコマンドを使用して GD ライブラリをインストールできます:
sudo apt-get install php7.0-gd
場合によっては、ランダム検証が行われることがあります。コードは短期間に頻繁に生成されます。たとえば、ユーザーが 1 分以内に検証コードを複数回更新した場合、検証コードを頻繁に再生成する必要があるため、検証コードの生成が遅くなりすぎたり、生成できなかったりする可能性があります。この時点で、検証コードをキャッシュするという簡単な解決策を使用できます。
たとえば、検証コードとその生成時刻を $_SESSION に保存できます。検証コードの生成時刻と現在時刻との間隔が 30 秒未満の場合は、最後の検証コードを再生成せずに直接使用できます。
if(!isset($_SESSION['code']) || (time() - $_SESSION['time']) > 30){ $code = mt_rand(10000,99999); $_SESSION['code'] = $code; $_SESSION['time'] = time(); }else{ $code = $_SESSION['code']; }
上記の一般的な理由に加えて、ランダム検証コードの生成に失敗する可能性のある他の理由も考えられます。例えば、PHPの動作環境自体に問題がある、サーバーの負荷が高すぎる、などです。この時点で、問題を解決するには、PHP 構成ファイルをさらに確認するか、サーバーのパフォーマンスを最適化する必要があります。
概要
ランダムな検証コードの生成は、Web サイトの一般的なセキュリティ保護手段です。バックエンド プログラミング言語としての PHP も、ランダムな検証コードの生成によく使用されます。ただし、ランダムな認証コードを生成できないという問題が発生する場合があります。この記事では、ランダムな検証コードが生成できない考えられる理由を分析し、対応する解決策を提供します。ウェブサイトのセキュリティを確保するには、ランダムな検証コードを生成する際には細心の注意を払い、関連するコードと PHP 環境を定期的にチェックする必要があります。
以上がPHPページのランダム認証コードが生成できない場合はどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。