2016/07/30(土)さくらのレンタルサーバーにPHP7を導入

2016年12月14日からPHP7.1が使用できるようになったので、この作業をする必要は無くなりました。→さくらのレンタルサーバ PHP7.1 提供開始のお知らせ | さくらインターネット

さくらのレンタルサーバーにPHP7を導入

さくらのレンタルサーバーがなかなかPHP7に対応しないので自力でインストールしてみました。

注意:この方法でPHP7を導入した後は、自身の責任においてセキュリティーアップデート(最新版の再導入)をしてください。

続きを読む

PukiWiki 多重includeの深さ制限

2016/06/25 Programming::PukiWiki

PukiWiki 多重includeの深さ制限

多重include(includeの中でincludeを使う)の深さを制限できる改造版includeを作成しました。

制限を超えると、エラーメッセージ

#include(): Limit exceeded (recursive): ページ名

が表示されます。

使い方

  1. 設定
    • 添付のinclude.inc.php内のPLUGIN_INCLUDE_MAX_DEPTHを、必要に応じて変更します。
      // Max depth of recursive include
      define('PLUGIN_INCLUDE_MAX_DEPTH', 2);
      
      • 1で多重include禁止、2で二重まで許可。以降数字を増やすごとに許可される深さが増えます。
      • 0は無制限(もとのincludeと同じ)。
      • PukiWiki bodycache改良版のデフォルト設定は、二重includeまで対応しています。ただし、pcommentも含めて二重なので、pcommentで深さを1つ消費すると考えるとPLUGIN_INCLUDE_MAX_DEPTHの設定は1にするのが良いでしょう。
  2. 設置
    • include.inc.phpを、PukiWikiに元からあるinclude.inc.phpと置き換えます。

参考:改造内容

  • 上の方に設定値を追加
    // Max depth of recursive include
    define('PLUGIN_INCLUDE_MAX_DEPTH', 2);
    // e.g.
    //   PLUGIN_INCLUDE_MAX_DEPTH=0: no prohibition
    //   PLUGIN_INCLUDE_MAX_DEPTH=1: prohibit recursive include
    
  • function plugin_include_convertの冒頭に変数$depthを追加。
    function plugin_include_convert()
    {
    	global $script, $vars, $get, $post, $menubar, $_msg_include_restrict;
    	static $included = array();
    	static $count = 1;
    	static $depth = 1; //追加
    
  • PLUGIN_INCLUDE_MAX判定の直後に、PLUGIN_INCLUDE_MAX_DEPTHの判定を追加。*1
    	if (isset($included[$page])) {
    		return '#include(): Included already: ' . $link . '<br />' . "\n";
    	} if (! is_page($page)) {
    		return '#include(): No such page: ' . $s_page . '<br />' . "\n";
    	} if ($count > PLUGIN_INCLUDE_MAX) {
    		return '#include(): Limit exceeded: ' . $link . '<br />' . "\n";
    	} if ($depth > PLUGIN_INCLUDE_MAX_DEPTH && PLUGIN_INCLUDE_MAX_DEPTH > 0) { //追加
    		return '#include(): Limit exceeded (recursive): ' . $link . '<br />' . "\n"; //追加
    	} else {
    		++$count;
    	}
    
  • convert_htmlの前後に、$depthのインクリメントとデクリメントを追加。
    	if (check_readable($page, false, false)) {
    		++$depth; //追加
    		$body = convert_html(get_source($page));
    		--$depth; //追加
    	} else {
    		$body = str_replace('$1', $page, $_msg_include_restrict);
    	}
    

関連記事

*1 : if/elseの書き方が気持ち悪いのですが、元の書き方に倣いました。ifの中が全部returnなので、動作上は問題ないはず。

添付

ライセンスはGPLv2 or laterです。(PukiWikiと同じ。)

PukiWiki bodycache改良版

2016/03/20(日)PukiWikiを1.5.1に更新

PukiWikiを1.5.1に更新

ECO-Wiki (acronia)で使っているPukiWikiは2015/03/25のスナップショットでしたが、PukiWiki 1.5.1 がリリースされたのでバージョンアップしました。

改造箇所があるのでdiff-patchで適用しましたが、大きな修正が必要な衝突もなく上手く動いているようです。

続きを読む

2016/02/28(日)働クリッカーをやってみた

働クリッカーをやってみた

一週間くらい前に働クリッカーで遊んでてtwitterに最速クリアタイム載せたりしてたのですが、クリアタイムが環境依存でそれだけ見てもよく分からないので、ソースコードを載せてみます。

そのうち解説/攻略みたいなの書くかも?

全実績解除

最初は資格とプログラミングをバランス良く買う。170msくらいだった。

(function(g){
  var purchase = g.purchase;
  var work = g.work;
  var i,j,k;

  start();
  //働きつつ資格とプログラミングを買う
  for(i=27;i;i--){
    for(j=124;j;j--){
      for(k=8;k;k--){
        work();
      }
      purchase(0);
    }
    for(k=107;k;k--){
      work();
    }
    purchase(4);
  }
  //働きつつプログラミングを99まで買う
  var work_num = 90;
  for(i=73;i;i--){
    for(j=work_num;j;j--){
      work();
    }
    purchase(4);
    work_num+=3;
  }
  //働いて一億+残りの買い物の費用を稼ぐ
  for(i=25285;i;i--){
    work();
  }
  //買い物する
  for(i=99;i;i--){
    purchase(3);
    purchase(2);
    purchase(1);
  }
  purchase(1);
})(this);

全実績解除その2

最初は資格だけを買う。170msくらいだった。こっちでも大して速さ変わらないという(^_^;)

(function(g){
  var purchase = g.purchase;
  var work = g.work;
  var i,j,k;

  start();
  //働きつつ資格を買う
  for(i=3600;i;i--){
    for(k=8;k;k--){
      work();
    }
    purchase(0);
  }
  //働きつつプログラミングを99まで買う
  var work_num = 30;
  for(i=154;i;i--){
    for(j=work_num;j;j--){
      work();
    }
    purchase(4);
    work_num+=1;
  }
  //働いて一億+残りの買い物の費用を稼ぐ
  for(i=24550;i;i--){
    work();
  }
  //買い物する
  for(i=99;i;i--){
    purchase(3);
    purchase(2);
    purchase(1);
  }
  purchase(1);
})(this);

ゲームクリアのみ

ゲームクリア(一億円達成)のみ。120msくらい。

(function(g){
  var purchase = g.purchase;
  var work = g.work;
  var i,j,k;

  start();
  //働きつつ資格とプログラミングを買う
  for(i=22;i;i--){
    for(j=124;j;j--){
      for(k=8;k;k--){
        work();
      }
      purchase(0);
    }
    for(k=120;k;k--){
      work();
    }
    purchase(4);
  }
  //働いて一億稼ぐ
  for(i=21287;i;i--){
    work();
  }
})(this);
OK キャンセル 確認 その他