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から大量のデータを表示する場合とか。