2012/03/21

【PHP】PHPのセッションで第一階層に数字添字を指定した時に発生する問題

ということでさっきあった現象のメモ

PHPでセッションを使用した際に、セッション変数の第一階層の添字に
数字を指定すると次画面に遷移した際などにそのあたいが引き継がれない。

例えば
<?php

// 動かない
$_SESSION[1]['var'] = 'var1';

// 動く
$_SESSION['a']['var'] = 'var1';
このようにセッションの第一階層に数値の添字を指定すると 画面遷移など別画面に遷移しセッションをスタートしても、 数値添字を指定した方だけ取得できなくなります。 これはどうやら内部仕様っぽいです、実際はわからないですが 引き継がれていない以上はそういうものとして扱う必要があるわけです。 終わり

2012/03/19

【雑記】朝起きたらおじぎが新年初脱皮中だった

朝起きたらおじぎ(ヘビ)が新年初脱皮中でした。
脱皮中の写真を何枚か撮ってたんですが、ぶれてたりしてたのでボツにしました。

代わりに脱皮後の皮

もう70cmぐらいですね 終わり

2012/03/17

【さくらサーバ】PEARをインストールする【PHP】

ということでさくらサーバにPEARをインストールした時のメモ

さくらサーバにはすでにPEARがインストールされていますが、
バージョンが古い、パッケージを追加できない等の問題がありますので、自前で使用するパッケージを
インストールできるようにしました。

まずは、ホームディレクトリにPEARの設定ファイルを作成します。
$ pear config-create $HOME .pearrc
次にPEARの設定ファイルに以下の値をセットします。 1.binディレクトリ
$ pear config-set bin_dir $HOME/usr/local/bin
2.ダウンロードディレクトリ
$ pear config-set download_dir $HOME/tmp
3.作業用ディレクトリ
$ pear config-set temp_dir $HOME/tmp
4.ライブラリディレクトリ
$ pear config-set php_dir $HOME/lib/pear
最後にPEARコマンドを実行できるように、「.cshrc」を編集します。
$ setenv PATH (いままで設定されていたパス) : 1に設定したパス $ source $HOME/.cshrc
コマンドを実行できるようになったら、PEARをインストールしてみます。
$ pear install PEAR
下記のコマンドでインストールされていれば完了です。
pear list
上記設定の場合のインクルードパスは、4で設定したディレクトリになります。 終わり

2012/03/16

【Linux】rsyncでSubversion管理のプロジェクトをシンクする

ということで「rsync」コマンドで
プロジェクトを開発環境から本番環境へ移動する際のメモです。

ファイルを開発環境から本番環境へ移動する際は下記のコマンドを使用します。

rsync -avz ./target1 ./target2
 target1 がシンク元で target2 がシンク先になります。 オプションは -a オプション がシンク元に設定されていたパーミッションなどを保持するオプション -v オプション がシンク中のファイル名を表示するオプション -z オプション がデータを圧縮してシンクするオプション になります。 これとは別に「-n オプション」を追加することにより コマンド実行時の操作結果を表示します。 実際にシンクはされませんのでテストに使用します。 ですが、試験環境はSubversionで管理されているため、 ディレクトリごとに 「.svn」 という名前のディレクトリが 作成されます。 これは、本番環境には必要無いのでシンクする必要はありません。 ですので、下記のオプションを追加してシンク対象より弾きます。
rsync -avz --exclude ".svn" ./target1 ./target2
--exclude オプション」は、シンク対象より設定されたパターン に合致するものを弾きます。 つまり上記コマンドの場合は 「.svn」 をシンクしない様になります。 終わり

2012/03/08

【PHP】可変関数を実行する

可変関数の実行についてのメモです。

PHPでは変数名の後に「()」が付いている場合
変数の値と同名の関数をコールします。
可変関数は、メンバ関数も関数同様にコールすることができます。
また、スタティック関数もコールできますが、public以上のアクセスレベルだと実行できません。

こんな感じです。
<?php

class variableFunction
{
    public function disp($str)
    {
        echo $str;
    }

    public static function disp2($str);
    {
        echo $str;
    }
}

function disp($str)
{
    echo $str;
}


$func = 'disp';
$str  = '表示';

// 通常の関数をコール
$func($str);

// インスタンスを生成したクラス関数をコール
$vF = new variableFunction;
$vF->$func($str);

// variableFunctionクラスのスタティック関数をコール
$func2 = "disp2";
variableFunction::$func2($str);
※echo(), unset(), isset(), empty(), include(), print()のような言語構造と  組み合わせることはできません。 終わり

2012/03/02

【MySQL】UPDATE文でサブクエリを使う時の注意

ハマりかけたのでメモ

MySQLのUPDATE文でサブクエリを使う際の注意点です。

下記のようにUPDATE文では更新対象をサブクエリの問い合わせに
使用することはできません。
UPDATE `user` SET 
  `user`.`name` = 'test01'
WHERE 
  `user`.`id` = 
  (
    SELECT 
      `user`.`id`
    FROM 
      `user`
    WHERE 
      `user`.`id` = 1
  )
こんなUPDATE文は通常有り得ないですが・・・ 終わり