Apacheの最近のブログ記事
Perlスクリプトの1行目を環境に応じて書き換える必要がありますよね。
#!/usr/bin/perl (Linuxの場合)
↓
#!c:¥perl¥bin¥perl (Windowsの場合)
これって不便ですよね。書き換え忘れてLinux上で動かないことがありますよね。
そこで、#!/usr/bin/perlのままWindows + Apacheで動かす方法がないか調べてみたら、ありました。
しかし上記のやり方だと私の環境ではエラーが出たので、
下記のようにやったら見事に動きました。
前提条件:
- ActivePerlがC:¥perl¥bin¥perlにインストールされている。
- 同じくCドライブにApacheがインストールされている。
やり方
- C:¥usr¥bin というフォルダを作る。
- C:¥perl¥binの中の perlperl5.10.0exe, perl510.dll perl.exeの3つのファイル(数字はバージョンによって異なります)を
c:¥usr¥binにコピーして置く。 - httpd.confの最下行に1行書き加える。
- Apacheを再起動
SetEnv PERL5LIB C:/perl/site/lib
SetEnv PERL5LIB C:/perl/lib
かんたん!!
しあわせ!!
【追記】2008.12.7
どうもこのやり方だと、1行目のSetEnvが2行目のSetEnvによって上書きされてしまい、1行目が無効になっているようです。う~んどうすればよいのやら。。。
めちゃくちゃ簡単でした。
インストール
アプリケーション → アクセサリ → 端末 を起動して、以下のコマンドを入力。 sudo apt-get install apache2数分でインストールが終わる。
動作確認
次にFirefoxを起動してアドレスバーに以下を入力。http://localhost/
ブラウザに、
It works!と表示されたらインストール成功! 感動の一瞬です。
index.htmlを編集
なお、このとき表示されているファイルは、/var/www/index.htmlファイルです。 編集するには、chown -hR 自分のユーザ名 /var/wwwとやって、あとは/var/www/ の中の index.htmlファイルをエディターで編集すればOK!
楽しくなってきた〜
2種類のアクセスログ
XREAでは、Webサーバへのアクセスログが毎日早朝に2種類のフォーマットで出力されます。HTML形式とApache生ログ(テキスト)形式です。
HTML形式
標準で入っているアクセスログ解析ツール(analog 6.0)が、毎日午前5時ごろにレポートとしてhtmlファイルを出力します。(出力先は/public_html/log/ )
いろいろな統計情報が見れて面白いのですが、ここからはさらに詳しく追いかけるはできません。
アクセス1件1件、訪問ユーザ一人一人の訪問履歴を詳しく見たい場合、もしくはHTML版と違う切り口で統計分析したい場合は、Apacheの生ログを見る必要があります。
Apache生ログ(テキスト)形式
各ユーザのホームディレクトリ下のlogディレクトリに、ドメイン名.log
ドメイン名.1.log
・・・
ドメイン名.4.log
というテキストファイルがあるかと思います。
生ログが見れない場合は、こちらのページを参考にしてください。
このテキストファイルの中身は、下記のようなフォーマットになっています。
(Apache標準のcombine形式というそうです。)
hoge.example.com - - [14/Mar/2008:00:51:46 +0900] "GET /2008/03/15.html HTTP/1.1" 200 5539 "http://www.google.co.jp/search?q=家庭教師&hl=ja&c2coff=1&rls=GGLD,GGLD:2005-11,GGLD:ja&start=330&sa=N" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)"このままだと見にくいし分析のしようがないので、タブ区切りCSVに変換したいと思います。
タブ区切りCSVにすれば、エクセルに貼り付けて自由に分析することができます。
タブ区切りCSVに変換する方法
秀丸で正規表現を使って置換します。- 秀丸の メニュー>検索>置換 を実行して、置換ダイアログを出す。
- 「正規表現」にチェックを入れる
- 検索ボックスに下記を入力(注1)
^(.*) (.*) (.*) \[(.*)\] "(.*)" (.*) (.*) "(.*)" "(.*)"$
\1\t\2\t\3\t\4\t\5\t\6\t\7\t\8\t\9\n
↓実行画面
エクセルに貼り付けると、下図のようにきれいに分割されます。
注2:この正規表現自体はPerlやその他スクリプトでも使えます。
■ 追記
一部正規表現に間違いがあったので修正しました。調べたところ、XREAのログ形式は、Apacheのデフォルトのログ形式"Combined"と同じみたいです。
なので、Xrea特有のことは何もなく、Apacheログの一般的な解析手法をそのまま使えます。
記事中の正規表現は、下記のサイトのものを使わせていただきました。
参考:Apache Combined Log を効率的にパースする正規表現メモ
WindowsXP上に、Apache2.2.8とPHP4.4.8をインストールしたら、下記のエラーが出てApacheが起動しなくなります。
エラーメッセージ:
Error:The requested operation has failed!
症状
Error The request operation has failed!
というエラーが出て起動に失敗する。
さらに、ApacheのTest Configurationを実行すると、次のようなエラーが出る。
C:\Documents and Settings\Administrator>httpd.exe: Syntax error on line
128 of C:/Program Files/Apache Software Foundation/Apache2.2/conf/httpd.conf:
Cannot load C:/php/sapi/php4apache2.dll into server: \x8ew\x92....
Note the errors or messages above, and press the <ESC> key to exit.
原因
Googleで検索しまくること3時間、ついに原因を突き止めました。PHPのsapiフォルダにあるphp4apache2.dll というファイルが、apache2.2.xに対応していないそうです。
解決策
Apache 2.2.xとPHP 4.4.0-4.4.7用に対応したphp4apache2.dll-php4.4.x.zipをゲットして、設定します。
- http://www.apachelounge.com/download/ にアクセス
- ページの中ほどにある、php4apache2.dll-php4.4.x.zipをダウンロード
- 解凍する。
- 解凍したフォルダ中のphp4apache2.dllを、既存(php\sapi\)のphp4apache2.dllに上書きコピーして置き換える。
- 解凍したフォルダ中のhttpd.exe.manifestを、C:\Program Files\Apache Software Foundation\Apache2.2\bin\ にコピー
- Visual C++ 2005 SP1 Redistributable PackageをMSのサイトからダウンローしてインストール。
http://www.microsoft.com/downloads/details.aspx?FamilyID=200b2fd9-ae1a-4a14-984d-389c36f85647&DisplayLang=en - httpd.confに下記を追加
- Apache2.2を再起動(restart )
LoadModule php4_module "c:/php/php4apache2.dll"
AddType application/x-httpd-php .php
これで無事、Windows上でApache2.2.xとPHP4.4.xが起動できると思います。(^^)v
・・・とここまで書いたところで、既に同じことを書いてあるサイトを発見。orz
PerlでDBIモジュールを使ってmySQLを操作できるようになりました!
ワーイワーイ。(^^)
これでやっと、
LAMPデビューです!!
パチパチ
( 注: LAMP = Linux, Apache, mySQL, Perl/PHP )
長く苦しいい道のりだった。くくく・・・
超簡単なアプリを作ったので公開します。
前回と同じタイムスタンプです。
前回は裏の仕組みがPerl+CSVでしたが、今回はリッチにPerl+DBI+mySQLです。
大いなる第一歩です。
ああ感激。
ソースはこれ↓
========== dbi_timestamp.cgi ==============
#!/usr/local/bin/perl
print "Content-type: text/html\n\n";
use DBI;
$user = '***';
$passwd = '***';
$dbh = DBI->connect('DBI:mysql:db:localhost', $user, $passwd);
$sth = $dbh->prepare("
INSERT INTO timestamp
VALUES(NULL);
");
$sth->execute;
$sth = $dbh->prepare("
SELECT * FROM timestamp ORDER BY timestamp DESC
");
$sth->execute;
while(@a = $sth->fetchrow_array){
print "$a[0]\n";
}
$sth->finish;
$dbh->disconnect;
print "DBI test is done!\n";
====================================
参考サイト
http://2php.jp/mysql/insert.html
http://www.rfs.jp/sb/sql/index.html