SOY CMSをユーザディレクトリ内に入れる方法
SOY CMSというCMS(Content Management System)がある。
http://www.soycms.net/
デモサイトがあるので、触ってみるといいと思う。
CMSとよばれるものをいくつか触ったことがあるが、これは結構いい感じだと思う。
いいと思う主な点
- 基本HTMLなので、余計なタグを覚えなくていい
- URLを自由に決められる
- エディタがよく出来ている
phpでCMSというとxoopsなどが有名だが、多機能な分、URLが自由にならない。
htmlが分かるならば、自由に作れるし、URLを決められるのもいい。
一見すると普通のhtmlのサイトと同じように作成することができると思う。
というわけで、ローカルのテストサーバに入れてみた。
ローカルサーバにはユーザディレクトリになる。
ダウンロード
まずは、以下から SOY CMS正式版が落とせる。
http://www.soycms.net/product/download
今日時点で最新版は、Ver. 1.1.0だ。
落としてきたのは、MySQL版のインストーラなし。
解凍
tarで解凍すると、以下のようなファイルが出来ている。
$ ls soycms_1.1.0_mysql.tar.gz $ tar zxf soycms_1.1.0_mysql.tar.gz $ ls admin common license soycms soycms_1.1.0_mysql.tar.gz $ ls admin/ SOYCMS_SYSTEM_DIRECTORY cache css image index.php init.php js webapp
DB設定
admin以下にブラウザからアクセスしてみる。
http://example.com/~maru/soycms/admin/
すると、以下のようなメッセージが表示する。
Can not get a datasource.
Please make sure your mysql configuration.
The config file is/common/config/db/mysql.php .
see -> http://www.soycms.net/man/mysql_configuration.html
soy2_build.phpを修正
再度アクセスすると、Not Foundになってしまう。
URLを確認すると、以下にリダイレクトしてしまう。
http://example.com/home/maru/public_html/soycms/admin/init.php
どうやら、初期設定として、init.phpにリダイレクトさせたいのだが、それがうまくいっていない。
リダイレクトしているところを探したところ、以下のファイル内に記述があった。
common/lib/soy2_build.php
56行目あたりに書いてある、createLinkFromRelativePath に原因がある。
切り出すと
function createLinkFromRelativePath($path){$currentScript = explode("/",str_replace($_SERVER["DOCUMENT_ROOT"],"",$_SERVER["SCRIPT_FILENAME"]));if($currentScript[0] == "")array_shift($currentScript);if(preg_match("/^https?:/",$path)){return $path;}if(preg_match("/^\//",$path)){return strtolower(trim(array_shift(split("/", $_SERVER["SERVER_PROTOCOL"])))) . "://".$_SERVER["HTTP_HOST"] . $path;}if(preg_match("/^[^\.]/",$path)){$path = "./".$path;}$paths = explode("/",$path);$pathStack = array();foreach($paths as $path){if($path == ".."){array_pop($currentScript);array_pop($currentScript);continue;}if($path == "."){array_pop($currentScript);continue; }array_push($pathStack,$path);}$url = implode("/",array_merge($currentScript,$pathStack));$protocol = split("/", $_SERVER["SERVER_PROTOCOL"]);return strtolower(trim(array_shift($protocol))) . "://".$_SERVER["HTTP_HOST"] ."/" .$url;}
どうやら、この soy2_build.php は、複数のphpを一つにまとめたファイルっぽいので、改行がなくて見難い。
とりあえず、整形。
function createLinkFromRelativePath($path){ $currentScript = explode("/",str_replace($_SERVER["DOCUMENT_ROOT"],"",$_SERVER["SCRIPT_FILENAME"])); if($currentScript[0] == "")array_shift($currentScript); if(preg_match("/^https?:/",$path)){ return $path; } if(preg_match("/^\//",$path)){ return strtolower(trim(array_shift(split("/", $_SERVER["SERVER_PROTOCOL"])))) ."://".$_SERVER["HTTP_HOST"] . $path; } if(preg_match("/^[^\.]/",$path)){ $path = "./".$path; } $paths = explode("/",$path); $pathStack = array(); foreach($paths as $path){ if($path == ".."){ array_pop($currentScript); array_pop($currentScript); continue; } if($path == "."){ array_pop($currentScript); continue; } array_push($pathStack,$path); } $url = implode("/",array_merge($currentScript,$pathStack)); $protocol = split("/", $_SERVER["SERVER_PROTOCOL"]); return strtolower(trim(array_shift($protocol))) ."://".$_SERVER["HTTP_HOST"] ."/" .$url; }
先頭の、str_replaceがうまく動いていない。
なので、とりあえず、次のように修正。
修正前
$currentScript = explode("/",str_replace($_SERVER["DOCUMENT_ROOT"],"",$_SERVER["SCRIPT_FILENAME"]));
修正後
$currentScript = explode("/",$_SERVER['SCRIPT_NAME']);
これで、とりあえずは動く。
再度、adminを開く。
http://example.com/~maru/soycms/admin/
すると、今度は、ちゃんと、init.php にリダイレクトしたが、別のエラーが発生する。
パーミッションが開かれていないのが原因だ。
パーミッション設定
$ chmod 777 admin/cache common/db soycms/cache
cacheはもちろん、common/dbの下に書き込めないと、初期設定画面は開くが、設定が完了したということにならなくなってしまう。
以下のような画面が出るので、初期ユーザの設定をすれば使えるようになる。
初回ログインの設定を行います。
これで
これで管理画面が見れるので、サイト一覧から、サイト作成が出来る。
サイトIDが、ドキュメントルート以下にフォルダ作成をしてしまうので、書き込みが出来ないと、作成が出来ない。
とりあえず、今回は、テストサーバなので、ドキュメントルートのパーミッション開いて、作成をし、自分の環境以下に作成したディレクトリをコピーという方法をとってみた。
まだ、ソース追いきれてないが、ここも変更してみたい。
最終的には、さくらインターネットの共用サーバに入れたいと思っているので、php5のインストールと、CGIがNGというのの原因を調べてみたいと思います。