Home > PHP Archive

PHP Archive

phpとsqliteでバックアップ

小物ツールを作るとき、私はよくPHPとSQLiteを使います。PHPなら簡単にSQLite使えるし、バックアップが簡単なためです。
例えば名セリフDB(ほとんど使われていませんがw)では以下のような関数を作っていつでもバックアップと復元ができるようにしています。


define("DB_NAME", "hoge.db");
define("BACK_DIR", "./fuga");

function back_up() {
   $time = getdate();
   $date = sprintf("%04d%02d%02d-%02d%02d%02d"
         ,$time['year'],$time['mon'],$time['mday'],$time['hours'],$time['minutes'],$time['seconds']);
   
   $back_up_name = BACK_DIR . "/" . $date . ".db";
   if (copy(DB_NAME, $back_up_name)) {
      return "OK Back up $back_up_name";
   } else {
      return "NG Back up";
   }
}

function list_of_old() {
   $dh = opendir(BACK_DIR);
   $files = array();
   while (false !== ($file = readdir($dh))) {
      if ($file == '.' || $file == '..' || !strstr($file, '.db')) continue;
      $files[] = $file;
   }
   return $files;
}

function recover($date) {
   $file =  $date;      // list_of_oldで表示した日付
   if (!$file || $file == "") return;
   $file = BACK_DIR . "/" . $file;
   if (copy($file, DB_NAME)) {
      return "OK Recover From $file";
   } else {
      return "NG Recover";
   }
}

まあ、日付でDBファイルをコピーしてバックアップして、復元するときもバックアップファイルからコピーして置換するっていう。
こういう豪快なことができるのもシンプルDBであるSQLiteと、データサイズが小さくて済むユーザーレスサービスの強みですね。

以上

三目認証(○×認証)リリース

全く要望はありませんでしたが、更新ネタがないので三目認証を公開しておきます。
PHPの認証ライブラリ(?)です。
三目並べ(○×)に勝つことで認証に成功する認証システムです。(○の勝ちパターンすべてを選択する)

sanmoku.zip
配布ページ
以下、注意事項。

本認証スクリプトはなんちゃって認証です。
たいして認証パターンもありませんし、リプレイアタックも回避できないダメな子です。
(ただし、日をまたいでのリプレイアタックはできないように軽く工夫しています。)
ちょっとまじめに対策をとられたら簡単に自動処理されちゃう可能性があります。
なので本気の認証などには決して使わないでください。
「まじめなCAPTCHAはめんどくさいけど気休め程度の認証をつけたい、あと遊び心があればいいなあ。」
っていう人だけ使ってください。

サンプル

以上

VS.Phpのphp.ini

  • 2009-01-25 (日)
  • PHP

VS.Phpの体験版を再び入れてみた。
なんか微妙にかゆいところに手が届かない気が・・・。
デバッガをDBGかXDebugを選べるけどDBGだとnullオブジェクトとかのエラーを検出してくれないし、XDebugだとブレークポイントで止まらない。使い方間違ってるのかなー。
プロジェクトの「PHPモジュール」にsqliteを追加してもsqlite使えない。実行するとプロジェクトフォルダにphp.iniが自動生成されるけど、sqliteはコメントアウトになってる。どっから持ってきてるのかと思ったらVS.PhpのインストールフォルダにDBG用とXDebug用があった。そう言えば昔もここのファイルいじったなあ、などと思いつつこのファイルを修正したらsqlite使えた。

EclipseのPHP環境あるけど、なんか最近JavaやってないからEclipse自体も疎遠なんだよな。

以上

PHPのどうしようもなくくだらないテスト3 trueとfalseとnull

  • 2008-11-16 (日)
  • PHP

それぞれどういう等号が成り立つのかなーと。
どんどんしょうもなくなっていくけど、まあいいや。


if (0 == false) {
	echo "0 == false\n";
}

if (0 === false) {
	echo "0 === false\n";
}

if (1 == true) {
	echo "1 == true\n";
}

if (1 === true) {
	echo "1 === true\n";
}

if (2 == true) {
	echo "2 == true\n";
}

if (0 == null) {
	echo "0 == null\n";
}

if (0 === null) {
	echo "0 === null\n";
}

if (null === false) {
	echo "null === false\n";
}

if (false === (0 == 1)) {
	echo "false === (0 == 1)\n";
}

結果


0 == false
1 == true
2 == true
0 == null
false === (0 == 1)

以上

○×認証(三目認証)テスト

  • 2008-11-13 (木)
  • PHP

次の1手での勝ちパターンをすべて選択する○×認証(三目認証)。
若干改良し、日をまたいでのリプレイアタックはできないようにした。
サンプルは下。もしもjavascriptが使えない場合は、テキストボックスに1~9の番号を書くのでもOK(左上が1、右下が9、横にインクリメント)。”24”とか。

以上

○×認証(三目認証)

RFR(更新してないRSSリーダー)のサポート掲示板が大変なことになっていた。

スパムの嵐である。1日2000もカウンタ回っとる。このブログの5倍以上じゃないか。
「これはなんとかせねば・・・!」ということで、○×認証(三目認証)を作った。
○×認証付きサポート掲示板(の投稿ページ)
○×に勝たないと投稿できません。
いったんログは全部消したので、果たして効果があるのか様子見。
実際は何パターンもないし、暗号化はしているもののキーも全部HTMLにはき出しているので(サーバに何も残さないため)、本気でやれば簡単に破れる認証ですが、個人サイトの掲示板程度ならこんなもんでいいんじゃないかと。ただし、リプレイアタックは天敵です。ちょっとした改良はそのうち加えるつもり。
万が一要望があればソースも公開します。
以上

PHPのどうしようもなくくだらないテスト2 参照とコピー

  • 2008-11-09 (日)
  • PHP

これ、前にも書いたような気がするけど、まあいいや。忘れたし。参照とかコピーとか参照返しとかそんなんの確認。


$glob = "aaa";

function & toRef(&$val) {
  return $val;
}

function change(&$val) {
	global $glob;
	$val =& $glob;		// 参照先を変えようとしている
	echo $val . "\n";   // ③
}

class RefArray {
	var $array;
	function RefArray(&$array) {
		$this->array =& $array;
		$this->array[0] = 1;	// 参照先の値を変えようとしている
	}
	
	function out() {
		echo $this->array[0] . "\n";
	}
}

// 参照渡し
$val = 1;
$ref =& toRef($val);
$ref += 1;
print $val . "\n";// ①

// コピー渡し
$val_2 = 1;
$notref = toRef($val_2);	// ここがコピーなので下の変更は$val_2には無効
$notref += 1;
print $val_2 . "\n";// ②


// 変更
$val_3 = "bbb";
change($val_3);	// 参照先は変えられない
echo $val_3 . "\n";  // ④

// 配列
$val_4 = array(0, 1);
echo "\n" . $val_4[0] . "\n";  // ⑤
$val_5 = new RefArray($val_4);	// 参照先の値は変えられる
$val_5->out();  // ⑥
echo $val_4[0] . "\n";   // ⑦

php5.2.4の結果。


2        // ①
1        // ②
aaa     // ③
bbb     // ④

0        // ⑤
1        // ⑥
1        // ⑦

参照で返したら参照代入しないといけないというのと、関数の引数の参照先は変えられないという話(だと思う)。
参照先が変えられないというのは、Cでポインタを引数に渡すときに勘違いするなよと同じ話かな?

以上

PHPのどうしようもなくくだらないテスト1 配列

  • 2008-11-06 (木)
  • PHP

なんかtestフォルダってのをのぞいてみると、いろいろくだらないというか初歩的すぎるというか、いろんな言語をかじったことで言語仕様を理解できなくなっているが故の確認というか、そういう超トリビアルなテストスクリプトがいっぱいあったので書くことがないときにちょっとずつ晒す。書くことがない自分への戒めとして。恥も外聞もない。もう何をやりたかったのか分からないものも多い。

まずはphpで配列の比較が等号でできるのかどうかというテスト(のようだ)。Cだとできない。phpだとできるのか!?


<?php

$array1 = array(1, 2, 3);
$array2 = array(1, 2, 3);
$array3 = array(1, 2, 4);

$array4 = array("a", "b", "c");
$array5 = array("a", "b", "c");
$array6 = array("a", "b", "d");

if ($array1 == $array2) {
	echo "1 = 2\n";
}
if ($array1 == $array3) {
	echo "1 = 3\n";
}
if ($array1 === $array2) {
	echo "1 = 2\n";
}
if ($array1 === $array3) {
	echo "1 = 3\n";
}
if ($array4 == $array5) {
	echo "4 = 5\n";
}

if ($array4 == $array6) {
	echo "4 = 6\n";
}
if ($array4 === $array5) {
	echo "4 = 5\n";
}

if ($array4 === $array6) {
	echo "4 = 6\n";
}
?>

1 = 2
1 = 2
4 = 5
4 = 5

できるようです。

以上

第三回CakePHP勉強会に参加

細かい内容は発表資料とかがすでにアップされてるので、正直な感想を書く。ネガティブな感想を書く。その前にスタッフ側(発表者含む)の人たちには敬意を持っている旨を示しておく。

以下箇条書きで、全体を通して思ったことをスケールをあわせないで書く。
・初心者向け
 発表された内容はレベルが高いとはいえない。CakePHPを触ったことがない、あるいはフレームワークを使ったことがない人向けの話が多かった。よく言えば初心者向け。人数増えてくるとこういう感じになるのかな?勉強会なんだから、回を増すごとにレベルは上がっていくべきと思うんだけど・・・。
・自己暗示
 なんか、「CakePHPは簡単」とか「楽」とかみんないうんだけど、無理矢理テンションあげて言ってるんじゃないだろうか。私はCakePHPはそんなに簡単じゃないと思うし(導入は簡単だと思うけど)、そこまで便利だとも思わない。その辺をちゃんと議論した発表はなかった。失敗談はあったけども。なんとなく宗教じみてる気がした。
・よく分からない
 CakePHPはすごいと言いつつ、「よく分からない」とも言う人が多くておもしろかった。「よく分からない」というのはすごく共感できる。私もよく分からない。仕様も固まってないし、ドキュメントと実装がずれてるし、そもそも日本語のドキュメントがまだまだ少ないと思う。簡単なことは確かに簡単にできるけども、ちょっと手の込んだことをやろうとすると途端にどうしたらいいか分からなくなる。そういうのを助けてほしいんだけども。勉強会で。
・テストの話はよかった
 職業プログラマの人の話はためになる。ただし、個人で作ってるとテストなんてやってられないんだけど・・・。

次回参加するかは微妙だなあ。発表者の顔色を見て判断します。

以上

CakePHPではまったこと22(エスケープ)

  • 2008-06-23 (月)
  • PHP

Flashとのやりとりのため、CakePHPで返すViewはすべてJSON!という感じでやってます。そうすると、DBのデータそのものもJSONにしたい場面が当然あるわけで、そうするとエスケープではまりました。ちょっとだけ。
実はCakePHPは関係ないかもしれないんだけども、要はmagic_quotes_gpcがデフォルトでONになっているためJSONで使う二重引用符がエスケープされて格納されて困ったという話。そうするとgetしたときにエスケープ文字(¥)が文字列として認識されて、$javascript->object(json)なんてやってviewしたときにエスケープが¥¥みたいなことになって訳分からんことになっていたという話。そういうわけでmagic_quotes_gpcはoffにしましょうよと。
参考(offのやり方):マジッククオートを無効にする

ちなみにAS3でJSONのデコード・エンコードはa3corelibでお気軽にできる。

以上

Home > PHP Archive

Search
Feeds
Meta
 合計:016018
 今日:0016 昨日:0168

Return to page top