MW211 EXIT

devlog
PHP/php.iniにおけるセッション関係の設定
2012年03月14日
主なものは以下のとおり。
┌────────────┬─────────────────────────┐
│session.save_path       │セッションファイルの保存先                        │
├────────────┼─────────────────────────┤
│session.name            │セッション名(PHPSESSID)                           │
├────────────┼─────────────────────────┤
│session.gc_probability  │セッションファイル破棄確率(分子)                  │
├────────────┼─────────────────────────┤
│session.gc_divisor      │セッションファイル破棄確率(分母)                  │
├────────────┼─────────────────────────┤
│session.gc_maxlifetime  │セッションファイル破棄時間(秒)                    │
├────────────┼─────────────────────────┤
│session.cookie_lifetime │クライアント側クッキーの生存期間(秒)              │
├────────────┼─────────────────────────┤
│session.cookie_path     │クッキーが有効なパス                              │
├────────────┼─────────────────────────┤
│session.cookie_domain   │クッキーが有効なドメイン名                        │
├────────────┼─────────────────────────┤
│session.use_cookies     │セッションIDの保持に、クッキーを利用するのか      │
├────────────┼─────────────────────────┤
│session.cache_limiter   │キャッシュ有無                                    │
│                        │・nocache =キャッシュ無                          │
│                        │・private =ブラウザにキャッシュ                  │
│                        │・public  =キャッシュサーバにもキャッシュ        │
├────────────┼─────────────────────────┤
│session.cache_expire    │キャッシュ期間(分)                                │
└────────────┴─────────────────────────┘
分類:PHP
PHP/タイムアウト延長
2012年03月13日
「Maximum execution time of ■ seconds exceeded」エラーが発生した場合の対処方法
無限ループ対策のタイムアウトにひっかかったので、
タイムアウト時間を延長してあげればよい。

プログラムで対処する場合。
┌─────────────────────────────────────┐
│set_time_limit(■);                                                       │
└─────────────────────────────────────┘

「php.ini」の設定を変更する場合。
┌─────────────────────────────────────┐
│max_execution_time = ■;                                                  │
└─────────────────────────────────────┘

「httpd.conf」の設定を変更する場合(「.htaccess」でもOK)。
┌─────────────────────────────────────┐
│php_value max_execution_time ■;                                          │
└─────────────────────────────────────┘
分類:PHP
PHP/奇数・偶数の判定
2012年03月04日
剰余で判定する方法は以下の通り。
┌──────────────────────────────────────┐
│if ($a % 2 == 1) {                                                          │
│  // 奇数です                                                               │
│} else {                                                                    │
│  // 偶数です                                                               │
│}                                                                           │
└──────────────────────────────────────┘

こんな方法もありです。
┌──────────────────────────────────────┐
│if ($a & 1) {                                                               │
│  // 奇数です                                                               │
│} else {                                                                    │
│  // 偶数です                                                               │
│}                                                                           │
└──────────────────────────────────────┘
分類:PHP
PHP/アクセス修飾子の組み合わせ(4)
2012年03月03日
なんともっと簡単にアクセス修飾子の挙動を把握できる方法があった。
生成したクラスを「print_r()」で中身を表示すればよいのだ

例えば、
┌──────────────────────────────────────┐
│class 親 {                                                                  │
│  public $a = '親';  ←★                                                   │
│}                                                                           │
├──────────────────────────────────────┤
│class 子 extends 親 {                                                       │
│  public $a = '子';  ←★                                                   │
│}                                                                           │
└──────────────────────────────────────┘
上記のように同名で変数を定義し、以下のように「print_r()」すると
┌──────────────────────────────────────┐
│$子 = new 子();                                                             │
│print_r((array)$子);                                                        │
└──────────────────────────────────────┘
結果は「Array ( [a] => 子 )」となる。

ではそれぞれのパターンでは?(×はエラー)
┌─────┬─────┬─────┬─────┬─────┐
│  親\子  │(定義なし)│   private│ protected│    public│
├─────┼─────┼─────┼─────┼─────┤
│          │    ×    │[子a]=> 子│[*a] => 子│[a]  => 子│
│(定義なし)│          │          │          │          │
├─────┼─────┼─────┼─────┼─────┤
│          │    ×    │[子a]=> 子│[*a] => 子│[a]  => 子│
│private   │          │[親a]=> 親│[親a]=> 親│[親a]=> 親│
├─────┼─────┼─────┼─────┼─────┤
│          │          │    ×    │[*a] => 子│[a]  => 子│
│protected │[*a] => 親│          │          │          │
├─────┼─────┼─────┼─────┼─────┤
│          │          │    ×    │    ×    │[a]  => 子│
│public    │[a]  => 親│          │          │          │
└─────┴─────┴─────┴─────┴─────┘
分類:PHP
PHP/アクセス修飾子の組み合わせ(3)
2012年03月02日
では、protected修飾子の変数を、親と子で同名で使用した上で
親メソッド、子メソッドのぞれぞれで参照した場合は?
┌──────────────────────────────────────┐
│class 親 {                                                                  │
│  protected $a = '親';  // →必須ではない                                   │
│  public function method親() {                                              │
│    $this->a .= 'です';                                                     │
│  }                                                                         │
│}                                                                           │
└──────────────────────────────────────┘
┌──────────────────────────────────────┐
│class 子 extends 親 {                                                       │
│  protected $a = '子';                                                      │
│  public function method子() {                                              │
│    $this->method親();                                                      │
│    return $this->a;                                                        │
│  }                                                                         │
│}                                                                           │
└──────────────────────────────────────┘
親メソッドで該当する方の変数に「です」をつけてみた場合
やはり子で定義した値に「です」が追加される。
┌──────────────────────────────────────┐
│$子 = new 子();                                                             │
│echo $子->method子();  // →結果は「子です」                                │
└──────────────────────────────────────┘
分類:PHP
PHP/アクセス修飾子の組み合わせ(2)
2012年03月01日
protected修飾子の変数を、親と子で同名で使用した場合の挙動を整理した
┌──────────────────────────────────────┐
│class 親 {                                                                  │
│  protected $a = '親';  // →必須ではない                                   │
│  public function method親() {                                              │
│    return $this->a;                                                        │
│  }                                                                         │
│}                                                                           │
└──────────────────────────────────────┘
┌──────────────────────────────────────┐
│class 子 extends 親 {                                                       │
│  protected $a = '子';                                                      │
│  public function method子() {                                              │
│    return $this->a;                                                        │
│  }                                                                         │
│}                                                                           │
└──────────────────────────────────────┘
親クラスのみを生成した場合は、子クラスは存在しないので当然ながら
親クラスで定義した値が優先される(「$a」の値は「親」)
┌──────────────────────────────────────┐
│$親 = new 親();                                                             │
│echo $親->method親();  // →結果は「親」                                    │
└──────────────────────────────────────┘
子クラスを生成した場合は、子クラスの定義がオーバーライドされるので
子クラスで定義した値が優先される(「$a」の値は「子」)
┌──────────────────────────────────────┐
│$子 = new 子();                                                             │
│echo $子->method親();  // →結果は「子」                                    │
│echo $子->method子();  // →結果は「子」                                    │
└──────────────────────────────────────┘
分類:PHP
PHP/foreachの参照渡しの場合の注意点
2012年02月29日
┌──────────────────────────────────────┐
│foreach ($a as &$value) {                                                   │
│  $value ='z';                                                              │
│}                                                                           │
└──────────────────────────────────────┘
foreachの参照渡しの場合の注意点。

┌──────────────────────────────────────┐
│foreach ($a as &$value) {                                                   │
│  $value ='z';                                                              │
│}                                                                           │
│unset($value)                                                               │
└──────────────────────────────────────┘
unset()すること。

とにかく絶対にだ。
分類:PHP、注意
PHP/value属性のないPOSTの内容
2012年02月25日
┌──────────────────────────────────────┐
│<input type="hidden" name="キー" value="値"/>                               │
└──────────────────────────────────────┘
name属性とvalue属性を設定して、POSTでsubmitすれば
「$_POST['キー'] = '値'」が送信される。

name属性がない場合、例えばid属性とかだった場合は、「$_POST」は送信されない。
┌──────────────────────────────────────┐
│<input type="hidden" id="キー" value="値"/>                                 │
└──────────────────────────────────────┘

では、(name属性はあるのに)value属性がない場合、どうなるのか?
┌──────────────────────────────────────┐
│<input type="hidden" name="キー"/>                                          │
└──────────────────────────────────────┘
「$_POST['キー'] = ''」が送信される。
つまり、そのname属性で送信はされる。
ただ中身は、NULLと思いきや「''」(空文字)なんだね。
分類:PHP
PHP/SQL文のIN句をつくる(2)
2012年02月18日
┌──────────────────────────────────────┐
│$where = array(1,,,4,,5);                                                   │
└──────────────────────────────────────┘
上記のように抽出条件に空値が混じっている場合、これを除外するには
以下の方法が有効だ。
┌──────────────────────────────────────┐
│$in = implode(',', array_filter($where, 'strlen'))             →  「1,4,5」│
└──────────────────────────────────────┘
「array_filter(,'strlen')」は文字長のある配列要素のみを抽出してくれる。
それぞれを「strlen()」にて変換した結果、
値が0でないものを抽出してくれるという仕組みだ。
分類:PHP、SQL
PHP/SQL文のIN句をつくる(1)
2012年02月17日
┌──────────────────────────────────────┐
│$where = array(1,4,5);                                                      │
└──────────────────────────────────────┘
┌──────────────────────────────────────┐
│SELECT 列                                                                   │
│    FROM 表                                                                 │
│    WHERE id IN (1,4,5);                                                    │
└──────────────────────────────────────┘
抽出したいIDを配列にあらかじめ格納しておいて、
そのIDに該当するものをSQL文で取得する場合、
配列をimplodeで一直線に並べて、SQL文に代入したやればよい
┌──────────────────────────────────────┐
│$in = implode(',', $where)                                     →  「1,4,5」│
└──────────────────────────────────────┘
┌──────────────────────────────────────┐
│SELECT 列                                                                   │
│    FROM 表                                                                 │
│    WHERE id IN ({$in});                                                    │
└──────────────────────────────────────┘

ちなみに、文字列の場合、「'」で囲う必要があるが、
これについては以下のようにしてやればよい。
┌──────────────────────────────────────┐
│$in = "'" . implode("','", $where) . "'"                 →  「"1","4","5"」│
└──────────────────────────────────────┘
分類:PHP、SQL
前へ 1 … 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 次へ