2005-03-25 23:08:19

【edison】web上でどこでも使えるメモ帳【Ajax】

テーマ:php
今熱いajaxを使ったものを僕も作りたいと思い、ちょっと作ってみました。
PHPフレームワークのmojaviのお勉強も兼ねて。


edison

edisonにテストユーザでログイン

 
何をするものかというと、自宅と外出先でちょっとメモしたことを共有
することが出来るものといった感じで、具体的には、

・ユーザ毎にログインが出来る。
・保存ボタンを押さなくても文章がリアルで保存される(ajaxで)


といった感じ。

環境は貧弱なadslの自宅マシンで動いているのでかなりストレスがかかる
と思いますのでその辺りは目を瞑って下さい。


因みに、入力チェックやエスケープをしていないので変な文章を
いれるとバグります...orz
その上IE6.0でしかテストしてません。firefoxで動かないかと...orz
更にはjavascriptを使ってます、ONにしないと何も出来ません...orz


何かご要望、ご感想などお聞かせいただけるとうれしいです!
(テストユーザを用意しています。)

とりあえず、今週末は起動しておくと思います。

----------------------------------------------------------------------
環境は、
Windows2000server + Apache1.3 + MySQL4.0.22-nt + PHP4.3.10 の上です。

フレームワークは
mojavi2.0.0 + Smarty2.6.8 です。

PEARは
DB, DB_DataObject, Log,HTML_Template など等。
使うほどの物でもないですが大げさです(笑

isi
AD
いいね!した人  |  コメント(65)  |  リブログ(0)
2005-03-17 12:01:59

昨日の続き Googleデスクトップでのイントラ全文検索

テーマ:php
昨日の続きで今日もGoogleデスクトップサーチ日本語を触っていました。
(仕事しろよ!おれ...orz)

blog.bulknews.netさんの10月15日の記事で、「Apache2 + mod_proxy」で中継
することで、マシン外からも使用が可能とのことがわかったのですが、
折角なのでもうちょっとやってみることにしました。

昨日の時点で、「マシン外からも検索画面が見れて、その検索結果を返せる。
というところまでは漕ぎ着けていたのですが、
その検索結果に対してのリンクへ、アクセスが出来ないとうことに悩んでました。

なぜかというと、リンク先URLが以下のようになっていて、
ループバックアドレス(localhost)を指しているので別マシンからは
その別マシン内を探しに行くからです。

 http:/127.0.0.1:4664/redir
 ?url=C%3A%5C%5Fisi%5C00%5FCindex22Ehtm
 &src=1
 &schema=8
 &start=1
 &s=xxx



なので、GDS(GoogleDesktopSearch)から戻ってきたHTMLに対して、クライアント
へ返す前に以下のように編集してしまったらどうかなと思いやってみました。

 :http:/127.0.0.1:4664/redir・・・

 :http:/サーバドメイン/search.php・・・

 
その上で呼ばれる「search.php」の中で、後ろに続く変数[url]~[s]などが入っていたら
再度編集して上記での編集前のURLへリダイレクトしてやればいいのかなと。

でもだめでした。先ほどのURLを見ていただくとわかりますが、
GDS(GoogleDesktopSearch)のりダイレクト機能のようなもの「redir?url=・・・」で、
変数[url]へと飛ばす仕組みになっているようでその飛ばす先の[url]の中身が
ローカルURLというのかな?例えば

 C:/_isi/00_test/index.htm
 
のようになっているので、外部からはまたしても見れないようになっています。。
思うようにいかないとです。。


仕方ないのでちょっと無理やりですが、さらに編集することにしました。
僕のマシンにはapacheが動いているので、そのなかの外部へ公開している
ディレクトリは、当然「http:/・・・」というurlでアクセスできます。

なのでこの公開ディレクトリのファイルが検索結果として表示される場合は、
上記のリンク先URLを書き換えたらapache越しにパスが通るということになるので、
下記の「00_test」がルートとしたら

 
  http:/127.0.0.1:4664/redir
  ?url=C%3A%5C%5Fisi%5C00%5FCindex22Ehtm(C:/_isi/00_test/index.htm)
  &src=1
  &schema=8
  &start=1
  &s=xxx

 :http:/サーバドメイン/index.htm

 

と編集してGDSの結果をクライアントへ返してやれば、外部からも使用可能です。
なんだか条件が多くて悲しい結果結末なんですが。。

#「これならNamazuのがいいじゃん!」という当然のつっこみはありますよね(汗


次は「Apache2 + mod_proxy」で連携してみよーっと。
リバースプロキシにも興味あるし。

isi
AD
いいね!した人  |  コメント(9)  |  リブログ(0)
2005-03-16 16:42:59

Googleデスクトップサーチでイントラネット内全文検索

テーマ:php
どういう仕組みかは僕なんかにはわからないんですが、Googleデスクトップサーチ
はwebサーバを独自で立ち上げてwebブラウザでアクセスしてると思われます。

そこで、そのURLに、インストールしたマシン以外からもアクセス出来れば
お手軽に、google並の検索力で、社内ネットワーク等の全文検索が可能
なのではと思いちょっと試してみました。

もしこんなことが出来れば、
 ・社内webサーバの全文検索を超簡単に!?
 ・社内ファイルサーバも同じくぅ!?
なんてことを考え、今居るところの次の案件に上がりそうな「全文検索」
も楽勝!?とニヤニヤしつつ。。。

#著作権的な問題がある為、多分駄目だと思いますが。


方法としては、前回のエントリーで書いたリダイレクトと同じでOKかと
思ったのですが、如何せんGoogleデスクトップサーチのドメインは、

http://127.0.0.1:4664/search&s=XXXXX?q=

とlocalhostを指してますので、単純にリダイレクトという訳にはいかないかなぁと。


それで思いついたのが、

1.取りあえずapache等が動いているwebサーバでクライアントのリクエストを受け

2.webサーバのPHPにより自分にインストールされているGoogleデスクトップサーチに
  対してリクエストを送る。

3.その結果をwebサーバはそのままクライアントへスルーする。


というプロキシな方法。

 クライアント => サバapache => サバGoogleデスクトップサーチ



で、やってみました。

webサーバのPHPは「search.php」としてこんな感じで。
リクエストの[q]がセットされていない場合は検索画面を表示し、
セットされている場合はGoogleデスクトップサーチへリクエストを投げて
その結果を出力する。
 <?php
 $q = $_GET["q"];
 
 if (!isset($q)) {
  print <<<END
   <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">
   <html>
   <head>
   <title>Coogle</title>
   <meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
   </head>
   <body>
   <center>
   <table width="100%"  border="0" cellspacing="0" cellpadding="0">
   <tr>
   <td>
   <form name="f" method="get" action="http://webサーバ/search.php">
    <input name="q" type="text" size="50"><br>
     <input type="submit"  value="検索">
   </form>
   </td>
   </tr>
   </table>
   </center>
   </body>
   </html>
  END;
 
 }else{
 
  require_once "HTTP/Request.php";
 
  $q = mb_convert_encoding(
   $q
   ,"UTF-8"
   ,"shift_jis"
  );
 
  $req =& new HTTP_Request("
   http://127.0.0.1:4664/search&s=XXX?q=" . urlencode($q)
  );
  $req->setMethod(HTTP_REQUEST_METHOD_GET);

  if (!PEAR::isError($req->sendRequest())) {
      echo $req->getResponseBody();
  }
 
 }
 ?>





でも動かないよぅ...orz
「申し訳ありませんが、ブラウザに対応していません。」
とのことです。
たぶんGoogleデスクトップサーチの中でUserAgantをチェックしてるの
だと思います。

PHPからプロキシとしてリクエストを投げた場合の
UserAgantはどうなってるんだろう?

あとそれで動いたとしてももう一個問題があるなぁ。
Googleデスクトップサーチの結果が全てlocalhostを含んだパスだから
それを全部置換してやらないと。

でも面白そうだし、もうちょっとさわってみます。


ここまで書いて投稿しようとしたら、なんか動きました!!
先ほどのエラーの画面から
「サポートされていないブラウザをお使いの方はここをクリック」
みたいなリンクをクリックしたら、検索結果見えました♪


でもここで新たな問題が。。
検索結果に対するリンクのパスが
http://127.0.0.1:4664/redir?url=C%3A%5C%5F....
となっていてGoogleデスクトップサーチの機能としてリダイレクトできるように
してるみたいなんですが、単純に

127.0.0.1 => WEBサーバのドメイン

と変えても駄目なよう。しかもポートが4664

うー。わからないです。。

apacheとGoogleとwebサーバレベルでどっちが優先されるんだろう。
外部からGoogle越しのファイルアクセスは不可能になってるんかなぁ。

謎は深まるばかりです。
そのうちえらい人が解明するのを待つことにします。

isi

#2005/03/16追記

かなり以前からすでにこの試みは行われてたようです(汗
しかもすごい人達によって!
お恥ずかしい。。

blog.bulknews.net

NDO:Weblog

まさかの日記
AD
いいね!した人  |  コメント(10)  |  リブログ(0)
2005-03-16 14:57:40

Lunascapeの検索バーに「Googleデスクトップサーチ」を入れる

テーマ:php
最近ではすっかりみんな使うようになったタブブラウザですが
「僕は最初に使ったから♪」という理由でLunascapeを使ってます。

昨日インストールした「Googleデスクトップサーチ日本語」ですが、
それにつく機能として、小さな検索ボックスがあるのですが、
Googleデスクトップの検索の為だけに表示するのはちょっとなぁ。というのが
ありました。

そこで、Lunascapeに付属する検索バーの検索エンジンの中にこの
「Googleデスクトップサーチ」を入れようと思い立ち、ヘルプなどに
したがって入れてみました。


「Googleデスクトップサーチ」は「charset=utf-8」で受け付ける為、
検索バーの文字を、

 shift_jis => utf-8 => utf-8をURLエンコード

と変換して、GETパラメータの[q]に入れないといけません。

 GoogleデスクのURL:
  http://127.0.0.1:4664/search&s=XXXXXXXX?q=ここに入れる


その為に、Lunascape検索バーの、shift_jisからutf-8への変換方法を探して
いたんですが、これが無いんですよ...orz
調べたところEUCへの変換は出来るんですが。。


この問題、はてなブックマークを検索バーに入れるときもやられました。
(はてなもutf-8なんです。)


悔しいので、無理やり入れてやりましたよ!以下その方法。
要はリダイレクトしてるだけなんですけどね(笑

前提条件
 ・apache+PHPが動いているマシンがネットワーク内にいること
 ・そのマシン(サーバ)が触れること
 ・PEARのHTTPが入っていること


1.サーバに以下のを「googledesk.php」とかで置く
 <?php
 require_once 'HTTP.php';
 
 $q = mb_convert_encoding(
  $_GET["q"]
  ,"UTF-8"
  ,"shift_jis"
 );
 
 
 if($_GET["enjin"] == "googledesktop"){
  HTTP::redirect("http://127.0.0.1:4664/search&s=XXXXX?q=" . urlencode($q));
 
 }else if($_GET["enjin"] == "gmail"){
  HTTP::redirect("http://gmail.google.com/gmail/h/XXXX/?s=q&q=" . urlencode($q));
 
 }else if($_GET["enjin"] == "hatenab"){
  HTTP::redirect("http://b.hatena.ne.jp/aaa/?word=" . urlencode($q) . "&cname=");
 }
 ?>




2.Lunascapeの検索バーに以下のURLで追加する。

 ・Googleデスクトップサーチ日本語
  http://サーバホスト//googledesk.php?enjin=googledesktop&q=

 ・Gmail
  http://サーバホスト//googledesk.php?enjin=gmail&q=

 ・はてなブックマーク
  http://サーバホスト//googledesk.php?enjin=hatenab&q=



以上です。
PHPでutf-8へエンコードして、それぞれのURLへリダイレクトするだけです(照

#アメーバblogでソースを載せる方法がわかりません。
#見にくくですみません。。

isi

いいね!した人  |  コメント(13)  |  リブログ(0)
2005-03-03 15:14:24

Ajaxで郵便番号検索

テーマ:php
このサイトを見て、僕もajaxやってみようと思い会社のマシンでajaxで郵便番号検索をやってみることにした。

1.郵便番号データをもらってくる 
 贅沢に全国一括を落とす。
 
2.MySQLに「yubin」テーブルを作成
CREATE TABLE `yubin` (
  `jiscode` int(5) default NULL,
  `old` varchar(5) default NULL,
  `new` varchar(7) default NULL,
  `fuken_kana` varchar(50) default NULL,
  `si_kana` varchar(50) default NULL,
  `mati_kana` varchar(100) default NULL,
  `fuken` varchar(100) default NULL,
  `si` varchar(100) default NULL,
  `mati` varchar(100) default NULL,
  `a` tinyint(1) default NULL,
  `b` tinyint(1) default NULL,
  `c` tinyint(1) default NULL,
  `d` tinyint(1) default NULL,
  `e` tinyint(1) default NULL,
  `f` tinyint(1) default NULL
) TYPE=MyISAM;


3.1で落としたcsvデータをなんとかして「yubin」テーブルへ作成
  phpMyAdminなどで~。

4.HTMLとjavascriptは上記サイト様から借用させて頂きました。

 HTMLの変更箇所は、エンコード部分
  前:
<?xml version="1.0" encoding="EUC-JP"?>

  後:
<?xml version="1.0" encoding="Shift_JIS"?>



 ajaxzip.jsの変更箇所は、サーバ側スクリプト呼出部分
  前:xmlHttp.open('GET', 'ajaxzip.cgi?z=' + escape(zip), true);
  後:xmlHttp.open('GET', 'xmlHttp.php?z=' + escape(zip), true);



5.サーバサイドの郵便番号検索のPHP(xmlHttp.php)は
<?php
require("DBconf.php");

// データベースへの接続
$db_link = mysql_connect('host', 'user', 'pass');
$db = "work";
$sql = "select * from yubin where new like '" . $_GET['z'] . "%'";
$rs = mysql_db_query($db,$sql);

$rows = mysql_num_rows($rs);

if ($rows > 0) {

	$row=mysql_fetch_array($rs);

    print "Content-Type: text/xml\n\n";
    print ("<?xml encoding=\"Shift_JIS\" version=\"1.0\" standalone=\"yes\"?><zip><pref>" 
    . $row["fuken"] . "</pref><city>" . $row["si"] . "</city><ville>" 
    . $row["mati"] . "</ville></zip>");
}

mysql_free_result($rs);
mysql_close($db_link);
?>





6.でもうごかないんだが  ...orz

一応、サーバからXMLを取得してはこれるんだけど、エンコードがミスってるようで、文字化けを起こしている。。
なんかXMLはUTF8かUTF16のUnicodeが基本らしく、それ以外の文字コードを使うときは「encoding=」で指定するらしいんだけど、どうにもだめ。

<?xml version='1.0' encoding='Shift_JIS'?>

これじゃだめなのぉ??
ちゃーんと基礎を勉強しないとな。



いいね!した人  |  コメント(12)  |  リブログ(0)
2005-02-24 12:01:14

mojaviのコアクラスと、主なメソッド

テーマ:php
mojaviメモ

大体この辺から把握していくのかな。
うーん。フレームワークむずいよ。


参照:MVCフレームワークMojaviを使ってみよう

Controllerクラス(lib/Controller.class.php)
ユーザリクエストを受け付けて、プロセスフローを制御します。$controller変数としてアクションクラスやビュークラスからアクセスできます。

$controller->dispatch([$modName = null, $actName = null])
ユーザリクエストを処理する適切なアクションを決定して処理を任せます。フロントコントローラindex.phpから呼び出されます。引数にモジュール名とアクション名を与えることでMojaviをページコントローラ(9)として動作させることができます。

$controller->forward($modName, $actName)
引数で指定されたアクションにリクエストを転送します。しばしばアクションクラス内で使用されます。

$controller->getCurrentModule()
現在のモジュール名を取得します。
$controller->getCurrentAction()
現在のアクション名を取得します。


Requestクラス(lib/Request.class.php)
ユーザリクエストのパラメータをパースして保持します。パラメータの取得、更新、同一リクエスト内での値の受け渡し等のインタフェースを持ちます。$request変数としてアクションクラスやビュークラスからアクセスできます。Mojaviアプリケーションの開発では$_GET/$_POST等を直接操作することはありません。

$request->getParameter($name [, $value = 'NULL'])
ユーザリクエストから指定したパラメータの値を取得します。

$request->setParameter($name, $value)
リクエストパラメータの値を設定します。

$request->getAttribute($name)
指定されたリクエスト属性値を取得します。

$request->setAttribute($name, $value)
リクエスト属性値を設定します。

$request->getError($name)
指定された名称で登録されたエラーメッセージを取得します。

$request->setError($name, $message)
指定された名称でエラーメッセージを設定します。



Userクラス(lib/User.class.php)
ユーザ情報を保持します。ユーザの認証状態、権限、(主にリクエストをまたがって共有される)ユーザ属性へのインタフェースを持ちます。$user変数としてアクションクラスやビュークラスからアクセスできます。デフォルトではUserクラスの派生クラスPrivilegeUserが使用されます。

$user->isAuthenticated()
ユーザの認証状態を取得します。

$user->getAttribute($name[ , $namespace = 'org.mojavi'])
指定されたユーザ属性値を取得します。

$user->setAuthenticated($status)
ユーザの認証状態を設定します。

$user->addPrivilege($name[ , $namespace = 'org.mojavi'])
ユーザに指定された権限を付与します。
いいね!した人  |  コメント(0)  |  リブログ(0)
2005-02-14 22:13:53

Koders ソース コードサーチエンジン

テーマ:php
色々な分野に特化した検索エンジンが最近出てきてますが、
こんな物がすでにあったとは驚きです。


Koders.comの創始者であり主任アーキテクトであるDarren Rush氏の弁

Kodersの基本はソースコードの検索エンジンです。最初は、チームで使うための内部ツールとして開発したものです。過去のプロジェクト結果をもっと活用できないものかとは常々考えていたことで、ですから、過去のコード断片を簡単に見つけ出して、現在のプロジェクトに組み込めるような、そういう検索エンジンを作ろうということになりました。


僕のような常々ソースを探し回って組み合わせてるような
へたれプログラマーには最高の検索エンジンです。

先人がきっと同じような物書いてるんだろうなーってのは
もはや自分で書いていてはダメな時代の速度なのでしょうか。

Koders

ちなみに、高林哲さん(namazuの作者)のソースコード検索はgonzuiです。

良い時代ですね♪

isi
いいね!した人  |  コメント(12)  |  リブログ(0)
2005-02-06 14:00:16

「闇」代表候補としての責任。

テーマ:php
このブログのタイトル「闇プロジェクト」とあるように、実はとてもビッグで闇なプロジェクトを発足し活動しようとしているのだが、どうも仕事と家事(?)に追われて
なかなか時間を作ることができずにいた。

もともと優秀な同居人のisi氏は、恐らく努力家であり「モノづくり」が好きな性格であるのも手伝って新しい技術や手法をモノにしようとしつつある。それは日頃の会話の中にも「分かっちゃったもんねっ。」ってのが伝わってくる。

「これぢゃ、おいてけボリーンじゃないかっ。」

さすがに不安を覚えた僕は、昨日「集中!MVCフレームワークって何?」という名目で自宅PCに環境をつくる事にした。

今日の目標 ----------------------------------------------------------
 1:プログラムの入門「Hello World!」をMojaviを理解しながら画面上に表示させる。
 2:Smartyをインストールする。
----------------------------------------------------------------------

結果:「Hello World!」の表示に成功!!しかも何かこれってすごい仕組もぢゃん!って少なからず理解しかけていた自分も可愛かった。あとSmartyのインストールもisi氏の過去記事を参考にしながらパチパチッとやってみると、
何も表示されない。。。でもとりあえずエラーが出てないみたいだからOK。
(なんでしょうか。。。)

この時、もう明け方4時。興奮気味になると人間は眠ることを忘れてしまうようだ。しかも無意識にこゆーいブラックコーヒーなんか飲んでしまっていたから、どうにも寝付けない。ついでに前から気になっていたメールサーバの構築でもやっちまおうか!!

パチパチ。パチパチッ。(←キーボードを叩く音)

でっ、できてしまった。。。メールアドレス取り放題!やったよオレ!

しかし、メールサーバのユーザ管理のところにはテストで作成したユーザが20数人もいる。どれがナニちゃんか分からない。SMAPと京都パープルサンガのスタメンが集まってもまだ多い。とりあえず正式なアドレスを決めるのは日が昇ってからにしようと決めて大収穫の今日を振り返りながら、ようやく冷え切った床についた。



闇プロジェクト。。。必ず成功させないとなー。



いいね!した人  |  コメント(3)  |  リブログ(0)
2005-01-26 23:34:28

phpのフレームワークと雑記

テーマ:php
PHPを勉強しているけど、どうも急いでモノにしようとしすぎて「点」で知識を追ってしまっているような気がするんだけど、そんなことは気にせずに今日はphpのフレームワークについて色々さわってみた。

まずは、stack*の「PHPでMVC 」の連載から♪


・・・わからねぇorz

いや、わかるんですよ。確かにMVCはすごい保守性、汎用性にすぐれたものが出来るってのは理解できるんですが、具体的に0からフレームワークを意識した設計が出来そうにないんですよ。なにから手を付けてつくっていくのかがわからない(泣


なのでちょっと嫌になってお次は、stack*の「PHP用MVCフレームワーク Mojavi」をやってみた。

なんでもこの「Mojavi」がいけてるらしくって、

 Mojaviの素晴らしいところは数多くありますが、特にControllerにあたる部分の作成がStrutsやASP.NETに比べてもとても楽なところは魅力的です。例えばStrutsやphrameなどではController部分をXML形式(phrameならばphp形式)の設定ファイルで設定する必要があります。対してMojaviではModelとViewに対応するファイルを用意するだけで自動的に両者をつなげてくれるためControllerの存在を気にする必要がありません

なんですって。初めにやったお手製MVCでコントローラのわずらわしさを、うっすら感じ取ったので、なかなか良さそうに聞こえます♪

まだ上記の連載の半分くらいしか見てないので、論は出せないですが、結構いいかも。WEBアプリの定番部分の認証とか遷移制御といったところをいちいち作らなくてもよくって、ビジネスロジック部分とデザインに集中できる。
明日も触ってみよーっと。

でも、一回体系に基づいて勉強する必要があるかもなぁ。
ちまたでは「まるごとPHP!〈Vol.1〉」が高評価のよう。買おっかな。


【勉強させていただいたサイト】
SD言語工房
MVCフレームワークMojaviを使ってみよう
神の子どもたちはみな腕を磨く

isi
いいね!した人  |  コメント(0)  |  リブログ(0)
2005-01-25 13:26:35

windows環境でのsmartyのインストール

テーマ:php
windows2000でsmartyをインストールしてみました。
一応自分用のメモとして。

(1)smarty本家より最新版をローカルへダウンロード

(2)「Smarty-2.6.6.tar.gz」を解凍する。(.gz>>.tar>>普通のフォルダ)

(3)phpルートディレクトリ配下のどっかへ適当な名前で
  解凍して出来た「libs」フォルダを置く

(4)php.iniの「include_path」へ(3)で置いたパスを追加

(5)apache再起動

(6)これを実行してみてエラーなかったらOK


<?php
require('Smarty.class.php');
$smarty = new Smarty;
?>




Smarty(暫定)
・2ch【PHP】Smarty【Template】
いいね!した人  |  コメント(1)  |  リブログ(0)

AD

ブログをはじめる

たくさんの芸能人・有名人が
書いているAmebaブログを
無料で簡単にはじめることができます。

公式トップブロガーへ応募

多くの方にご紹介したいブログを
執筆する方を「公式トップブロガー」
として認定しております。

芸能人・有名人ブログを開設

Amebaブログでは、芸能人・有名人ブログを
ご希望される著名人の方/事務所様を
随時募集しております。