ログ日記

作業ログと日記とメモ

PHPからsubversionへのアクセスする

セキュリティ的に若干難有りな気がするが自分用メモ。
sudoersの設定を初めてやった。


まずはany-userのsshを設定し、パスワード無しでsvn+sshでアクセスできるようにしておく。
そしてsudo設定。

# /etc/sudoers に追加
www-data        ALL = (any-user) NOPASSWD: ALL

セキュリティを少しでも高めるなら、ALLではなくてユーザが実行できるコマンドを制限した方がいい。


#!/bin/bash
#
# /home/any-user/update.sh
cd /home/any-user/project_dir
svn update
<?php
class SvnUploader implements Iterator
{
    private $isContinue;

    public function rewind(){
        $this->isContinue = true;
    }

    public function current(){
        $this->isContinue = false;
        ob_implicit_flush(true);
        passthru('sudo -u any-user /home/any-user/update.sh');
        echo 'update!';
        return array();
    }

    public function key(){
        return '';
    }

    public function next(){}

    public function valid(){
        return $this->isContinue;
    }
}

わざわざイテレータを使ってるのは趣味の問題。テンプレートライブラリと逐次表示を共存させるために。
一枚物のページならcurrent()の中身だけで。



実はob_implicit_flush(true);に長時間ハマっていた。
ini_set('implicit_flush', true)じゃダメなのね。


svnは関係ないけど、set_time_limit()とignore_user_abort()とob_implicit_flush()とイテレータを組み合わせると、テンプレートを使っていても結構まともな逐次表示ができる。DBから大量のデータを表示する場合とか。