カテゴリー: PHP

  • 【PHP】stdClassとは?

    プロになるためのPHPプログラミング入門を読んでいると、オブジェクトの作成場面で知らない語法がでてきた。

    $obj = new stdClass();

    このstdClassとは何ぞや?ということで早速、調べてみました。

    解答は、PHPマニュアルに。
    http://php.net/manual/ja/language.oop5.basic.php

    上記マニュアルのノート部分に次のような記述があります。英語なので意訳してます。

    『stdClassは、PHPのデフォルトのオブジェクト(クラス)なんだ。
    stdClassは、どんなプロパティもメソッドも持たず、親クラスも無いんだよ。そして、マジックメソッドをサポートしてないし、インターフェースも無いんだ。
    スカラー値や配列をオブジェクトして扱いたいとき、stdClassをインスタンス化することができるよ。一般的なオブジェクトをインスタンス化したい時、stdClassを使うことができるんだ。』

    つまり、次のように、クラスが無くとも、とりあえずオブジェクトを作りたいときに便利に使える代物のようです。

    $obj = new stdClass();
    $obj->val1 = 123;
    $obj->val2 = 'abc';

    でも、あまり見かけないですよね。古い使い方なのでしょうか?それともオブジェクト指向のコードだと頻繁に使うものなのかな。

  • 【PHP】セッションファイルの保存先を変更する方法【CORESERVER】

    PHPのセッションファイルの保存場所変更についての覚書です。

    セッションファイルの保存場所を変更するには、「session_save_path」関数を用いることができます。
    http://www.php.net/manual/ja/function.session-save-path.php

    たとえば、CORESERVERを利用していて、セッションファイルを自分のホームディレクトリである非公開領域(ルート直下にsessionディレクトリを任意に作成した場合)に置きたい場合には次のようにスクリプト内で設定します。

    session_save_path('/virtual/your_account/session');

    この関数実行を含むファイルを共通化して、セッションを要するファイルすべてにインクルードする訳です。(php.iniや.htaccess等でも同様の設定はできるみたいですが、それはおいときます。)

    なお、session_start()関数を呼ぶ前に、session_save_path関数を実行することが必要です。

    このように、通常のセッションの置き場(CORESERVERやXREAだと、’/tmp’)と違う場所にセッションファイルを置く様にした場合は、ガベージコレクションについても、設定しておきます。

    ガベージコレクションを設定しておくと、セッションファイルの有効期間を任意に決められるので便利です。通常だと、1440秒(24分)アクセスがないとセッションは切れてしまいますが、それを、1時間とか2時間に延長することができます。

    セッションの保存先変更とあわせて設定すると次のようなスクリプトになります。

    //セッションファイル保存先 
    session_save_path('/virtual/account/session');
    
    //ガベージコレクション設定 
    ini_set('session.gc_probability', 1); 
    ini_set('session.gc_divisor', 100); 
    ini_set('session.gc_maxlifetime', 2 * 60 * 60);

    一番下の、’session.gc_maxlifetime’がセッションの有効期間を定めたものです。ここでは、2時間に設定しています。

    上の二つは、これで一組です。この設定の場合、1/100の確率でセッションファイルを削除することを意味します。

    1/100とは、session_start関数が100回呼ばれた場合、1回の確率でセッションファイルを削除する動作(ガベージ・コレクション)をするというものです。

    こまめに削除したいなら、1/10にするのも良いかもしれませんし、セッションをなるべく長時間生かしたいなら1/1000とかにするのも良いでしょう。ちなみに初期設定は、1/100らしいです。

    最後に蛇足ですが、セッションに関するセキュリティについても設定しておきます。

    セッションをクッキーのみで処理する方がセキュリティが高まります。つまり、URLパラメーターにセッションIDを付けるのを止める方法です。これは次のように設定します。

    //クッキーのみセッション可能設定
    ini_set('session.use_cookies', 1);
    ini_set('session.use_only_cookies', 1);

    これで、URLパラメーターにセッションIDがついていても無視することになり、セッション固定化攻撃等を防ぐことができるというわけです。

    ただし、クッキーが使えない携帯サイトでセッションを使う場合にはとりづらい方法かもしれません。

    上記で、セッション関連の設定を解説しましたが、どれもsession_startよりも前に実行することを忘れずに。

    なお、php.ini等で設定できる場合には、スクリプト内で設定するより楽なのでそちらの方がよいかもしれません。

    もっとも、CORESERVERでは、php.iniをそれぞれのディレクトリに置く必要があるかもしれないので、共通ファイル化したスクリプト内に、ini_set関数で設定してしまうのもありかもです。

    ■ セッションファイルの保存先を変更する理由

    最後の最後になりますが、どうしてセッションファイルの保存先を変更するのか?

    セッションファイルは、通常は、ルート直下の’/tmp‘に作成されます。

    これは、レンタルサーバーが共用サーバーである場合でも、同様です。

    共用サーバーである場合、他のユーザーのセッションファイルもルート直下の’/tmp’に作成されます。

    すると、自分のサイトに関連するセッションファイルと、他人のサイトのセッションファイルが同じtmpディレクトリに存在することになります。

    セッションファイルの名前は、セッションIDと同じです。その結果、’/tmp’を覗かれた場合には、他人のセッションファイルのセッションIDを知ることができてしまいます。

    これは、自分のセッションファイルのセッションIDが知られてしまうことも意味します。

    セッションIDが漏洩するとなりすまされる危険があります。

    そこで、自分だけのホームディレクトリかつ非公開領域にセッション用のディレクトリを作成しそこにセッションファイルを保存するようにするわけです。

  • 【書評】10日でおぼえるPHP入門教室 第4版

    ■ 書評対象:10日でおぼえるPHP入門教室 第4版 (山田 祥寛)

    ■ 良い点

    ・ オールカラーで読みやすい
    ・ 環境構築(XAMPP)や設定に詳しい
    ・ 4種類のサンプルアプリを作ることが出来る
    ・ 値ごろな割りに、内容が濃く、コスパが良い
    ・ セキュリティーにも配慮されている
    ・ DB接続にPDOを使っている
    ・ コードに対する、実行結果を表示している

    ■ 悪い点

    ・ 入門とあるが、全くの初心者には難しめである
    ・ SQLの解説は駆け足である

    ■ 総評

    (難易レベル)
    タイトルに、「PHP入門教室」とあるように、初心者向けのPHP本です。ただ、全くのプログラミング初学者には、若干、ハードルが高いです。

    読者対象としては、一通り、PHPの文法を学び、応用としてサンプルアプリに挑戦するぐらい人が最適だと思います。難易度は、初級と中級の間くらいのレベルです。

    (形式面)
    本の進め方としては、「実習」→「講義」→「まとめ」と進みます。実習でコードを最初に読み、続いて、講義を読むという形式です。コードの重要箇所がマークされているので重要箇所が読みやすいです。

    (内容面)
    サンプルアプリとしては、「アンケートフォーム」、「ゲストブック」、「画像アップロードシステム」、「スケジュール管理アプリ」の4種を作成します。

    ファイルの扱いから、データベースを利用してのCRUDシステムまで一通り作れるようになっています。DBの設定等にも詳しく、phpMyAdminの扱い方なども学ぶことができます。

    データベースでは、PDOを利用しているのも良い点です。

    DBに関して言えば、SQLの解説は少し駆け足になっている気がしますが、紙面の都合上仕方のない感じです。ここら辺は、自分でSQLの解説書で別に理解を深めた方が良さそうです。

    最後の章では、認証機能を扱っているのですが、PEARのAuthを使っています。現在のPHPの潮流として、PEARのAuthを使うのは、少し古い気もするので、自作の認証機能を解説をしてくれた方が良かったような気もします。

    結論としては、PHPの文法を一通り学んだ読者が、応用としてサンプルアプリを作りながら、中級者を目指すことのできる良書といえるでしょう。なかなかのオススメです。

    10日でおぼえるPHP入門教室 第4版

  • 【書評】最初のキホンがやさしくわかる 絵で学ぶPHP入門

    最初のキホンがやさしくわかる 絵で学ぶPHP入門 (オフィス加減)の書評です。

    ■ 良い点

    ・ タイトルどおり絵が多く、わかりやすい。

    ・ ページにゆとりがあり、読む負担が少ない。

    ・ 二色刷り(オレンジ系)で見やすい。

    ■ 悪い点

    ・ 解説範囲が、入門レベルの半分ほど。(データベースは無い)

    ・ 解説が大まか過ぎる箇所もある。

    ・ 後の範囲である未読の知識が先に散見される。

    ■ 総評

    全体として、PHP入門者(プログラミング未経験者)向けの初歩の解説書となっています。70ほどの項目を順序よく、理解しながら学べます。PHP学習の最初に読む本として、なかなかのお勧めです。

    読みやすく、分かりやすい反面、詳細は省かれているところもあるので、この本だけで、PHPを実際に動かせるかというと足りない部分もあります。

    データベースは扱っておらず、セキュリティは薄いので、更に、PHP本を読む必要があります。

    なお、この「オフィス加減」の書籍には、つくって覚えるPHP入門  という本があるので、これとセットにして読むと、効果が最大限に発揮されると思います。

    基本の文法をこの「最初のキホンがやさしくわかる 絵で学ぶPHP入門」でざっくり学び、次に、「つくって覚えるPHP入門」と進むのがオススメです。

    ちなみに、自分的には、「もう少し知っておこう」という項目ごとにあるコラム欄が良かったです。

    最初のキホンがやさしくわかる 絵で学ぶPHP入門

    つくって覚えるPHP入門

  • 【PSR】コーディング規約【PHP】

    PHPのコーディング規約「PSR」についての覚書です。

    そもそも、コーディング規約とは、「コードの書き方に関する決まりごと。プログラミング言語の文法とは異なり、様々な書き方が可能な場合にどういった書き方にするかを集団内の約束として決めたもの。」(IT用語辞典e-Words)

    上記定義を見るとわかるように、「集団内の約束」としてコーディング規約は役に立つのですが、個人で一人だけでコードを書いていても、汎用的な規約に従うことは、可読性や保守性の向上などのメリットがあります。

    そうした理由から、前々からコーディング規約について、それなりに気にしてはいたのですが、PHPにおいては、様々な規約があり一つに絞れませんでした。

    しかし、最近になって、これが統一的な規約になりうるであろうコーディング規約を知ったので、書き留めておきます。その規約とは。

    PSR(Propising a Standards Recommendation)
    http://www.php-fig.org/

    PSR-0  オートローディング規約
    PSR-1  基本コーディング規約
    PSR-2  コーディングスタイルガイド

    上記サイトのものが公式なのですが、英語サイトで読むのが大変です。

    そこで、
    新標準PSRに学ぶきれいなPHP
    http://www.slideshare.net/yandod/psrphp

    スライドで、PSRの内容がわかりやくす解説されていてオススメです。

    PSRの詳細は、公式や上記スライドを見ればわかるので、ここでは紹介しませんが、いずれにしても、学習の早い段階で目を通して、PSR、もしくはその他のコーディング規約に従う習慣をつけておいた方が良さそうです。