読者です 読者をやめる 読者になる 読者になる

SOY CMSをユーザディレクトリ内に入れる方法

SOY CMSというCMS(Content Management System)がある。
http://www.soycms.net/


デモサイトがあるので、触ってみるといいと思う。


CMSとよばれるものをいくつか触ったことがあるが、これは結構いい感じだと思う。
いいと思う主な点

  • 基本HTMLなので、余計なタグを覚えなくていい
  • URLを自由に決められる
  • エディタがよく出来ている

phpCMSというと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

メッセージ中のURLを参考に以下の config/db/mysql.php を修正する。

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というのの原因を調べてみたいと思います。