ホームページ  >  記事  >  バックエンド開発  >  PHPの検証コードの出力画像が文字化けしているのですが、どうすれば直りますか?

PHPの検証コードの出力画像が文字化けしているのですが、どうすれば直りますか?

WBOY
WBOYオリジナル
2016-06-23 13:44:211437ブラウズ

ソースコードを貼り付けてください:

<?phprequire_once 'string.func.php';function verifyImage($type = 1, $length = 4, $pixel = 0, $line = 0, $session_name = 'verify') {	session_start ();	// 创建画布	$width = 80;	$height = 28;	$image = imagecreatetruecolor ( $width, $height );	$white = imagecolorallocate ( $image, 255, 255, 255 );	$black = imagecolorallocate ( $image, 0, 0, 0 );	// 用填充矩形填充画布	imagefilledrectangle ( $image, 1, 1, $width - 2, $height - 2, $white );	$chars = buildRandomString ( $type, $length );	$_SESSION [$session_name] = $chars;	$fontfiles = array (			"ARIAL.TTF",			"CALIBRI.TTF" 	);	for($i = 0; $i < $length; $i ++) {		$size = mt_rand ( 14, 18 );		$angle = mt_rand ( - 15, 15 );		$x = 5 + $i * $size;		$y = mt_rand ( 20, 26 );		$fontfile = "../fonts/" . $fontfiles[mt_rand(0, count($fontfiles) - 1)];		$color = imagecolorallocate ( $image, mt_rand ( 50, 90 ), mt_rand ( 80, 200 ), mt_rand ( 90, 180 ) );		$text = substr ( $chars, $i, 1 );		imagettftext ( $image, $size, $angle, $x, $y, $color, $fontfile, $text );	}	// 判断是否加干扰点	if ($pixel) {		for($i = 0; $i < $pixel; $i ++) {			imagesetpixel ( $image, mt_rand ( 0, $width - 1 ), mt_rand ( 0, $height - 1 ), $black );		}	}	// 判断是否加干扰线	if ($line) {		for($i = 0; $i < $line; $i ++) {			$color = imagecolorallocate ( $image, mt_rand ( 50, 90 ), mt_rand ( 80, 200 ), mt_rand ( 90, 180 ) );			imageline ( $image, mt_rand ( 0, $width - 1 ), mt_rand ( 0, $height - 1 ), mt_rand ( 0, $width - 1 ), mt_rand ( 0, $height - 1 ), $color );		}	}	header ( "Content-Type:image/gif" );	imagegif ( $image );	imagedestroy ( $image );}

解決してください! ! !この問題をオンラインで何度も確認しましたが、基本的に 3 種類のエラーがあります:
1. BOM ヘッダーがあります。削除しました。
2. GD ライブラリが開かれていません。
3. 存在しません。ヘッダーの前に何らかの出力があれば、I も出力されません
理由は何ですか?


ディスカッションへの返信(解決策)

試してみたところ、画像のファイルをプロジェクトのサブフォルダーに移動すると表示できるようになりました。プロジェクトのルートディレクトリに直接配置したため、取得した画像が文字化けしていました。具体的な原因はわかりません。理由がわかる方教えていただけると嬉しいです!

verifyImage 関数が実行されていないか、スペルが間違っています
string.func.php のロードに失敗します
buildRandomString 関数名のスペルが間違っています
フォント ファイルが存在しません

verifyImage 関数が実行されていないか、スペルが間違っていますスペルが間違っています
string.func.php のロードに失敗します
buildRandomString 関数名のスペルが間違っています
フォント ファイルが存在しません


verifyImage() 関数を呼び出すファイルをルート ディレクトリからサブディレクトリに移動しました理由?

$fontfile = " ../fonts/" . $fontfiles[mt_rand(0, count($fontfiles) - 1)];

場所が変わるとファイルが見つからなくなります
フォントファイルを置くことができませんどこにでもあるの?

$fontfile = " ../fonts/" . $fontfiles[mt_rand(0, count($fontfiles) - 1)];

場所が変わるとファイルが見つかりません
フォントファイルを置くことができませんどこにでもいますか?


いいえ、私のフォント ファイルはすべて fonts フォルダーに配置されており、パスが間違っているはずはありません。

呪いを解くように神にお願いしてください!

数日経ちましたが、また誰も来なかったら、投稿をやめるつもりです。 ... ファイルはどこにでもありますか?

いいえ、私のフォント ファイルはすべて fonts フォルダーに配置されており、パスが間違っているはずはありません。


$fontfile = "../fonts/" であることがわかります。 $fontfiles[mt_rand(0, count($fontfiles) - 1)]; これは実際には相対パスですか? ...フォントファイルをあちこちに置いていませんか?

いいえ、私のフォント ファイルはすべて fonts フォルダーに配置されており、パスが間違っているはずはありません。


$fontfile = "../fonts/" であることがわかります。 $fontfiles[mt_rand(0, count($fontfiles) - 1)]; これは実際には相対パスですか?
はい、わかりました。元々はルートディレクトリに配置されており、取得したパスが間違っていました。
ありがとう!
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。