goo blog サービス終了のお知らせ 

ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

PHPで減色処理:プログラムと、結果

2006-02-03 01:23:46 | PHP

 PHPで256インデックスカラーで表現するため、減色処理を行う話。
 実際にプログラムをかいてみました

まずは、その結果

 左が、元の画像。右が、その結果

うーん、たしかに、2段目、3段目のカベが荒いけど、十分なんじゃーないでしょーか?




 で、やり方は、今まで触れてきたとおり、こんなかんじ

1.
  Rについて、0,100,200,255,
  Gについて、0,100,200,255
  Bについて、0,100,200,255 計4X4X4=64階調を登録しておく

2.あとで、ソートが簡単になるように、これら、64階調の頻度に、下駄をはかせて、頻度でソートしたら、かならずこいつらが、上位になるようにする(総ドット数分、頻度を足しこめば、絶対こいつらが上位にくる

3.全部のドットについて、頻度を数える。
 ただし、まったく同じ色というわけでなく、ある程度の誤差範囲を決め、その範囲内だったら、その色とみなして、頻度を数える。

4.そこから、上位256色を選び、インデックスカラーとして登録する。

5.PHPには、ここで使っているように、imagecolorclosestっていう関数で、一番近い色を探してくれるので、それを使って、インデックスカラーを選び、描画する。




 で、これが、それを書いたプログラム
<?php

   //画像の作成
    $img = imagecreatefromjpeg("gentest.jpg"); 
    $x = imagesx ($img);
    $y = imagesy ($img);
    $newimg = imagecreate($x,$y);

    // 1.64階調を登録しておく
    $ix = 0;
    for($i = 0 ; $i < 4 ; $i++)
    {
	for($j = 0; $j < 4 ; $j++)
	{
		for($k = 0 ; $k < 4 ; $k ++)
		{
			switch($i)
			{
			case 0:
				$r[$ix] = 0;
				break;
			case 1:
				$r[$ix] = 100;
				break;
			case 2:
				$r[$ix] = 200;
				break;
			case 3:
				$r[$ix] = 255;
				break;
			}
			switch($j)
			{
			case 0:
				$g[$ix] = 0;
				break;
			case 1:
				$g[$ix] = 100;
				break;
			case 2:
				$g[$ix] = 200;
				break;
			case 3:
				$g[$ix] = 255;
				break;
			}
			switch($k)
			{
			case 0:
				$b[$ix] = 0;
				break;
			case 1:
				$b[$ix] = 100;
				break;
			case 2:
				$b[$ix] = 200;
				break;
			case 3:
				$b[$ix] = 255;
				break;
			}
			//2.64階調の頻度に、下駄をはかせて
			$ken[$ix] = $x * $y;
			$ix++;
		}
	}
    }

    // 3.全部のドットについて、頻度を数える
    for($i = 0 ; $i < $x ; $i+=7)
    {
    //7を足している理由は、あとで書きます
       for($j = 0 ; $j < $y ; $j +=7)
       {
            $rgb = imagecolorat($img, $i,$j);
            $rr = ($rgb >> 16) & 0xFF;
            $gg = ($rgb >> 8) & 0xFF;
            $bb = $rgb & 0xFF;
            for($k = 0 ; $k < $ix ; $k ++)
	    {
		if ( 	($r[$k]-3 <= $rr ) && ($r[$k]+3 >= $rr ) &&
			($g[$k]-3 <= $gg ) && ($g[$k]+3 >= $gg ) &&
			($b[$k]-3 <= $bb ) && ($b[$k]+3 >= $bb ))
		{
			$ken[$k] = $ken[$k] + 1;
			break;
		}
	    }	
	    if ($k == $ix )
	    {
		$r[$ix] = $rr;
		$g[$ix] = $gg;
		$b[$ix] = $bb;
		$ken[$ix] = 0;
		$ix = $ix + 1;
	    }	
       }
    }

    // 頻度数をもとにソート
    for($i = 0 ; $i < $ix ; $i ++ )
    {
       for($j = $i+1 ; $j < $ix ; $j ++)
       {
          if ( $ken[$i] < $ken[$j] )
           {
                   $tr = $r[$i];
                   $tb = $g[$i];
                   $tg = $b[$i];
                   $r[$i] = $r[$j];
                   $g[$i] = $g[$j];
                   $b[$i] = $b[$j];
                   $r[$j] = $tr;
                   $g[$j] = $tg;
                   $b[$j] = $tb;
		}
	}
    }

    // 4.そこから、上位256色を選び、インデックスカラーとして登録する。
    for($i = 0 ; $i < $ix ; $i ++ )
    {
	if ( $i >= 256 )
	{
		break;
	}
	imagecolorallocate ($newimg, $r[$i],$g[$i],$b[$i]);    
    }

    //5.一番近い色を探して、描画する
    for($i = 0 ; $i < $x ; $i++)
    {
       for($j = 0 ; $j < $y ; $j ++)
       {
            $rgb = imagecolorat($img, $i,$j);
            $rr = ($rgb >> 16) & 0xFF;
            $gg = ($rgb >> 8) & 0xFF;
            $bb = $rgb & 0xFF;
            imagesetpixel ($newimg,$i,$j, imagecolorclosest($newimg, $rr,$gg,$bb));
       }
    }

    //画像出力
    header("Content-type: image/jpeg");
    header("Cache-control: no-cache");
    imagejpeg($newimg);

    //画像の消去(メモリの解放)
    imagedestroy($img);
    imagedestroy($newimg);
?>

(上記のプログラム中、 < > ¥は本当は半角です。赤字のところは、元のファイルを指定するところですので、環境によって変わります)

 上記で、色を取り出すとき、7つづつ、とびとびに取り出している理由は、とびとびにしないで、1つ1つ取り出して、ロリポップで動かしたら、30秒以上計算しているエラーになったので、7つとびにしてみました。

 なお、3.で「ある程度の誤差範囲を決め」という誤差範囲ですが、+-3にしてみました(if文で、聞いている)


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PHPのGCを使うため、減色処理することを考えてみる(その2:代表的な色抽出)

2006-01-31 13:15:35 | PHP

 昨日のブログ(PHPのGCを使うため、減色処理することを考えてみる(その1))おおぼけ書いてましたね(^^;)あまりにも、ショーもない間違いなんで、修正しておきました。

 修正して、書き直したけど、うーん、やっぱり、単純に、網点で対応するとすると、大きな網点をつくるか、トーンジャンプ(階調間の幅が大きくなりすぎて、滑らかに見えない、グラデーションなどだと、模様になっちゃう)が起こっちゃいそうな気がします。




 つーと、やっぱり、使っている色のうち、一番頻度の多い色を256色選んで、それをインデックスにして、あとは、近似する?

 でも、そーすると、あおぞらに、ちょこっと、熊さんがいるとかいうやつの場合、青空の色に多くのインデックスがとられ、くまさんに、ちょこっとしか、色がいかないようになりそうだ。。

 色の違いと頻度について、なんか、数値化して、評価できればいいけど。。
 すぐに思いつかん。




とりあえず、階調と、頻度、両方あわせて
1.ある誤差範囲を決めて、その中で同色のものの頻度を数え
2.一番頻度の多い色からえらんで、インデックスカラーにする
3.でも、ある程度の階調は、あらかじめ用意しておく。

ってかんじかなあ。
プログラム的には、
1.Rについて、0,100,200,255,
Gについて、0,100,200,255
Bについて、0,100,200,255 計4X4X4=64階調を登録しておく(今日は、計算、間違えないよ ^^)

2.あとで、ソートが簡単になるように、これら、64階調の頻度に、下駄をはかせて、頻度でソートしたら、かならずこいつらが、上位になるようにする(総ドット数分、頻度を足しこめば、絶対こいつらが上位にくる

3.全部のドットについて、頻度を数える。
 ただし、まったく同じ色というわけでなく、ある程度の誤差範囲を決め、その範囲内だったら、その色とみなして、頻度を数える。

4.そこから、上位256色を選び、インデックスカラーとして登録する。

5.PHPには、ここで使っているように、imagecolorclosestっていう関数で、一番近い色を探してくれるので、それを使って、インデックスカラーを選び、描画する。

って、こんなかんじなのかなあ。。。

今日も、時間がないので、確かめられない、ウィリアムのいたずらなのでしたあ。。


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PHPのGCを使うため、減色処理することを考えてみる(その1:31日修正)

2006-01-30 12:08:41 | PHP

 PHPで、GCを使って、前に画像をだしたとき、インデックスカラーにしないとうまくいかなかった。

 なので、今日は、減色処理の方法について、しらべてみた。
(はじめは、そのつもりだった・・あとで、減色しなくても、いい気がした)




 まず、減色処理一般のお話は、ここ

で、ImageMagicというフリーソフトで減色処理できる
ImageMagicのサイトはここ
http://www.imagemagick.org/script/index.php


使い方はここ




プログラムの話。
このひとは、距離を求めている。ただ、この人もかいてるけど、グラデのところだと、トーンジャンプしちゃうよねえ。。
 
うーんと、初めにあげたのを見ると。ディザ法?それって、網点だよねえ・・・

あみてん??そっか(@_@)!あみてんにすればいいんじゃん(^^)

・つまり、1ドットを(かりに)4ドットで表現する。

・元のRが0のときは、4ドットRは0、
 元のRが1のときは、3ドットRは0、1ドットRは4
 元のRが2のときは、2ドットRは0、2ドットRは4
 元のRが3のときは、1ドットRは0、3ドットRは4
 元のRが4のときは、4ドットRは4

とすると、
(以下、31日修正)
R一色につき、4ドットとびにすると、256/4=64階調、
これが、3色なので、
64の3乗>>256(>_<!)

逆に、256に収まるようにするとすると、
1色6階調、って、さすがにそれだと、おおきな網点になってしまう。
(あるいは、間引くか?)

 なので、この考えは、無理ですね(>_<!)

 ほかの方法を、気が向いたら、今度書きます

(以上、31日修正)

 とりあえず、思いついたことを、ここにメモした次第であります!
 (つーことで、これは、やってないのだ)


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PHPで輪郭抽出して、ぬり絵をつくる

2006-01-23 13:09:23 | PHP

 前に書いた、ぬり絵化計画?をPHPでやってみようと思います。のつづき、

 そこで書いた、ぬり絵に必要な手続きは、こんなかんじ。
    1.イメージをとってくる
    2.グレー化する
    3.輪郭抽出
    4.イメージ出力

 で、前に、1.2.4は、前回やったので、今日は、3の輪郭処理もいれて、やってみました。

 つまり、左の写真が、右の写真のようになります。







で、そのソースコードは、こちら
<?php
    $cx = array(	0,0,0,
			0,1,0,
			0,0,-1);
    $cy = array(	0,0,0,
			0,0,1,
			0,-1,0);

    $amp	=	1.0;

   //画像の作成
    $img = imagecreatefromjpeg("test.jpg"); 
    $x = imagesx ($img);
    $y = imagesy ($img);
    $newimg = imagecreate($x,$y);

    // グレーの0から256のインデックスをつくる
    for($i = 0 ; $i < 256 ; $i++)
    {
	imagecolorallocate ($newimg, $i,$i,$i);    
    }
    
    for($i = 0 ; $i < $x ; $i++)
    {
       for($j = 0 ; $j < $y ; $j ++)
       {
            $rgb = imagecolorat($img, $i,$j);
            $r = ($rgb >> 16) & 0xFF;
            $g = ($rgb >> 8) & 0xFF;
            $b = $rgb & 0xFF;
            $gray = (int)(0.3* $r + 0.59 * $g + 0.11* $b);
            imagesetpixel ($newimg,$i,$j, imagecolorclosest($newimg, $gray,$gray,$gray));
       }
    }
    //画像の消去(メモリの解放)
    imagedestroy($img);


    $img = imagecreate($x,$y);
    // グレーの0から256のインデックスをつくる
    for($i = 0 ; $i < 256 ; $i++)
    {
	imagecolorallocate ($img, $i,$i,$i);    
    }

    for($i = 1 ; $i < $x-1 ; $i++)
    {
       for($j = 1 ; $j < $y-1 ; $j ++)
       {
		$d[0] = imagecolorat($newimg, $i-1,$j-1) & 0xFF;
		$d[1] = imagecolorat($newimg, $i-1,$j) & 0xFF;
 		$d[2] = imagecolorat($newimg, $i-1,$j+1) & 0xFF;
 		$d[3] = imagecolorat($newimg, $i,$j-1) & 0xFF;
 		$d[4] = imagecolorat($newimg, $i,$j) & 0xFF;
 		$d[5] = imagecolorat($newimg, $i,$j+1) & 0xFF;
 		$d[6] = imagecolorat($newimg, $i+1,$j-1) & 0xFF;
 		$d[7] = imagecolorat($newimg, $i+1,$j) & 0xFF;
 		$d[8] = imagecolorat($newimg, $i+1,$j+1) & 0xFF;
		$xx= 	$cx[0]*$d[0] + 
			$cx[1]*$d[1] +
			$cx[2]*$d[2] +
			$cx[3]*$d[3] +
			$cx[4]*$d[4] +
			$cx[5]*$d[5] +
			$cx[6]*$d[6] +
			$cx[7]*$d[7] +
			$cx[8]*$d[8];
		$yy= 	$cy[0]*$d[0] + 
			$cy[1]*$d[1] +
			$cy[2]*$d[2] +
			$cy[3]*$d[3] +
			$cy[4]*$d[4] +
			$cy[5]*$d[5] +
			$cy[6]*$d[6] +
			$cy[7]*$d[7] +
			$cy[8]*$d[8];
		$zz = (int)($amp * sqrt($xx * $xx + $yy * $yy));
		if ( $zz > 255 )
		{
			$zz = 255;
		}
		$zz = 255 - $zz;
		imagesetpixel ($img,$i,$j, imagecolorclosest($img,$zz,$zz,$zz));
       }
    }

    //画像出力
    header("Content-type: image/jpeg");
    header("Cache-control: no-cache");
    imagejpeg($img);

?>

(上記プログラムで、< > は本当は半角です。赤字は、ファイル名で、環境によって変わります)

輪郭部分に関しては、C言語で学ぶ実践画像処理の輪郭抽出部分を、言語にあわせて、引用しています。

前回同様、なんか、インデックスカラーでないと、うまくいかないようなので、
グレーの0から255までのインデックスを作って、
それを描画させるようにしています。

詳しい説明は、また機会があったときに。。

でも、作ってみて、さあ塗ろうと思ったら。。。

うーん、この塗り絵、むずかしすぎるとおもうんですけどおおおお。

。。だから、頭を使っていいのか(^^;)

簡単なわけではないのね。。

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PHPで、カラー写真をグレー化処理してみる

2006-01-19 09:14:39 | PHP

 前に書いた、ぬり絵化計画?をPHPでやってみようと思います。
 そこで書いた、ぬり絵に必要な手続きは、こんなかんじ。
    1.BMPをとってくる
    2.グレー化する
    3.輪郭抽出
    4.BMP出力

 で、PHPでやる場合、1と4は別にBMPでなくても、JPEGでOKなので、JPEGでやることにして、今日は、2のグレー化処理までをやってみようとおもいます。
  
 つまり、左の写真が、右の写真のようになります。







 で、このためにやることは、上記の前のブログで書いたように

1.JPEGを読み込む
2.グレー化する
3.JPEG出力

で、そのソースコードは、こちら
<?php

    //1.JPEGを読み込む
    $img = imagecreatefromjpeg("test.jpg"); 

   //画像の作成
    $x = imagesx ($img);
    $y = imagesy ($img);
    $newimg = imagecreate($x,$y);

    // グレーの0から256のインデックスをつくる
    for($i = 0 ; $i < 256 ; $i++)
    {
	imagecolorallocate ($newimg, $i,$i,$i);    
    }

    //2.グレー化する  
    for($i = 0 ; $i < $x ; $i++)
    {
       for($j = 0 ; $j < $y ; $j ++)
       {
            $rgb = imagecolorat($img, $i,$j);
            $r = ($rgb >> 16) & 0xFF;
            $g = ($rgb >> 8) & 0xFF;
            $b = $rgb & 0xFF;
            $gray = (int)(0.3* $r + 0.59 * $g + 0.11* $b);
            imagesetpixel ($newimg,$i,$j, imagecolorclosest($newimg, $gray,$gray,$gray));
       }
    }

    //3.JPEG出力
    header("Content-type: image/jpeg");
    header("Cache-control: no-cache");
    imagejpeg($newimg);

    //画像の消去(メモリの解放)
    imagedestroy($img);
    imagedestroy($newimg);
?>

(上記プログラムで、< > は本当は半角です。赤字は、ファイル名で、環境によって変わります)

なんか、インデックスカラーでないと、うまくいかないようなので、
グレーの0から255までのインデックスを作って、
それを描画させるようにしています。

詳しい説明は、また機会があったときに。。


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PHPでIPアドレスからサーバー名を取得、またはその逆をする方法と、中国語パソコン辞典

2005-12-28 15:27:58 | PHP

 ごめんなさい。デスクトップのリンクやファイルを整理(削除)するので、ここに書いて、保存しておこうとしているため、まったく関連のない話題を続けて書きます。



■■ PHPで、IPアドレスからサーバー名を取得
   または、サーバー名からIPアドレスを取得

CGI同様、
●IPアドレスからサーバー名を取得
    string gethostbyaddr( string ip_address );

●サーバー名からIPアドレスを取得
    string gethostbyname( string hostname );

●使い方
このPHPは、引数にipaddr=調べたいIPアドレス とすると、ホスト名を
       引数にhost=調べたいホスト とすると、ipアドレスを
いれてくる。ただし、関数的に調べられないと、引数の値を返すようだ。
ソースは、こんなかんじ
<?
	//------------------------------//
	//	必要な値の取得		//
	//------------------------------//
	//	パラメータを配列に入れとく
	foreach($_POST as $key => $val)
	{
		$para[$key] = $val;
	}
	foreach($_GET as $key => $val)
	{
		$para[$key] = $val;
	}

	//	ホストとIPアドレス、引数から受け取る
	$host	=	$para['host'];
	$ipaddr	=	$para['ipaddr'];

	//	ホストとIPアドレス、不明なら受け取る
	if 	( ( $ipaddr	!=	"" ) && ( $host	==	"" ) )
	{
		$host =		gethostbyaddr($ipaddr);
	}
	else if ( ( $ipaddr	==	"" ) && ( $host	!=	"" ) )
	{
		$ipaddr =	gethostbyname($host);
	}	
	
	//	表示
	header("Content-type: text/plain");
	header("Cache-control: no-cache");
	print("HOST:". $host . "¥n");
	print("ipaddr:". $ipaddr . "¥n");
?>

(上記の< > ¥ は、本当は半角です)

 で、上記のソースを、たとえば、addrchk.phpとかいう名前で、ローカルのhtdocs
においてブラウザから

http://127.0.0.1/addrchk.php?ipaddr=127.0.0.1

とか、

http://127.0.0.1/addrchk.php?host=localhost

とか入れる。





■■ CGIで、ホスト名からIPアドレスを取得する

CGI(perl)の場合もPHP同様、gethostbynameをつかう。

ここ
http://www.7key.jp/program/perl/gethostbyname.html

に詳しいやり方がある。




■■ 日中パソコン辞典 

こんなサイトがあった。http://www.qiuyue.com/jc.htm

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

イメージタグで呼び出す、画像のアクセスカウンタ(PHPバージョン)

2005-12-20 17:09:26 | PHP

前のブログ(これ)で

「イメージタグで呼び出すアクセスカウンタ」

のCGI(Perl)版をやったので、今度はPHP版。

 つまり、<img src="htp://www.12345.com/counter.php">

 のように、イメージタグで呼びだす、画像として扱うアクセスカウンタについてです。





■■ PHP版の場合の方法

image関数を使って書いてみました。
参考にしたサイトはここです。

PHP:gif、png等の画像を動的に生成するには?:image関数(イメージ):グラフの作成
http://www.res-system.com/item/374


 なぜ、image関数をつかったかというと、いいサンプルがここに載っていて、それが、検索サイトで、たまたま、上のほうに引っかかったからです。それだけの理由(なので、他にもやり方は、いろいろとあると思います。最善かどうかも??)。

 で、ファイルカウンタ部分は、ここを参考にしました
PHPでアクセスカウンタ&解析 - 画像カウンタ
http://ponk.jp/php_access/index.php?page=2


 ここの、サンプルプログラムの
// アクセスカウンタ2
から
fclose($fp);
 までを、ちょっと書き換えて作っています(kensuという関数内です)
 これを使った理由も、検索サイトで、たまたま、上のほうに引っかかったからです(これも、ほかにもっと書き方あると思います)。

で、このkensuという関数を呼び出すと、返り値に、カウンタの数が帰ってくるようになってます。この関数の引数にファイル名を指定できるようにしています。




■■ PHPソース
で、ソースはこんな感じです
<?php
    //出力する文字(アクセス数)の取得
    $out_str = kensu("xmldtp.txt");

   //画像の作成
    $img = imagecreate(60, 20);

    //色の作成(背景色)
    $backcol = imagecolorallocate($img, 160, 160, 160);

    //背景色を塗る
    imagefilledrectangle($img, 0, 0,60, 20, $backcol);

    //色の作成(文字)
    $col = imagecolorallocate($img, 255, 255, 255);

    //文字を書く
    imagestring($img, 2, 10, 4, $out_str, $col);

    //画像出力
    header("Content-type: image/png");
    header("Cache-control: no-cache");
    imagepng($img);

    //画像の消去(メモリの解放)
    imagedestroy($img);

//--------------------------------------//
//	アクセスのカウントをする	//
//--------------------------------------//
function kensu($fname)
{
	$fp = @fopen($fname, "r+");
	if ( $fp == NULL )
	{
		$fp = @fopen($fname, "w");
		if ( $fp == NULL )
		{
		   return -1;
		}
		flock($fp, LOCK_EX);
        	$count	=	1;
	}
	else
	{
		flock($fp, LOCK_EX);
		$count = fgets($fp);
		$count++;
		rewind($fp);
	}
	fputs($fp, $count);
	fclose($fp);
	return $count;
}

?>

(上記の< > ¥ はプログラム上は全角でなく半角にしてあります)

 これを保存し(たとえばcounter.phpとかいう名前で)、PHPが動くところに起きます。

●注意
 ロリポップの場合、属性を777にしないと、エラーになります。
 なお、フォルダに入れる場合、フォルダも777にしておいたほうが、確実かも??
 でも、777にすることは、ろりぽでは、推奨されていません。

■■ 呼び出し方法
イメージタグで呼び出します。
<img src="http://呼び出しサイト/counter.php">みたいなかんじ。

■■ 参照サイト
 参考にしたサイトは、上記の2つのサイトです。
http://www.res-system.com/item/374
http://ponk.jp/php_access/index.php?page=2




 なお、ここまでやると、じつは、昨日のIPアドレスやホスト名取得の話とあわせると、
この方たちのサイトにかいてあるような、一見アクセスカウンタのように見えて、訪問者のIPを残しておくようなCGIというような物も作れます。
 昨日のプログラムで得たIPを、今日のプログラムでやっているように、ファイルに書き出した後、今日の、アクセスカウンタプログラムをやればできます。

 でも、そういうことを、企画しているのではありません。

 あと、わるいやつが、昨日のように、IPからホスト名を探すプログラムとあわせて、
 「あんたの会社は、●●だろう、いいつけてやるぞ、言われたくなかったら、お金振り込め!」みたいな、ホームページを作る人がいるかもしれませんので、注意です。
(いままで、出てこないのが、不思議なんだけど。。。技術的には、ケータイでサブスクライバIDから、地域を割り出すより、簡単なんだけどね)

 ホームページに、アクセスしてきただけでは、どのサーバーまでの情報しか分かりません。
 個人情報は、流出しないのです。あなたが教えない限り
(このやり方でなく、マシンの中に入ってきた場合は、話は別だけど)。

 ただし、メールの返信は、やばいです。
 つーか、そもそも、メールのアドレスに、名前入れてる人もいるしいー。。。(^^;)


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

スパム防止のために、ぐにゃとかぼやけた文字をいれさせる画像認証の方法(PHPとPerl版)

2005-12-13 18:39:16 | PHP

 今、まぐまぐBookの投票をしてたら、最後に、ぼやけた文字をいれさせるところがあって、そこの上に、「視覚障害の人はこちら」とかあった気がした・・
 
 で、「そうそう、これって、視覚障害の人、みえないじゃん!どーすんだ?」
 と思って、ちょこっとしらべてみた結果

   &

 そもそも、それって、どうやって、出すんだろう??

 についてのメモです(移動するので、USBメモリに入れるの面倒なんで、ブログに書いた)




 そもそも、それは、Captchaという。
 説明は、 こちら http://www.memb.jp/~deq/voice/captcha/wikipedia-captcha.html

 で、それを、PHPでやるには、PEAR::Text_CAPTCHAを使う。
 使い方は、こちら http://www.doyouphp.jp/sample/sample_others_captcha.shtml

 PERLでやるには、Perlの場合、CPANのGD::SecurityImage みたい
 こちら http://search.cpan.org/dist/GD-SecurityImage/




 で、やっぱ、視覚障害の問題とかあるみたい。そのニュース
http://japan.cnet.com/news/media/story/0,2000047715,20059708,00.htm

 でもでも、冷静に考えたら、まぐまぐBOOKで、「視覚障害のかたはこちら」とか書いてあっても、視覚障害がある人は、そもそも、その文字すらみえないんではないんかい??

 それと、これって、OCRとかで、破られないのかなあ??
 あ、破られないような文字にしてあるのか(^^;)


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PHPUnitのPEAR版でユニットテスト(その2:sourceforge、JUnitと比較)

2005-12-09 16:34:55 | PHP

 前に書いた
PHPUnitのPEAR版でユニットテストをしてみる(その1)
のつづきです。

 今度は、以前、Junitの本に書いてあったソースを、sourceforge版のPHPUnit用に書き換えて実験してみましたが(ここ
 そのソースをPear版のPHPUnitに書き換えると同時に、コメントいただいた内容を参考に、GUIを使ってみたいと思います。




■■ 前回までのお話
●PEAR版をダウンロードしてきました
ここ http://pear.php.net/package/PHPUnit

●そこの、PHPUnit.phpのソースの中にあるサンプルを切り出して、動かしてみました。


■■ まず、テスト用のソースを用意する

テスト用のソースを用意します。以前のsourceforge版用のPHPUnitのPEAR版でユニットテストをしてみる(その1)のソースを基本的に使います。
(このソースは、そこに書かれている、Junitの本のものをPHP用に直したものです)

まず、ソースは、テスト対象(SimpleCount.php)になるものと、テストを実行する用(SimpleCountTest.php)の、2種類が必要です。

テスト対象のソースは、(当然ながら)前にsourceforge版で示したものと同じです
(sourceforge版かPEAR版かは、あくまでも、テストをする人の好みの話で、元のソースは、テストツールによって書き換えないといけないようでは、困るから、当然、同じものが使えないと困る)。
<?php
class SimpleCount {
	var	$CARROT_CODE = "1234";
	var	$CARROT_NAME = "carrot";	//	27ページと違うけど、29ページに、こう修正とある
    /**
     *  商品コードをいれると、文字列を返す
     *
     */
    function getShohinName($name) {
		if ( $name == $this->CARROT_CODE )
		{
			return $this->CARROT_NAME;
		}
		return NULL;
    }
}
?>

(上記の < > ¥は、実際には、半角)
これを、SimpleCount.phpとして、保存します。


 で、肝心のテストするプログラム、SimpleCountTest.phpは、こんなかんじ
<?php
require_once("SimpleCount.php");	//	先に、テスト対象を宣言する
require_once("PHPUnit.php");
require_once("PHPUnit/GUI/HTML.php");

class SimpleCountTest extends  PHPUnit_TestCase  {

    /**
     *  コンストラクタ
     */
    function SimpleCountTest($name) {
        $this->PHPUnit_TestCase($name);
    }

    /**
     *  初期処理
     */
     function setUp() {
     }

    //--------- ここから、テストをかくのだ
    /**
     *  getShohinNameのテスト
     */
     function testGetShohinName() {

		//	本に書いてあるのを、PHPにしただけ
	$simple = new SimpleCount();
	$data = "1234";
        $this->assertEquals("carrot",$simple->getShohinName($data));

     }
}

//------------------------------------------------------//
//	ここが、以前とちがうところ			//

$suite = new PHPUnit_TestSuite("SimpleCountTest");
$result = new PHPUnit_GUI_HTML($suite);
$result->show();

?>

(上記の < > ¥は、実際には、半角)
赤のところが、PEAR用に書き換えたところ
青のところが、PEAR用でかつ、GUI用に書き換えたところです。

で、これを、SimpleCountTest.phpという名前で保存して、自分のホームのところにおきます。




■■ 実際にブラウザで動かしてみる
自分のホームページのURLは、日本全国(いや、世界的に)http://127.0.0.1/なので
http://127.0.0.1/SimpleCountTest.php をブラウザで見てみると、
こんなかんじに出てきます。

そこで、SimpleCountTest NOT EXECUTEDの前のチェックボックスをクリックして、チェックを入れてから、run testsボタンをクリックすると、こんな感じになって、

テストOKの画面になります。

ちなみに、(手順が逆ですが)、SimpleCountTest.phpの
$this->assertEquals("carrot",$simple->getShohinName($data));
の"carrot"を、"にんじん"に変えてわざと間違えると、

といった感じになります。




これで、PHPUnitのお話は、おしまい(のはず)


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PHPUnitのPEAR版でユニットテストをしてみる(その1)

2005-12-08 10:03:14 | PHP

 以前のブログ(これこれ)で、sourceforge版のPHPUnitの使い方をやったので、今日は、PEAR版のPHPUnitでもやってみました。
 結論から言うと、PHP5.0でも動きます。sourceforge版のように、修正する必要もありません。それはいいのですが。。




■■ インストール
 まず、PEAR版のPHPUnitがあるページからダウンロードします。
 ここ http://pear.php.net/package/PHPUnit
(昨日うまくいかなかったけど、今日はOKになっていた)

 ダウンロードすると、いまだと、PHPUnit-1[1].3.2.tgz っていうファイルのなっているので、解凍レンジで、解凍します。出てきたフォルダの中に、どんどん入っていくと、こんなファイル&フォルダが入っているところに出くわします。
 PHPUnitのフォルダ
 PHPUnit.php
 package.xml

ここで、PHPUnit.phpと、 PHPUnitのフォルダを、自分のサイトのホーム(apacheのhtdocsのフォルダの中)におきました(べつに、そこでなくても、includeしたときに、そのパスが見えればOKですけど)

■■ とりあえず、サンプルをやってみる

 PHPUnit.phpの中に、サンプルが書いてあったので、まず、それをやってみました。
 テストプログラムは、こんなプログラムです。

<?php
 require_once 'PHPUnit.php';

 class MathTest extends PHPUnit_TestCase {
     var $fValue1;
     var $fValue2;

     function MathTest($name) {
       $this->PHPUnit_TestCase($name);
     }

     function setUp() {
       $this->fValue1 = 2;
       $this->fValue2 = 3;
     }

     function testAdd() {
       $this->assertTrue($this->fValue1 + $this->fValue2 == 5);
     }
 }

 $suite = new PHPUnit_TestSuite();
 $suite->addTest(new MathTest('testAdd'));

 $result = PHPUnit::run($suite);
 print $result->toHTML();
 ?>

(上記の、全角の < > ¥は、実際には半角にしています)

 このファイルをMathTest.phpと名前をつけて、自分のサイトのホームに保存します。

これは、前の例だと、SimpleCountTestに相当する、テストプログラムところです。
 ということは、テスト対象となる、前の例でいう、SimpleCountのクラスが必要になるはずなのですが、今回そのテスト対象となる、(テストクラスのMathTestからTestをとった)Mathクラスは、すでにPHPを入れたときに入っているので、今回わざわざ書かなくても、実験できます。

 
■■ 実験してみる
 ということで、あとは、ブラウザでみてみましょう
 自分のローカルサイトは、だれでもhttp://127.0.0.1/のはずなので、

http://127.0.0.1/MathTest.php

 をみてみます。

 そうすると。。。こんなかんじです。





この1行だけ、でます。。地味(>_<!)

 じゃあ、間違えたらどうなるか
$this->fValue1 = 2;
 のところを、わざと、
$this->fValue1 = 1;
 として、再読み込みすると





(紫色の部分は、実際には、MathTest.phpまでのパスが入ります=人によってちがう)

うーん、これまた、地味!!

なんか、みんな、sourceforge版を紹介している気持ちがわかるような。。。
(って、そういうわけじゃないか ^^;)

 GUIっていうフォルダがPHPUnitフォルダの下にあるので、もっと派手?にするGUIもあるのかなあ?あっても、すぐにやりかたわかんないから(つーか、サンプルには、それが書いていないので)こんかいは、ここまで。




■■ いちいちかかなくてもいい方法
 なお、PHPUnit.phpのコメントの中に書かれているサンプルの下に、こういう風なことも出ています。テストプログラムのしたのほうを、こんなふうに書き換えます(赤字がかきかえ)
<?php

require_once 'PHPUnit.php';

 class MathTest extends PHPUnit_TestCase {
     var $fValue1;
     var $fValue2;

     function MathTest($name) {
       $this->PHPUnit_TestCase($name);
     }

     function setUp() {
       $this->fValue1 = 1;
       $this->fValue2 = 3;
     }

     function testAdd() {
       $this->assertTrue($this->fValue1 + $this->fValue2 == 5);
     }
 }

 $suite  = new PHPUnit_TestSuite('MathTest');
 $result = PHPUnit::run($suite);
 print $result->toHTML();
?>

(上記の、全角の < > ¥は、実際には半角にしています)

つまり、
$suite = new PHPUnit_TestSuite();
$suite->addTest(new MathTest('testAdd'));

$suite = new PHPUnit_TestSuite('MathTest');

 と書くと、addTestをしなくても、MathTestの中にあるテストを全部addしてテストしてくれるみたいです。でも、ただそれだけなので、地味さは、かわんなかったりします。




 ではつぎは、いままでsourceforge版で使ってきた、SimpleCountだとどうなるかについては、今度気がむいたときに。。

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PHPUnitをJUnitと比較しながらユニットテスト(その2:PHP ERRORで、はまる)

2005-12-06 20:55:35 | PHP

 昨日のブログの
PHPUnitを使って、JUnitと比較しながら、PHPのユニットテストしてみる(その1)
のつづきについて、今回は書きます。

 なお、昨日のそのブログにトラックバックいただいた記事にかかれています、PEARのPHPUnitについては、さっき、落としてきたので、気が向いたら、今度その話でかきますね。

 それと、なんで、じゃあsourceforge版のほうをやってるのかというと。。

 YAHOOでPHPUnitを検索したら、日本語のサイトの上位に、sourceforge版を使っている人のサイトにひっかかったから。。で、それを参考にしたからでーす(^^)v

 そんだけの理由です(つーか、ウィリアムのいたずらは、その程度のノリで、このブログを書いてまーす。本家同様、ちょーーーいい加減です)

 そうすると、「YAHOOの検索について、情報の偏りがある」っていうことになるんじゃあ、っていう話になりますけど、それは、まったくそのとおり!!と思います。その話も、気が向いたら、別の機会に書きますね。

 では、本題、PHPUnitのお話です




■■ 前回の話まで
 前回のブログでは、

●ダウンロードしてくる
●プログラムを作成する
●プログラムを送る
●実行する

までやりました。ここまでの作業で、PHPUnitがインストールされて、プログラムはできてないので、エラーで表示される状態まできました。

 ということで、次は、ちゃんとしたプログラムを書いて、正常に動作させるところです。

(なお、このブログ中、「ろりぽ」とは、レンタルサーバー屋さんの「ロリポップ」のことです)

■■ 正しいプログラムをつくってみる
 そこで、今度は、ただしいプログラムを書いてみます。
 きのうの本「JUnitによるテストファースト開発入門」ISBN 4-7973-2572-0の 27ページの内容をPHPになおして、こんなかんじでつくってみました。
<?php
class SimpleCount {
	var	$CARROT_CODE = "1234";
	var	$CARROT_NAME = "carrot";	//	27ページと違うけど、29ページに、こう修正とある
    /**
     *  商品コードをいれると、文字列を返す
     *
     */
    function getShohinName($name) {
		if ( $name == $this->CARROT_CODE )
		{
			return $this->CARROT_NAME;
		}
		return NULL;
    }
}
?>

(上記のうち、全角の< > ¥は、本当は半角にする)
ただし、$CARROT_NAMEは、"にんじん"でなく、29ページで、"carrot"と修正し、正常に動作させているので、ここでは"carrot"にしておきます。
 これをSimpleCount.phpとして保存します。
 

■■ それを転送してみて、表示すると。。エラーになる
 そして、ろりぽのホームのサーバーに、SimpleCount.phpとして、送ります(現在のものを上書きします)。
 このとき、すでに属性は変更されているので、今回は、属性変更しなくてOKです。

 で、ブラウザで、テストプログラムSimpleCountTest.phpをみると。。

 こんなふうに、phpunit.php の241行目で、PHP エラーになります。ほんとうは、正しいプログラムをいれたので、エラーになるはずはないのですが。。

 なお、上記のイメージ中、紫色のところは、実際には、この文字が出るのではなく、自分のホームページのパスが入ります(人によってちがいます)。


■■ エラーの原因と、対応策

 では、なんで、このエラーになるのか&このエラーをなおすには、どうしたらいいか??ということですが、それについては、このサイトに以下のように詳しく書いてありました。
(以下、斜体部は、そこからの引用)


set_error_handler() に空文字をセットするとエラーになるようになったみ
たいですね。

以前のエラーハンドラーに戻すのに set_error_handler() を使っているの
がそもそも間違いなので、phpunit.php の 241 行目は

restore_error_handler();

に修正するのが正しいでしょう。


ということで、PHPUnit.phpを開いて、そこの241行目、
set_error_handler($old_handler); // revert to prior error handler
という行を
restore_error_handler();
に書き換えて、保存します。

■■ 修正したPHPUnit.phpを入れてみてみる
 修正したPHPUnit.phpを、ろりぽのじぶんのサイトに送って(上書きして)
 ブラウザで、テストプログラムSimpleCountTest.phpをみると。。

こんなふうに、できています。




 で、おしまいです。。。

 なんか、わざわざツール使わなくても、自分でメソッド呼び出して(場合によっては、そういう自動生成プログラムを作成して)、ファイルにログみたいに書き出して、そのログをLocationで表示させれば、エビデンスも一緒に取れるので、そっちのほうが、便利・・・とかいうと、Unitファンの人に、殺されそうなので、決していわないように(^^);


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PHPUnitを使って、JUnitと比較しながら、PHPのユニットテストしてみる(その1)

2005-12-06 14:03:52 | PHP

PHPUnitを使って、ユニットテストをしてみようと思います。
で、Junitと比較しやすいように目の前にあった、
「JUnitによるテストファースト開発入門」ISBN 4-7973-2572-0 という本にある、23ページと27ページにある、
SimpleCountTestの例に基づいて、やりたいと思います。

SimpleCountというのは、こういうやつだそうです(その本の23ページ引用)
商品コード"1234"を入力すると文字列"carrot"が出力される

今回は、テストファーストで、まず関数(メソッド)を書いてエラーをだすところまで

なお、このサイト(http://www.1x1.jp/php/)を全面的に参考にしています。




■■ 1.ダウンロードしてくる
http://sourceforge.net/projects/phpunit/から、PHPUnitをダウンロードする。
 ダウンロードのところをクリックしていくと、ミラーサイトを選んだりして、最終的には、とってこれる。
 tgzの形式なんだけど、保存したら、なぜか、拡張子は、gzになっていた。

 この保存したものを「解凍レンジ」で解凍すると、フォルダが出てくる。一番下のフォルダには、
   phpunit.php
   phpunit_test.php
   runtests.php
   runtests2.php
   stylesheet.css
   ChangeLog
   README
といったファイルがはいっている

■■ ロリポップでテストするために
 で、このPHPUnitは、PHP3,4用である。うちの環境は5。
 なんで、ろりぽが、PHPUnit4だった気がしたので、ろりぽにおくった。
 ろりぽのホームにこれらのファイルを送り、属性を777にした
(送ったままだと、実行しない。777にしなくてもOKだと思うけど、なんにすれば、えらーにならないか、よくわかんないので、めんどーなので777にしてる。ろりぽおじさんは、「777にしちゃだめ、セキュリティ上」、みたいなことを言ってるので、よいこのみんなは、真似しちゃだめだよ。ろりぽおじさん、ごめんなさい。テスト終わったら消しとくから)

■■ プログラムを作成する
さっきの本の23ページに相当する、テスト内容は、こんなかんじ
<?php
require_once("SimpleCount.php");	//	先に、テスト対象を宣言する
require_once("phpunit.php");

class SimpleCountTest extends TestCase {

    /**
     *  コンストラクタ
     */
    function SimpleCountTest($name) {
        $this->TestCase($name);
    }

    /**
     *  初期処理
     */
     function setUp() {
     }

    //--------- ここから、テストをかくのだ
    /**
     *  getShohinNameのテスト
     */
     function testGetShohinName() {

		//	本に書いてあるのを、PHPにしただけ
	$simple = new SimpleCount();
	$data = "1234";
        $this->assertEquals("carrot",$simple->getShohinName($data));

     }
}

//-----------------------------------------------------//
//	呪文なのだ
$suite = new TestSuite;

//	テストするものを書くのだ
$suite->addTest(new SimpleCountTest("testGetShohinName"));

//	じゅもんなのだ
$testRunner = new TestRunner;
$testRunner->run($suite);
?>

(上記中、 < > ¥ は本当は半角)
これをSimpleCountTest.phpという名前で保存する。


で、テストする側、さっきの本の27ページに相当する部分で、
はじめの状態は、こんなかんじ
<?php
class SimpleCount {

    /**
     *  ほんのとおり。にんじん??
     *
     */
    function getShohinName($name) {
    }
}
?>

(上記中、 < > ¥ は本当は半角)
はじめの状態なので、何も書いていない。なので、このまま実行すると、エラーになるはず
で、このファイル名をSimpleCount.phpとして保存した

■■ プログラムを送る
 上記のSimpleCountTest.phpとSimpleCount.phpを、さっきのろりぽのホームに送って、属性を777にした。

■■ 実行する
ブラウザから、ろりぽの自分のサイトのSimpleCountTest.phpをみると、こんな感じに見える。

(上記のイメージ中、紫色のところは、実際には、この文字が出るのではなく、自分のホームページのパスが入ります=人によってちがいます)。




で、あとは、SimpleCount.jpgをさっきの本の27ページのように、まじめに書いて、正しい結果にするだけ
だけど、今日は、時間がないので、この続きは、またこんど。


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PHPのユニットテストをするPHPUnitと前に示したMVCのやり方って、相性いいかも(5日修正)

2005-12-03 18:27:55 | PHP

 PHPのユニットテストとして、PHP Unitっていうのがありますよね。

 え、それなに?って言う人は、この方のサイトを見てね
(5日修正:前に紹介したサイトが、リンク切れしてましたので、違う人のサイトを紹介)
phpUnit
http://www.1x1.jp/php/phpUnit.php


ちなみに、PHP Unitのありかや使い方は、ここのブログの方を参照するほうがわかりやすい(ありかってPEARに入ってるみたいだけど)

 で、見ていて思ったんですけど、これ、PHP Unitでテストするには、このブログで、前に書いたような形でMVCに分ける方式のほうが、相性いいんじゃないかと。。

ちなみに、「このブログで、前に書いた」というのは、以下に書いた、MVCに分ける方式の話のことです。

PHP等で画面とプログラムの分離&アジャイルっぽく開発(テストファースト、ユニットテスト)の例

PHPで、別のPHPや画面を呼び出す、あるいはエラー画面と正常画面を切り分ける方法

PHP等で画面とプログラムを分離する(処理結果で画面分け:カオル姫方式)

画面とプログラムを分けても、コントローラーがないと、テスト&解析しにくい

PHP等でMVCにわけて、アジャイルっぽく開発できるようにするためのコーディング方略と例

PHPで、MVCにわけ、処理、画面別々に、ユニットテストを行う例と、方法




 っていうか、ウィリアムのいたずらは、そこで、MVCにわけて、とくに最後のところでは、Mの部分をインクルードしたり、そこのファンクションだけ、別に出しているので、PHPUnitでテストできるけど、ふつうみたいに、ぜーんぶ、1つのファイルの中に書いちゃったら(で、関数に分けて書かなかったりしたら)、PHP Unitでテストできないじゃん。。。

 むしろ、ウィリアムのいたずらみたいに、PHP Unitの方法をしめすより、そのために、MVCで、どうやったらかけるかをしめさないと、つかえないよーなー。。




 ということで、じゃあ、上に書いたようなMVCの話で、PHP UNITをつかったら、どーなるのかについて、調べようと思ったけど、今、出先なので、調べられない(>_<!)
 のに、なぜ書いているかといえば、今、USBメモリをもってないんだな(^^)
 なので、PHP Unitの使い方のURLをメモしておくために、書いて、ここにアップしてたりする(^^)

 じつは。。

 ということで、ついでにめもめも
 PHPのテンプレートについて、まとまっているサイトは、
 ここ


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PHPで、SOAっぽい?ことをやらせる、XML-RPCについて、その仕様と使い方のありか

2005-11-30 16:46:31 | PHP

 以前、ブログのコメントで、 エンジニアAさんから

ふと思ったのですが、PHPでSOAっぽく作っている開発ベンダってあるんでしょうか?

っていただいたのですが、

 SOAっぽいといえば、XML-RPCって、そうですよね。

たぶん

 。。。。ちがうかな(^^;)


 で、XML-RPCを、PHPで開発している会社というと、

  このGooのブログが、そうみたいです!!

Gooのスタッフブログ XML-RPC公開についてによると、


先ほど、XML-RPC APIを公開しました。XML-RPC APIはブログを外部から操作するための仕組みのことを言います。


ってかいてあって、その下のほうで、


このブログライター機能をお使いいただくには皆さんのブログごとに設定が必要です。詳しい使い方はこちらをご覧ください。


で、「こちら」のページにとぶと、最後に


◆エンドポイントについて

「goo RSSリーダー」以外のXML-RPC API対応のアプリケーションをお使いの方は、以下のエンドポイントを設定して下さい。

http://blog.goo.ne.jp/xmlrpc.php


ってかいてあって、最後.php出終わっているので、たぶん、PHPでしょう。。きっと

 おお、GooのXML-RPCは、PHPでやっているのね。。。




 って、それはいいとして、ウィリアムのいたずらがXML-RPCに、詳しくないからかしら。。。

 XML-RPCといっても、仕様は、いっぱいあると思うんですけど(^^;)

 たぶん、Blogger XML-RPC APIをサポートしてるんですよね、きっと??

 ちがうかなあ。。

 ちなみに、Blogger XML-RPC APIについて説明してあるサイトは
 こことかここ
 XML-RPC全般の仕様についてはこちら

で、肝心の、PHPでの、XML-RPCのやりかた(サーバー、クライアントとも)については
 こちら
http://www.linux.or.jp/JF/JFdocs/XML-RPC-HOWTO/xmlrpc-howto-php.html





ついでに、Javaの場合は、Apache XML-RPCになるらしい。
ここ
http://ws.apache.org/xmlrpc/


ちなみに、もうすでに、Apache XML-RPCで、GooのXML_RPCを使ってみた人もいるみたい
ここ
http://blog.goo.ne.jp/pie001/e/bee5d82fb3e8973d763b54fb5f59cd49

そこに、サンプルのソースコードものっているみたいっす。

P.S といっても、ウィリアムのいたずら、いま忙しいので、ぜんぜん試してない&試している暇ないのであった。



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

フリーのPHPエディタを使ってみる&そのダウンロードサイト

2005-11-29 18:39:05 | PHP

 PHPで、最近書くことが、多くなった。
 メモ帳じゃなくって、エディタがあったほうがいいなと思ったけど、
 Zend Editorは、3万円以上もするので、あちゃ。。ということで、却下!

 ということで、フリーで使える、PHPエディタをとりあえず、つかってみることにした。
 そのPHPエディタのサイトはここ
http://phpspot.net/php/phpeditor.html


 で、ダウンロードしてみた。

 おお、なんとなくつかえそうじゃん!
 ちゃんと、文字を打つと色分けされるし。。




 まずはじめに、立ち上げて
 プロジェクトを「ファイル」の「名前を付けてプロジェクトを保存」でつくって、
 そのプロジェクトに、とりあえず、いままで作ったphpプログラムを
  「ファイルから追加」で追加して
 で、ちょこっと修正して、保存して
 「実行URLの設定」でhttp://127.0.0.1/そのPHPにして
 「実行URLを開く」にすると、実行する!おお!!

 で、コードチェックは、
 「実行」の「構文チェック」をやると、php.exeの場所をきくので、
 指定すると(普通C:¥phpとかにはいってる)
 おお!チェックするぞ!

 ただ問題は。。。それを開いてみると、
 改行コードが¥nだ(>_<!)
 (¥rが入ってないので、ぜんぶつながっちゃってる。↑が改行のところに入ってる)
 しかたないっす。
 一度保存したのを、ワードパッドで開いて、再度MS-DOS形式で保存しなおすっす。。
 



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする