2006/08/16
MAMPでWebサーバ構築5

今回は、MySQLについて。
デフォルトパスワードを任意のパスワードへ変更します。
スタートページ「http://localhost:8888/MAMP/?language=Japanese」を開いてみると、「phpMyAdmin」へのリンク、ホスト、ポート、ユーザ名、パスワード、ソケット等の情報が見て取れます。
phpMyAdminはPHPで書かれたMySQL管理用スクリプトです。これを使えば、Webブラウザを使ったデータベース管理が可能となります。
さて、デフォルトの状態では、MySQLにアクセスするためのユーザ名がroot、パスワードがrootに設定されていますが、これをそのまま使い続けるのは好ましいことではありません。そこで、ターミナルを使ってパスワードを変更します。
MAMPによってインストールされたmysqlコマンドは次の所にあります。
/Applications/MAMP/Library/bin/mysql
ここにはパスが通っておらずコマンドを入力するのが面倒なので、パスが通った「/usr/bin」にシンボリックリングを張ることにします。
コマンドは次のとおり。sudoコマンドを使うので管理者用パスワードの入力が必要です。
$ cd /usr/bin $ sudo ln -s /Applications/MAMP/Library/bin/mysql mysql
次は、mysqlコマンドを使ってサーバにログインする方法です。
ターミナルに次のコマンドを打ち込みます。パスワードを聞いてきたら、デフォルトパスワードの「root」を入力します。
$ mysql -u root -p
次のようなプロンプトが帰ってきたらログイン成功です。
mysql>
次のコマンドで新しいパスワードを設定します。なお、','に囲まれた部分に任意のパスワードを入力してください。
mysql>set password = password('新しいパスワード');
「Query OK,」とメッセージが帰ってきたら、パスワードの変更が成功です。
または、次のコマンドでパスワードを設定します。
mysql>set password = old_password('新しいパスワード');
上の2つのコマンド、'password'と'old_password'の部分が違いますが、ともにパスワードを設定するもの。
MySQLの新旧バージョンでパスワードのハッシュ長が異なることから、互換性を取るために2通りのパスワード設定のコマンドがあります。
セキュリティの面では、'password'の方が好ましいのですが、'old_password'を選択しました。なぜなら、MovableTypeのデータベースとしてMySQLを使うとき、'old_password'じゃないとダメっぽいからです。
さて、話を元に戻します。
MySQLコマンドを終了するには、ターミナルに次のように入力します。
mysql> exit
以上でパスワードの変更が終了です。
MySQLのデータベースにアクセスするためにパスワードを変更したので、これを利用するPHPスクリプトについては、パスワード周りのコードを修正しなければなりません。
まずは、MAMPのトップページ「http://localhost:8888/MAMP/?langpage=Japanese」。これをブラウザで表示すると、次のようなエラーが表示されます。MySQLのパスワードを変更したことにより、データベースにアクセスできなくなったからです。
Error: Could not connect to MySQL server!
これを修正するために次のように変更します。
ファイル"/Applications/MAMP/bin/mamp/index.php"の15行目
修正前
$link = @mysql_connect(':/Applications/MAMP/tmp/mysql/mysql.sock', 'root', 'root');
修正後
$link = @mysql_connect(':/Applications/MAMP/tmp/mysql/mysql.sock', 'root', '新しいパスワード');
次に、MySQL管理スクリプト「phpMyAdmin」です。
phpMyAdminのアドレス「http://localhost:8888/phpMyAdmin/」にアクセスすると、やはりパスワード違いによりデータベースを開くことができません。
そこで次のように修正します。
ファイル"/Applications/MAMP/bin/phpMyAdmin/config.inc.php"の86行目
修正前
$cfg['Servers'][$i]['password'] = 'root';
修正後
$cfg['Servers'][$i]['password'] = '新しいパスワード';
以上が、MySQLのパスワード変更に伴うスクリプト変更です。
売り上げランキング:20197
発売日:2006/06
2006/08/08
MAMPでWebサーバ構築4

MacOSはマルチユーザOS。ユーザごとにWebページを持つことができます。
MacOSにはもともとApacheが搭載されいて、「システム環境設定」の「共有」の「パーソナルWeb共有」を有効にするとApacheが起動し、ユーザごとのWebページを表示することができます。URLはというと、「http://localhost/~(ユーザ名)/」となります。
例えばユーザ名が「jun」の場合、「http://localhost/~jun/」です。
ところで、そのWebページがディスク上のどこに保存されているかというと、ユーザのホーム・ディレクトリ直下の「Sites」ディレクトリになります。
ユーザjunの場合には、「/Users/jun/Sites/」です。
さて、MAMPの場合はどうでしょう?
Apacheの環境設定ファイル「/Applications/MAMP/conf/apache/httpd.conf」の中身をのぞいてみると、427行目に次のような記述があります。
UserDir public_html
よって、ホーム・ディレクトリ直下の「public_html」ディレクトリが、Webページを置くディレクトリになります。
ユーザ名が例えばjunの場合には、「/Users/jun/public_html/」。
私の場合、元々ある「Sites」をそのまま使っちゃおうってことで、427行目を次のように変えてみました。
UserDir Sites
また、ユーザの環境を設定する部分も、上の変更に連動して次のように変えてみました。433行目です。
今のところ、この部分はコメントアウトされているので何も影響を与えませんが、将来いじるかも知れないので念のためです。
変更前
#<Directory /home/*/public_html>
変更後
#<Directory /Users/*/Sites>
設定ファイルを変えたので、MAMP.appでサーバを再起動し、「http://localhost:8888/~(ユーザ名)/」にアクセスしてみます。
ユーザjunの場合、「http://localhost:8888/~jun/」となります。
次のように、表示されるでしょう。もともとSitesディレクトリに入っているindex.htmlが表示されるはずです。

売り上げランキング:93022
発売日:2006/06
2006/08/06
MAMPでWebサーバ構築3

PHPにはPEARっていう拡張ライブラリのようなパッケージ群があります。
PHPがインストールされているならば、既にいくつか入っているはず。
今日はPEAR関係のセットアップ。
いよいよ、ターミナル使うぞ。
ターミナルを立ち上げたら、「which pear」って入力してみましょう。
pearコマンドが「/usr/bin」に存在するのが分かります。
$ which pear /usr/bin/pear
このpearってMacOSが元々持っているPHPのもので、MAMPによってインストールされたものじゃありません。
MAMPがインストールしたPEARはどこかというと、PHP4,PHP5の両方の環境で使えるように、次の2カ所にインストールされています。
PHP4用 /Applications/MAMP/bin/php4/bin/pear
PHP5用 /Applications/MAMP/bin/php5/bin/pear
これらのディレクトリにはパスが通ってないし、かといってこの長ったらしいパスをいちいち入力するのも面倒なので、/usr/binにリンクを張ることにします。
私の場合、元々MacOSに付いているpearは使わず、MAMPのPHP5のみ利用するので、次のようにターミナルに入力しました。
これで、オリジナルpearがpear_originalにリネームされ、MAMPがインストールしたPHP5用pearが、/usr/bin/pearとしてリンクされます。
なお、sudoを使いますので、管理者のパスワードを適宜入力すること。
$ cd /usr/bin $ sudo mv pear pear_original $ sudo ln -s /Applications/MAMP/bin/php5/bin/pear ./pear
次に、pearコマンドを使った、パッケージのマネージメントを2,3紹介。
まずは、list。現在インストールされてるpearパッケージが一覧表示されます。
Archive_Tar、Console_Getopt、PEARが既にインストール済みなのが分かります。
$ pear list Installed packages, channel pear.php.net: ========================================= Package Version State Archive_Tar 1.3.1 stable Console_Getopt 1.2 stable PEAR 1.4.9 stable
次は、upgrade-all。インストール済みのパッケージの最新バージョンを、自動的にダウンロードしてインストールしてくれます。
$ sudo pear upgrade-all Will upgrade pear Did not download optional dependencies: pear/XML_RPC, use --alldeps to download automatically pear/PEAR can optionally use package "pear/XML_RPC" (version >= 1.4.0) downloading PEAR-1.4.10.tgz ... Starting to download PEAR-1.4.10.tgz (284,880 bytes) ..........................................................done: 284,880 bytes upgrade-all ok: channel://pear.php.net/PEAR-1.4.10 PEAR: Optional feature webinstaller available (PEAR's web-based installer) PEAR: Optional feature gtkinstaller available (PEAR's PHP-GTK-based installer) PEAR: Optional feature gtk2installer available (PEAR's PHP-GTK2-based installer) To install use "pear install pear/PEAR#featurename"
listで確認すると、確かにバージョンが上がりました。
$ pear list Installed packages, channel pear.php.net: ========================================= Package Version State Archive_Tar 1.3.1 stable Console_Getopt 1.2 stable PEAR 1.4.10 stable
次に、パッケージを新規インストールするinstallです。
ここでは、私がよく使うパッケージ「Cache_Lite」をインストールしてみます。
$ sudo pear install Cache_Lite downloading Cache_Lite-1.7.2.tgz ... Starting to download Cache_Lite-1.7.2.tgz (29,055 bytes) .........done: 29,055 bytes install ok: channel://pear.php.net/Cache_Lite-1.7.2
listで確認すると、確かにCache_Liteが追加されていますね。
$ pear list Installed packages, channel pear.php.net: ========================================= Package Version State Archive_Tar 1.3.1 stable Cache_Lite 1.7.2 stable Console_Getopt 1.2 stable PEAR 1.4.10 stable
以上、pearコマンドによるパッケージ管理を簡単に紹介しました。
pearコマンドには、その他様々な命令がありますが、ターミナル上で「pear」と入力すればヘルプを見ることができます。
是非一読ください。
売り上げランキング:38751
発売日:2006/06
MAMPでWebサーバ構築2

前回の続き。
Apacheの設定ファイルを手動でいじります。
Apacheの設定ファイルの場所は次のとおりです。
このファイルをテキスト・エディタで編集します。
/Applications/MAMP/conf/apache/httpd.conf
さて、Webブラウザで「http://localhost:8888/」にアクセスすると次のように表示されるでしょう。

サーバのDocumentRoot(前回のエントリー参照)に設定したパス「/Apprications/MAMP/htdocs/」に、index.htmlやindex.phpが存在しないため、そのディレクトリ内のファイルリストを表示されています。(実際はファイルが何一つないので表示されていませんけど)
クローズドな環境であれば丸見えでもOKですが、サーバを外部に公開するならばリストをさらすのはあまり好ましくないでしょう。
で、これを制御するがOptionsディレクティブで指定するIndexes。これを除外します。
また、私好みの環境として、FollowSymLinks、ExecCGI、MultiViewsもいじりました。
この辺の詳しいドキュメントはこちら。
サーバ全体のデフォルト設定はhttpd.confの378行目あたり。
変更前
<Directory />
Options Indexes FollowSymLinks
AllowOverride All
</Directory>
変更後
<Directory />
Options ExecCGI MultiViews
AllowOverride All
</Directory>
DocumentRootの変更は406行あたり。<Directory "/Applications/MAMP/htdocs">と</Directory>に囲まれた部分です。
コメントアウトすることで、デフォルト設定と一緒にしてみました。
変更前
Options All
変更後
#Options All
さて、設定ファイルの変更後はApacheサーバを再起動します。
つまり、MAMP.appでサーバを一旦停止し、再度起動します。
それでは、もう一度「http://localhost:8888/」にアクセスしてみましょう。
「Forbidden」のページが表示され、ディレクトリの一覧が出てこなくなります。

--- 以下、2006/8/21追記 ---
もう一つ重要な設定を忘れていましたので、追記しておきます。
perlなんかで書かれたcgiプログラムを、cgiとして認識させるために、次のように変更します。
959行目あたり。
変更前
#AddHandler cgi-script .cgi
変更後
AddHandler cgi-script .cgi
これで拡張子がcgiであるファイルがcgiとして認識されます。
売り上げランキング:38751
発売日:2006/06
2006/08/05
MAMPでWebサーバ構築1

この前書いたMAMPについて、設定のいじり方を書き留めておきます。
まず手始めに、MAMPのコントロールアプリ、MAMP.appから。
アプリケーションを立ち上げたところ。
左側がApacheとMySQLの稼働状態。
右側が読んで字のごとく。
「環境設定」ボタンを押すと設定のプルダウン・メニューが表示されます。

環境設定の最初のペイン「起動・停止」
好みのチェック・ボタンを設定します。
スタートページの場所はこのまま。

続きまして、「ポート」ペイン
デフォルトでは、ApacheとPHPの使用ポートが、それぞれ8888と8889に設定されています。
「...標準ポートに設定」ボタンを押すと、一般的なポート番号80と3306に変更されます。
「...初期値に戻す」で8888と8889が設定されます。
それ以外を設定したければ、入力窓に書き込みます。

「PHP」ペイン
PHP4とPHP5のいずれかを選択します。
Zend OptimizerとeAcceleratorは好みで。ちなみに私のマックがintelだからかどうか知りませんが、Zend Optimizerは選択できませんでした。

最後は「Apache」ペイン。
Document Rootのディレクトリを設定します。

このように、MAMP.appでごく限られた設定しか変更できません。
その他の設定は、テキスト・エディタを使い、設定ファイルを直接編集します。
売り上げランキング:177400
発売日:2006/06
2006/08/04
MAMP

Macintosh+Apache+MySQL+PHPでMAMP。
MacOS Xには初めからApacheが入ってるし,ちょっと設定変えたらPHPが動く。MySQLだってインストールできるしね。
けれど,面倒くさい。
これを使えばインストールから起動までものの3分。
あっという間にPHPの開発環境のできあがり。
ダウンロードはここから
インストール手順は次のとおり。
1.ダウンロードしたファイルを展開して,ディスクイメージをマウント。
2.MAMPフォルダをアプリケーションフォルダに丸ごとコピー。
3.MAMP.appを起動。
これでApacheとMySQLとPHPが起動して,Webブラウザ上でスタートページが立ち上がります。
MySQLをいじるためのphpMyAdminもインストール済み。いたれりつくせり。
本格運用しようとすると,設定ファイルをそれなりにいじる必要がありますが,PHPのテスト環境として使うのであれば何もいじらなくてもこれで十分。
設定ファイルを含む全ファイルがすべてMAMPフォルダの中にあるから,どこにどのファイルがあるか迷わなくていいし,アンインストールしたければMAMPフォルダごとゴミ箱捨てちゃえばOKってのも安心でいいですね。
売り上げランキング:177400
発売日:2006/06
2006/08/02
PHPとテンプレートエンジンSmarty
今日は、かなり久しぶりにPHPの話題。
Webのサーバーサイドスクリプト言語であるPHP。比較的取っつきやすくて動的なWebページを作成するにはうってつけ。今ではかなり幅広く普及した感があります。
ところで、Web上のスクリプト言語である以上、PHPで何らかのデータ処理を行った結果を、最終的にHTMLで吐き出すって作業を避けることができません。ロジカルな部分であるPHPと描画のためのHTMLの両方を扱わざるを得ず、その結果、両者がぐちゃぐちゃに入り交じった可視性の悪いファイルが出来上がることが必至です。
このような開発者泣かせの問題を解決する手段として、テンプレートエンジンSmartyがあります。
Smartyを使うとどのような利点があるかを示すために、日付及び時刻を表示するためのPHPスクリプトを作ってみました。
まずはベタなPHPのみのスクリプト。
サンプル1 (実行結果はここをクリック)
<?php// 現在のタイムスタンプ
$now = time();// 日付と時刻を文字列に変換
$dateStr = date('Y-m-d(D)', $now);
$timeStr = date('H:i:s', $now);// このファイルのパス
$myself = $_SERVER['PHP_SELF'];echo "<html>";
echo "<head><title>sample1</title></head>";
echo "<body>";
echo "<p>Date:$dateStr</p>";
echo "<p>Time:$timeStr</p>";
echo "<a href=\"$myself\">update</a>";
echo "</body>";
echo "</html>";?>
サンプル1は、変数$nowに現在のタイムスタンプを代入し、それを元に日付及び時刻を所定のフォーマットの文字列に変換し、それをブラウザ上に表示するというものです。ページをリロードするかupdateをクリックすることにより、表示が変化することが分かると思います。
この例では、PHPのecho文によってHTMLコードがWebブラウザに渡されています。HTMLコードがPHPスクリプトの中にどっぷりと埋め込まれ、PHPとHTMLがごちゃごちゃして非常に可視性が悪いです。
もう一つ例を挙げておきます。
サンプル2(実行結果はここをクリック)
<?php// 現在のタイムスタンプ
$now = time();// 日付と時刻を文字列に変換
$dateStr = date('Y-m-d(D)', $now);
$timeStr = date('H:i:s', $now);// このファイルのパス
$myself = $_SERVER['PHP_SELF'];?>
<html>
<head><title>sample2</title></head>
<body>
<?php echo "<p>Date:$dateStr</p>" ?>
<?php echo "<p>Time:$timeStr</p>" ?>
<a href="<?php echo $myself ?>">update</a>
</body>
</html>
サンプル1と全く同じ結果が得られるものですが、ソースファイルが若干違います。
前半部分はPHPによるロジカルな部分。後半部分はHTMLコードです。とはいえ、現在時刻等の動的な値を描画するために、PHPスクリプトが後半のHTMLの中に埋め込まれていて、やはりすっきりしません。
いよいよ、テンプレートエンジンSmartyの登場です。
Smartyを使うと、ロジカルなPHPと描画のHTMLを別々に分離することができます。
Smartyを使ったスクリプトを次に示します。
サンプル3(実行結果はここをクリック)
<?php// 現在のタイムスタンプ
$now = time();// 日付と時刻を文字列に変換
$dateStr = date('Y-m-d(D)', $now);
$timeStr = date('H:i:s', $now);// このファイルのパス
$myself = $_SERVER['PHP_SELF'];// Smarty
require_once 'Smarty/Smarty.class.php';
$smarty = new Smarty();$smarty->assign('dateStr', $dateStr);
$smarty->assign('timeStr', $timeStr);
$smarty->assign('myself', $myself);$smarty->display('sample3.tpl');
?>
後半がSmartyによる処理部分。
assignメソッドで動的に表示したい変数、$dateStrとか$timeStrとかをSmartyへ渡し、displayメソッドでWebブラウザへ出力します。
ここにある「$smarty->display('sample3.tpl');」が、ミソ。
sample3.tplがテンプレートです。Smartyは、assignメソッドで受け取った変数を、テンプレートファイルで展開し、その結果をWebブラウザに出力します。
テンプレートファイル sample3.tpl
<html>
<head><title>sample3</title></head>
<body>
<p>Date:{$dateStr}</p>
<p>Time:{$timeStr}</p>
<a href="{$myself}">update</a>
</body>
</html>
動的変数を表すために、{}で囲まれた特殊なタグを使いますが、それ以外は純粋にHTMLであることが分かるでしょう。サンプル1や2のようにecho文がありません。これでPHPとHTMLの分離がスッキリ。
Webページの表示を変更したければテンプレートをいじれば良し。逆にロジカルな部分を修正したければPHPをいじれば良い。開発者にとってメンテナンスが非常に楽ですね。
おすすめ度:

売り上げランキング:13616
発売日:2005/03/15
2006/06/29
新サイト作ってみました。
AmazonのWebサービス(ECS)とPHPとPEARのServices_AmazonとSmartyでブログ風に仕上げました。
2006/02/08
PEARの本
PHPでPEAR使うんなら読むべし。
翔泳社 (2005/09/09)
売り上げランキング: 9,010

PEARの本がでましたね。
まさにPEARの入門書
楽できそう本書では、PEARのほんの一部ライブラリにのみしか言及されていませんが、PEAR関係の書籍ってこれ以外皆無だし、PEARのオフィシャルサイトもドキュメントが貧弱なので、とっかかりにうってつけの本だと思いますよ。
2006/01/28
PHPインストールする4
昨日の続きです。
PHPをソースからインストールするのをあきらめて、MacOS用のインストーラを使うことにした。
ダウンロードはこちらから。どうせなら最新にということで、PHP5.1.2をインストール。
Mac用のインストーラだから簡単簡単。最初からこれでいけば良かった。

phpinfoをブラウザで表示させたところ。PHPのバージョンは5.1.2。

PEARも全く問題なく動作。
試しにCache_Liteパッケージをインストールしてみる。
$ sudo pear install -a Cache_Lite
downloading Cache_Lite-1.6.0.tgz ...
Starting to download Cache_Lite-1.6.0.tgz (25,865 bytes)
.........done: 25,865 bytes
install ok: channel://pear.php.net/Cache_Lite-1.6.0
PowerMacG4:/usr/local/bin jun$ pear list
Installed packages, channel pear.php.net:
=========================================
Package Version State
Archive_Tar 1.3.1 stable
Cache_Lite 1.6.0 stable
Console_Getopt 1.2 stable
PEAR 1.4.6 stable
Marcさんは神です。



