NP_CreateAccount
○概要
作っているサイトは複数人での使用が前提だったので、ユーザー管理を楽に行いたい。
で、色々検索してそれっぽいプラグインを見つけたのでそれを改造して使おうとか考えつつさらに検索してみたら、そのままズバリ求めている機能を持ったプラグインを発見。それがNP_CreateAccount。
どんなプラグインかは作者さんのページに書いてあるので省略する。良くできたプラグインで、そのままで殆ど手を付ける必要はなかったけど、若干修正したのでそのメモ。
○修正の内容
各ユーザー毎のindex.phpを作成している所を以下のように修正。
$fp = @fopen($url, “w”) or die(“n index.php cannot be created!!”);
Fancy URLを使っている人はそのあたりも同様に修正。
○修正の詳細
このプラグインは、新しいユーザーを作る時に以下の事をする。
・blogのルートディレクトリの下にユーザー名で新しいディレクトリを作成する
・ユーザー名と同名のblogを作成する
blogのルートディレクトリが/home/foo/public_html/だとしたら、/home/foo/public_html/bloguser/というディレクトリを作る。問題になるのはホスティングサーバーとかだとPHPのセーフモードがオンになっているので、所有者がfooであるディレクトリ/home/user/public_html/にapacheのユーザー(環境によって違うが一般的にはnobody、http、www、apacheなど)がファイルを書き込む事は出来ない。
それに対して(かどうかはちょっと不明)、NP_CreateAccoutではPHPからFTP関数を使ってユーザーfooの権限で接続しディレクトリを作成している。けど、そのディレクトリの下に書き込むファイルは通常のfopen関数を使って開いているのでapacheのユーザーで作成される。そうするとファイルは作成されても、そのファイル(PHPスクリプト)から設定ファイルなどの他のファイルを読み込む事はできない。
という事で上記の修正をして、ファイルもFTP経由で書き込むようにして権限の問題を回避。fopenその他の関数では、Ver. 4.0.3以降でallow_url_fopenというのが追加されてて、これがtrueになってるとfopenの引数にhttp://www.example.com/とかftp://user@pass:localhost/dir/filenameなどを指定できるようになった。
ちなみにVer 5以降ではmkdir関数でも同様の事が出来るようになったらしい。そうするとftp_connectとかが完全に要らなくなる。
PHP5が使えて安いホスティングないかな、、、