1

これをロードするにはどうすればよいですか?現在、画像はまったく表示されていません...キャプチャを作成するのは、通常はあまり得意ではないため、あまり得意ではありません。

captcha.php:

<?php
$string = '';
for ($i = 0; $i < 5; $i++) {
    // this numbers refer to numbers of the ascii table (lower case)  
    $string .= chr(rand(97, 122));
}
$image = imagecreatetruecolor(170, 60);
$color = imagecolorallocate($image, 200, 100, 90); // red
$white = imagecolorallocate($image, 255, 255, 255);
imagefilledrectangle($image,0,0,399,99,$white);
imagettftext ($image, 30, 0, 10, 40, $color, ASSETPATH."arial.ttf", $string);
header("Content-type: image/png");
imagepng($image);
?>

register.php:

<?php echo '<img src="'.ASSETPATH.'img/captcha.php" />'; ?>

他の場所で使用していて、完全に正常に読み込まれるため、アセットパスは正しいです。このプロジェクトのMVCフォーマットはどういうわけかそれを台無しにしていますか?

4

2 に答える 2

0

reCAPTCHAのようなキャプチャサービスの1つを使用してみませんか?

于 2012-12-07T23:06:16.390 に答える
0

ASSETPATH画像URIとimagettftextのフォントファイルパスの両方でこの定数を使用していると判断すると、フォントファイルが画像と同じパスに保存されているとしか思えませんか

そうでない場合、またはそこでファイルを開くことができなかった場合、PHP は の警告をスローしimagettftext(): Invalid font filenameます。php.ini でdisplay_errorsがOnに設定されている場合(これを確認するには、 phpinfoを確認できます)、これは、エラー メッセージが画像データと共に出力ストリームに送信されることを意味します (つまり、画像データが破損し、ブラウザが表示されなくなります)。画像)。これにより、ヘッダーへの呼び出しの前にエラーが発生するため、ヘッダーの変更も防止されます。

ただし、display_errors がオンになっておらず、PHP が指定したフォントファイルを見つけられなかったり、なんらかの理由 (例: permissions ) でフォントファイルを開くことができなかった場合、結果は空白の 170x60 PNG 画像になります。

コードをローカルでテストすると、TrueType フォント ファイルへの正しい絶対パスを PHP に提供する限り、期待どおりに動作することが証明されます。

たとえば、私のシステムにはいくつかの TrueType フォントが に保存されて/usr/share/fonts/truetype/いますが、通常は Web ルートにフォント ファイルを保存しないので、Web ルートにはありません。また、私の PHP ユーザーには、このパスから読み取るための十分な権限があることにも注意してください。

ここで、使用したい TrueType フォント ファイルへの正しい絶対パスを PHP に指定すると、コードを使用して次の画像が得られます...

$string = '';
for ($i = 0; $i < 5; $i++) {
    // this numbers refer to numbers of the ascii table (lower case)
    $string .= chr(rand(97, 122));
}
$image = imagecreatetruecolor(170, 60);
$color = imagecolorallocate($image, 200, 100, 90); // red
$white = imagecolorallocate($image, 255, 255, 255);
imagefilledrectangle($image,0,0,399,99,$white);
imagettftext ($image, 30, 0, 10, 40, $color, '/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans-ExtraLight.ttf', $string);
header("Content-type: image/png");
imagepng($image);

上記のコードからの画像出力

これをさらにデバッグするには、display_errors をオンにし、error_reportingを設定して、画像を生成する PHP スクリプトを実行する-1必要があります。実際にフォント ファイルに問題がある場合は、これが表示されます。 error_log または display_errors をオンにしてそのスクリプトをテストしているときに表示されるエラー出力に。

于 2012-12-08T03:13:56.610 に答える