-1

重複の可能性:
php で動的に生成された画像で html を使用できますか?

PHPでキャプチャを生成しようとしています。コードは正しいと思いますが、ブラウザで画像を取得できません..これはコードです:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<?php header('Content-type: image/png');?>
<?php session_start();
$md5 = md5(microtime() * time() );
$string = substr($md5, -5);
$captcha = imagecreatefrompng("./captcha.png");
$black = imagecolorallocate($captcha, 0, 0, 0);
$line = imagecolorallocate($captcha,233,239,239);
imageline($captcha,0,0,39,29,$line);
imageline($captcha,40,0,64,29,$line);
$_SESSION['key'] = md5($string);
imagestring($captcha, 5, 20, 10, $string, $black);
imagepng($captcha);?> 
</body>
</html>

png 画像は、このコードと同じフォルダーにあります。GDオプションはphpで有効になっています..私は無知です..助けていただければ幸いです...ありがとう

4

2 に答える 2

0

<?php header('Content-type: image/png');?>またはを設定する前に何も出力できませんsession_start();

画像を処理する画像スクリプトを作成してから、HTML内でそのスクリプトにリンクする必要があります

例:captcha.php

<?php 
session_start();
header('Content-type: image/png');
$md5 = md5(microtime() * time() );
$string = substr($md5, -5);
$captcha = imagecreatefrompng("./captcha.png");
$black = imagecolorallocate($captcha, 0, 0, 0);
$line = imagecolorallocate($captcha,233,239,239);
imageline($captcha,0,0,39,29,$line);
imageline($captcha,40,0,64,29,$line);
$_SESSION['key'] = md5($string);
imagestring($captcha, 5, 20, 10, $string, $black);
imagepng($captcha);
?>

あなたのHTML

<?php session_start(); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<img src="captcha.php"/>
</body>
</html>
于 2012-10-21T23:07:14.730 に答える
0

これがCAPTCHAイメージのソース(たとえば、「image.php」ファイル)であり、別の場所からロードされていると思います(たとえば、「captcha.php」から<img src="image.php" />)。session_start()「captcha.php」ファイルにも含める必要がある場合があります。

投稿したコードから、すべてのHTMLを削除するだけです。

また、原則として、準備が整うまでImageコンテンツタイプを送信しないでください(適切な場合は、最初にエラーを確認してください)。

<?php
    session_start();
    $md5 = md5(microtime() * time() );
    $string = substr($md5, -5);
    $captcha = imagecreatefrompng("./captcha.png");
    $black = imagecolorallocate($captcha, 0, 0, 0);
    $line = imagecolorallocate($captcha,233,239,239);
    imageline($captcha,0,0,39,29,$line);
    imageline($captcha,40,0,64,29,$line);
    $_SESSION['key'] = md5($string);
    imagestring($captcha, 5, 20, 10, $string, $black);
    Header('Content-type: image/png');
    imagepng($captcha);
?>

:MD5文字列のMD5を実行しています。あれは正しいですか?uniqid()の代わりに使用してmd5(microtime() * time() )、に保存$md5してみ_SESSIONませんか?

于 2012-10-21T23:08:38.003 に答える