CentOS – 画像認証「Text_CAPTCHA」使用方法!
Updated:
今回はWindowsで試してみた時と同じように、「Text_CAPTCHA」の使用に挑戦してみました。
↓Windowsでのインストール・使用はこちら↓
↓CentOSへのインストールはこちら↓
作業記録Permalink
【前提条件】
- OSはCentOS5.5
- WebサーバはApache2.2
- PHPは5.1.6
1.作業用ディレクトリの作成Permalink
Webサーバのドキュメントルートに「Text_CAPTCHA」用の作業ディレクトリを作成します。 当方は以下のようにしました。
ドキュメントルート
|
+captcha(Text_CAPTCHA用ディレクトリ)
|
+fonts(使用するフォントファイルを格納するディレクトリ)
|
+img (作成された画像ファイルを格納するディレクトリ)
2.フォントの準備Permalink
画像認証に使用するフォントを先ほど作成した「fonts」ディレクトリに配置します。 フォントは自分の気に入ったものをネットで探してもよいし、Windowsのフォントフォルダにあるものを使用してもよいです。 当方は、オーソドックスにWindowsのフォントフォルダの「COUR.TTF」をサーバにコピーして使用します。
3.PHPソース作成Permalink
ネットで調べると非常に色々とサンプルがあります。 適当なものを用意します。 当方は以下のようにしました。 (ファイル名は [適当].php)
<?php
session_start();
//画像のパス
$img_dir = "captcha/img/"; // ← 画像を格納するディレクトリを指定
$file_path = $img_dir.md5(session_id()).".png";
//POST送信があれば認証
if($_SERVER['REQUEST_METHOD'] == "POST")
{
if($_POST['input_captcha_auth'] == $_SESSION['captcha_auth'])
{
//OK時の処理を記入
$status = TRUE;
}else{
//NG時の処理を記入
$status = FALSE;
}
if(is_file($file_path))
{
unlink($file_path);
}
}else{
//CAPTCHA
require_once "Text/CAPTCHA.php";
$optins = array(
'width' => 150, // ← 表示する画像の横幅を指定
'height' => 60, // ← 〃 高さを指定
'output' => 'png',
'imageOptions' => array(
'font_size' => 20 ,
'font_path' => 'captcha/fonts/', // ← フォントのあるディレクトリを指定
'font_file' => 'COUR.ttf', // ← フォントファイル名を指定
'text_color' => "#FFFFFF", // ← 画像に表示される文字の色を指定
'lines_color' => "#000000", // ← 〃 ラインの色を指定
'background_color' => "#666666") // ← 画像の背景色を指定
);
$captcha = Text_CAPTCHA::factory('Image');
$captcha->init($optins);
//画像を生成
file_put_contents($file_path,
$captcha->getCAPTCHAAsPNG());
//画像文字列をセッションに格納
$_SESSION['captcha_auth'] = $captcha->getPhrase();
}
//画像の掃除(POST未送信の画像)
$dir = opendir($img_dir);
while(($file_list = readdir($dir)))
{
$file = $img_dir .$file_list;
if(is_file($file))
{
if(filemtime($file) < time()-3600)
{
unlink($file);
}
}
}
?>
<!DOCTYPE HTML>
<html>
<meta charset=Shift-JIS>
<title>CAPTCHA TEST</title>
<?php
if(is_file($file_path))
{
print("<img src=\"".$file_path."\">\n"
."<form method=\"post\" action=\"\">\n"
."<p><input type=\"text\" name=\"input_captcha_auth\"></p>\n"
."<p><input type=\"submit\" name=\"button\" value=\"送信\" /></p>"
."</form>\n");
}
?>
</html>
4.確認Permalink
前述のphpファイルをWebサーバのドキュメントルートに配置して表示させます。 うまくいけば以下のような画面が表示されるはずですが、なぜか画像が表示されません。 Apacheのエラーログを見てみると、以下のようなものが。。。
PHP Warning: file_put_contents(captcha/img/14b3db5a9b86c8f0373e5d9b2c84760c.png) [[function.file-put-contents](function.file-put-contents "function.file-put-contents")]: failed to open stream: Permission denied in /var/www/html/sample031.php on line 48
パーミッションがおかしくて画像が書き込めない? パーミッションを777にしたら、このエラーは解決。 すると次は、こんなエラー。
PHP Warning: file_put_contents() [[function.file-put-contents](function.file-put-contents "function.file-put-contents")]: The 2nd parameter should be either a string or an array in /var/www/html/sample031.php on line 48
関数「file-put-contents」の第2引数は文字列か配列でないといけない? Windowsでは動いていたコードがなぜ? この第2引数がどうなっているのか少し調べてみたら、確かにWindows側とCentOS側で内容がまったく違う。 どこをどう見てもわからないし、ネット調べてもよくわからない。 おそらく環境が異なるから、なのだが・・・
ということで、CentOSで「Text_CAPTCHA」は諦めました。
5.別のCAPTCHAを導入Permalink
Pearを使わず、PHPだけで動作するCAPTHCAにしました。 こちら → Visual and Audio CAPTCHA(通称、PhpCaptcha) 導入方法は「Text_CAPTCHA」よりも簡単でした。 ↓こちらを参照してください↓ PHPプロ!TIPS+ 出来上がった画像はこんな感じ。
設定方法にもよると思いますが「Text_CAPTCHA」より綺麗な気がします。
ということで、この「PhpCaptcha」をうちのサーバ(Webサイトのお問合せ)に導入することにします。
今日の作業は以上です。
ではまた。
Comments