今日、非常に奇妙なバグに遭遇しました。ローカルでは正常に動作する PHP プログラムを作成しましたが、それを当事者 A のサーバーに公開すると、バグにより検証コードが表示されませんでした。
関連する推奨事項: 「ThinkPHP チュートリアル 」
具体的な症状としては、小さなひび割れた画像アイコンが Chrome ブラウザに表示されることです。画像を右クリックして、新しいウィンドウで開きます。まだ小さなひび割れた画像であり、エラー メッセージは表示されません (xdebug 拡張機能と PHP エラー報告が有効な場合)。そうであれば、問題がないことを意味します。検証コードの URL ルーティングとビジネス ロジック コード。検証コードの生成プロセスに問題があります。デバッグのアイデアは次のとおりです。
1. GD ライブラリが正しくインストールされているかどうかを確認します。Linux では、yum またはapt または pecl を使用してインストールします。Windows では phpStudy の使用をお勧めします。統合環境では、よく使用される拡張機能が統合されており、右クリックして開くだけです。 (認証コード画像を別ウィンドウで開くと、エラーメッセージが表示され文字化けが多発する場合が該当します。エラーメッセージがある場合は、エラーメッセージに従ってデバッグを行ってください。)
##2. 検証コードによって呼び出されるフォントが見つからないかどうかを確認します。検証コードコンポーネントによって呼び出される一部のフォントがターゲットコンピュータにインストールされていないため、検証コードモジュールのソースコードを解析する必要があります。私は ThinkPHP の公式 think-captcha を使用しています。そのソース コードは、vendortopthinkthink-captchasrc で見つけることができます。vendortopthinkthink-captchaassets で、この検証コード プラグインには独自のフォントが付属していることがわかります。そのため、ThinkPHP の検証コードは基本的に不要です。フォントの問題、別の検証コード プラグインの場合は、この場所を確認する必要があります。
3. バグのある検証コード イメージとローカル テストの正常な検証コード イメージをダウンロードし、メモ帳を使用して表示して比較します。
#上の画像はローカル環境の検証コードイメージのメモ帳ですが、より専門的な 16 進エディタを使用してファイルの差異を分析します。
図に示すように、不良ファイル bad は、先頭に EF BB BF とその他の数字が追加されている点を除いて、まったく同じ内容であることがわかりました。理由としては、サーバー上に専門的なコードエディタがないため、運用保守担当者が通常の Windows のメモ帳を使用して画像を修正したためではないかと推測しています。 PHP コード。この BOM ヘッダーが追加されます。
3 番目の理由の場合、解決策は 2 つあり、1 つは検証コードの imagepng 出力画像コードを呼び出す前に、ob_clean を使用して php の出力バッファをクリアする方法です。コードの BOM をバッチで削除するためにいくつかのツールを使用することもあります。
ここでは ob_clean を使用し、think-captcha のメイン ファイルである Captcha.php の 203 行目の前に ob_clean() を追加して、完全に解決できるようにします。 。パフォーマンスと安定性に対する厳しい要件がある場合は、BOM をバッチで削除するツールを使用することをお勧めします。そのほうが安全です。同時に、editplus などの専門的なコード エディターをサーバーにいつでもインストールすることをお勧めします。コードを変更するために Windows メモ帳を使用しないでください。
以上がthinkphp で画像を表示できない場合はどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。